我有一个XSD定义了各种复杂类型,其中包含另一种复杂类型。问题是内部复杂类型完全相同,但它们没有被定义为分隔类型,因此我为每个顶级类都有一个内部类。 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 :(得分:0)
似乎JAXB使这很困难,大概是因为它认为两个匿名复杂类型不同,并且实际上不希望让它们将它们映射到同一个类,即使使用自定义绑定。
也许你想尝试让它们都实现一个通用接口?最后我检查过,这只能通过各种扩展和插件实现(但其中一些是在RI本身,所以可用性不应该是一个问题)。例如,这是一个older post,你可能会发现更新的。{/ p>
如果您尝试继续进行自定义绑定,不知何故,另一个相关的想法..您可能会找到该设置
<jxb:globalBindings localScoping="toplevel"/>
对于生成顶级而非内部类很有用。这为碰撞开辟了一些其他可能性,所以可能不会......但是我们。
希望有帮助...有兴趣听到更好的答案。