如何使用 JAXWS 和 APT 自定义日期/时间绑定?

发布于 2024-09-04 07:14:58 字数 496 浏览 10 评论 0原文

我使用 JAXWS 2.1.7,使用一些类来运行 JAXWS 的“apt”来生成 WSDL。对于日期,我使用

@XmlSchemaType(name="time")  
private Date wakeupTime;

它,这会生成一个带有 xs:time 的模式,但是当这一切都以 XML 形式出现时,该值就像

<wakeupTime>1901-01-01T01:00:00 +10</wakeupTime>

我想要的只是时间部分!我想我想使用自定义转换器来表示 xs:time + java.util.Date 应该以这样那样的方式打印和解析,但我看不到我可以将绑定文件传递给 apt 例程。我不能(由于历史和其他原因)使用 XMLGregorianCalendar - 它必须是 java.util.Date。如何为 jaxb 中的 apt 工具指定自定义绑定

Im using JAXWS 2.1.7, using some classes to run through JAXWS's 'apt' to generate the WSDL. For dates, I use

@XmlSchemaType(name="time")  
private Date wakeupTime;

and this generates a schema with xs:time, but when this all comes out in XML, the value is something like

<wakeupTime>1901-01-01T01:00:00 +10</wakeupTime>

I want JUST the time portion to come! I think I want to use a custom converter to say that xs:time + java.util.Date should be printed and parsed in such-and-sucha manner, but I cant see that I can pass a bindings file to the apt routine. I can't (for historical & other reasons) use XMLGregorianCalendar - it has to be a java.util.Date. How do I specify a custom binding for the apt tool in jaxb

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南城旧梦 2024-09-11 07:14:58

好的,找到了!阅读此链接:http://weblogs.java.net /blog/2005/04/22/xmladapter-jaxb-ri-ea
并使用 javax.xml.bind.annotation.adapters.XmlAdapter。即

public class TimeFromDateAdapter extends XmlAdapter<XMLGregorianCalendar, Date>
{
  public Date unmarshal(XMLGregorianCalendar value)
  {
    Calendar cal = value.toGregorianCalendar();
    Date d = cal.getTime();
    return d;
  }

  public XMLGregorianCalendar marshal(Date value)
  {
    Calendar cal = Calendar.getInstance();
    cal.setTime(value);
    try
    {
    XMLGregorianCalendar xmlcal =   DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0);
    return xmlcal;
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return null;
    }
  }
}

然后:
@XmlSchemaType(名称=“时间”)
@XmlJavaTypeAdapter(mypackage.TimeFromDateAdapter.class)
私人日期唤醒时间;

然后你就走吧。

OK, found it! Read this link: http://weblogs.java.net/blog/2005/04/22/xmladapter-jaxb-ri-ea
and use a javax.xml.bind.annotation.adapters.XmlAdapter. i.e.

public class TimeFromDateAdapter extends XmlAdapter<XMLGregorianCalendar, Date>
{
  public Date unmarshal(XMLGregorianCalendar value)
  {
    Calendar cal = value.toGregorianCalendar();
    Date d = cal.getTime();
    return d;
  }

  public XMLGregorianCalendar marshal(Date value)
  {
    Calendar cal = Calendar.getInstance();
    cal.setTime(value);
    try
    {
    XMLGregorianCalendar xmlcal =   DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0);
    return xmlcal;
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return null;
    }
  }
}

and then :
@XmlSchemaType(name="time")
@XmlJavaTypeAdapter(mypackage.TimeFromDateAdapter.class)
private Date wakeupTime;

and away you go.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文