【问题标题】:Can JAX-WS map an XSD date (xs:dateTime) to a Java Calendar?JAX-WS 可以将 XSD 日期 (xs:dateTime) 映射到 Java 日历吗?
【发布时间】:2010-11-16 21:56:01
【问题描述】:

JAX-WS 能否将 XML schema date (xs:dateTime)(包括其时区)映射到 Java Calendar

【问题讨论】:

    标签: java datetime calendar jax-ws


    【解决方案1】:

    是的,可以。

    合同优先方法
    您需要使用 jaxb:javaType 元素。有一些一般信息here 和您需要做什么的示例here

    合同最后的方法

    @WebMethod(operationName = "getTest")
    public Calendar getTest(@WebParam(name = "input") Calendar input) {
      input.roll(Calendar.DAY_OF_YEAR, 1);
      return input
    }
    

    将映射到:

    <xs:complexType name="getTest">
      <xs:sequence>
        <xs:element name="input" type="xs:dateTime" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="getTestResponse">
      <xs:sequence>
        <xs:element name="return" type="xs:dateTime" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
    

    【讨论】:

    • 如果我使用 static.springsource.org/spring-ws/sites/1.5/reference/html/… 中描述的“最后契约”方法(从 Java 源代码生成 WSDL 和模式)而不是您的示例假设的“契约优先”方法,我该怎么办?
    • @Derek - 我已经更新了我的答案,但我之前没有尝试过合同最后一种方法。
    • 我尝试了你的建议,但没有 @WebParam 并且它有效。
    【解决方案2】:

    我认为默认情况下它会起作用; JAXB(JAX-WS 实现使用的数据绑定器)应该知道如何在 XML 值和 java.util.Calendar 之间进行转换。

    如果不是,则与 XML 一起使用的默认日期/时间数据类型是 javax.xml.datatype.XMLGregorianCalendar,可以使用 toGregorianCalendar() 方法进行转换(它将是 java.util.GregorianCalendar 类型,一个 java.util。日历子类)。因此,一种可能性是将数据绑定到 XMLGregorianCalendar,然后在访问时来回转换。这也可以通过使用 XMLJavaTypeAdapter 实现自动化。

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2011-01-05
      • 2016-05-10
      相关资源
      最近更新 更多