1

我正在使用带有 JAX-WS RI 2.2.3 的axis2-1.6.2。

我正在使用 WSDL 生成骨架、存根和模型类。以下是 WSDL 的代码片段。

<xs:complexType name="dailyBooking">
<xs:sequence>
<xs:element minOccurs="0" name="day" qualified="true" type="xs:date" />
<xs:element minOccurs="0" name="noOfBookings" type="xs:int" />
</xs:sequence>
</xs:complexType>

它生成以下类

public class DailyBooking {

    protected Integer noOfBookings;
    @XmlSchemaType(name = "date")
    protected XMLGregorianCalendar day;

我想生成 java.util.Date 而不是 XMLGregorianCalendar。怎么可能。

4

1 回答 1

1

实现此目的的快速而肮脏的方法是在您的 xsd 中指定一个注释,该注释将指示 JAXB 要转换哪些类型以及如何转换它们。尝试这个:

  1. 将 JAXB 命名空间添加到 xsd 文件(或者如果您的类型定义嵌入到 wsdl 中,则添加 wsdl 本身部分)

    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    jaxb:version="2.0"
    
  2. 添加以下注释元素作为元素的子<schema/>元素或在 xsd 文件中

       <xs:annotation>
          <xs:appinfo>
              <jaxb:globalBindings mapSimpleTypeDef="false" choiceContentProperty="true">
                 <jaxb:javaType name="java.util.Date" xmlType="xs:date"
                       parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
                       printMethod="javax.xml.bind.DatatypeConverter.printDate"/>
                  </jaxb:globalBindings>
          </xs:appinfo>
       </xs:annotation>
    

几点注意事项:

  1. javaType元素指定您希望转换为的 java 数据类型和

  2. xmlType指定它在您的架构定义中的相应出现。

  3. 使用globalBindings意味着该 xml 类型的所有出现都将受制于您指定的自定义

于 2013-04-11T05:08:01.310 回答