JAXB / XSD统一了相同的类

时间:2016-07-07 17:36:45

标签: xsd jaxb

我有一个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类?

1 个答案:

答案 0 :(得分:0)

似乎JAXB使这很困难,大概是因为它认为两个匿名复杂类型不同,并且实际上不希望让它们将它们映射到同一个类,即使使用自定义绑定。

也许你想尝试让它们都实现一个通用接口?最后我检查过,这只能通过各种扩展和插件实现(但其中一些是在RI本身,所以可用性不应该是一个问题)。例如,这是一个older post,你可能会发现更新的。{/ p>

如果您尝试继续进行自定义绑定,不知何故,另一个相关的想法..您可能会找到该设置 <jxb:globalBindings localScoping="toplevel"/>对于生成顶级而非内部类很有用。这为碰撞开辟了一些其他可能性,所以可能不会......但是我们。

希望有帮助...有兴趣听到更好的答案。