2013-04-04 94 views
1

我使用axis2-1.6.2和JAX-WS RI 2.2.3。Axis2 JAXWS服務xs:date XMLGregorianCalendar

我正在使用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。 這怎麼可能。

回答

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類型的所有出現將受到您所指定

定製