2016-07-07 34 views
1

我有一個XSD定義了各種複雜類型,其中包含另一種複雜類型。問題是內部複雜類型完全相同,但它們沒有定義爲分離類型,因此我爲每個頂級類都有一個內部類。 XSD如下:JAXB/XSD統一相同的類

<xs:complexType name="DOCTRACKTCSCREATEType"> 
    <xs:sequence> 
     <xs:element name="DESCRIPTION" type="xs:string" minOccurs="0"/> 
     <xs:element name="gATTRIBNAME" minOccurs="0"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="mATTRIBNAME" minOccurs="0" maxOccurs="unbounded"> 
         <xs:complexType> 
          <xs:sequence> 
           <xs:element name="ATTRIBNAME" type="xs:string" minOccurs="0"/> 
           <xs:element name="ATTRIBVALUE" type="xs:string" minOccurs="0"/> 
          </xs:sequence> 
          <xs:attribute name="m" type="xs:positiveInteger"/> 
         </xs:complexType> 
        </xs:element> 
       </xs:sequence> 
       <xs:attribute name="g" type="xs:positiveInteger"/> 
      </xs:complexType> 
     </xs:element> 
    <xs:attribute name="id" type="xs:string"/> 
</xs:complexType> 

<xs:complexType name="DOCTRACKType"> 
    <xs:sequence> 
     <xs:element name="REFERENCE" type="xs:string" minOccurs="0"/> 
     <xs:element name="gATTRIBNAME" minOccurs="0"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="mATTRIBNAME" minOccurs="0" maxOccurs="unbounded"> 
         <xs:complexType> 
          <xs:sequence> 
           <xs:element name="ATTRIBNAME" type="xs:string" minOccurs="0"/> 
           <xs:element name="ATTRIBVALUE" type="xs:string" minOccurs="0"/> 
          </xs:sequence> 
          <xs:attribute name="m" type="xs:positiveInteger"/> 
         </xs:complexType> 
        </xs:element> 
       </xs:sequence> 
       <xs:attribute name="g" type="xs:positiveInteger"/> 
      </xs:complexType> 
     </xs:element> 
    <xs:attribute name="id" type="xs:string"/> 
</xs:complexType> 

因此,兩者都定義了一個相同類型的gATTRIBNAME。我無法更改XSD,但有沒有其他方法可以讓他們創建相同的Java類?

回答

0

看來,JAXB使得這個困難的,大概是因爲它認爲這兩個匿名複雜類型不同,真的不想讓你把它們映射到同一個班級,甚至定製的綁定。

也許你會想嘗試就像他們都實現一個共同的接口的東西嗎?最後我檢查了一下,這隻能通過各種擴展和插件來實現(但其中一些在RI本身,因此可用性不應該成爲問題)。例如,這裏有一個older post,你可能會發現更近的。

如果你確實嘗試着進行自定義綁定,不知何故,還有一個相關的想法..你可能會發現設置 <jxb:globalBindings localScoping="toplevel"/>對於生成頂級而非內部類很有用。這爲碰撞開闢了一些其他的可能性,所以可能不是......但僅供參考。

希望幫助..會有興趣聽到更好的答案。