2013-07-29 41 views
3

我想使用JAXB將xsd模式轉換爲java類。不幸的是我有一個問題。這casues問題的XSD是: 如何使用外部綁定在JAXB中覆蓋默認名稱?

<xs:complexType name="AdditionalDataType"> 
    <xs:sequence> 
    <xs:element name="AvailabilityStatus" minOccurs="0"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="AvailabilityStatus" maxOccurs="999"> 
      <xs:complexType> 
       <xs:attributeGroup ref="IdentifierGrp"/> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
</xs:complexType> 

我得到的錯誤是

[ERROR] \target\generated-sources\AdditionalDataType.java:[1012,22] AdditionalDataType.AvailabilityStatus is already defined in AdditionalDataType 

我發現這個How to override the default name for in JAXB using a external binding file? 但是當我試圖解決它與以下綁定:

<jxb:bindings node="//xs:complexType[@name='AdditionalDataType']//xs:sequence//xs:element[@name='AvailabilityStatus']//xs:complexType//xs:sequence//xs:element[@name='AvailabilityStatus']"> 
    <jxb:property name="AvailabilityStatusSA"/> 
</jxb:bindings> 

它並沒有幫助,它沒有改變任何東西。

有人可以幫忙嗎?

@Ekrem 我不能修改XML,我會這樣做,但我不能。我需要有附加數據類型,它有一個可用狀態列表 我不在乎如果內部AvailabilityStatus(我試圖映射到AvailabilityStatusSA)將是一個內部類或不是。

+0

爲什麼要使用相同的類名兩次?你能否提供你想用jaxb生成的僞java類層次結構? – Ekrem

+0

請看我上面的更新 – homar

回答

3

變化 <jxb:property name="AvailabilityStatusSA"/><jxb:class name="AvailabilityStatusSA"/>和你結合節點路徑應以複雜類型 - >結束<jxb:bindings node=...[@name='AvailabilityStatus']xs:complexType"

所以你的外部約束力的文件應該是這樣的:

<jxb:bindings node="//xs:complexType[@name='AdditionalDataType']//xs:sequence//xs:element[@name='AvailabilityStatus']//xs:complexType//xs:sequence//xs:element[@name='AvailabilityStatus']//xs:complexType"> 
    <jxb:class name="AvailabilityStatusSA"/> 
</jxb:bindings>