【问题标题】:How do I customise date/time bindings using JAXWS and APT?如何使用 JAXWS 和 APT 自定义日期/时间绑定?
【发布时间】:2010-05-31 09:56:02
【问题描述】:

我正在使用 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 工具指定自定义绑定

【问题讨论】:

    标签: java binding jaxb jax-ws apt


    【解决方案1】:

    好的,找到了!阅读此链接: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(name="时间")
    @XmlJavaTypeAdapter(mypackage.TimeFromDateAdapter.class)
    私人日期唤醒时间;

    你走了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      相关资源
      最近更新 更多