JAXB/XSD统一了相同的类

JAXB/XSD统一了相同的类,xsd,jaxb,Xsd,Jaxb,我有一个XSD,它定义了各种复杂类型,其中包含另一个复杂类型。问题是内部复杂类型完全相同,但它们没有定义为分离类型,因此我为每个顶级类都有一个内部类。XSD如下所示: <xs:complexType name="DOCTRACKTCSCREATEType"> <xs:sequence> <xs:element name="DESCRIPTION" type="xs:string" minOccurs="0"/> <

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

看来JAXB让这变得很困难,可能是因为它认为这两种匿名复杂类型不同,并且不想让您将它们映射到同一个类,即使使用自定义绑定也是如此

也许你想试试让他们都实现一个公共接口?最后我检查了一下,这只能通过各种扩展和插件实现(但其中一些是在RI本身中,所以可用性不应该是一个问题)。这里有一个例子,你可能会发现最近的一些

如果您确实尝试继续进行自定义绑定,不知何故,还有一个相关的想法。。您可能会找到设置
用于生成顶级类而不是内部类。这为碰撞打开了一些其他的可能性,所以可能不是..但仅供参考


希望对你有帮助。。我很想听到更好的答案。

看来JAXB让这变得很困难,大概是因为它认为这两种匿名复杂类型不同,而且真的不想让您将它们映射到同一个类,即使使用自定义绑定也是如此

也许你想试试让他们都实现一个公共接口?最后我检查了一下,这只能通过各种扩展和插件实现(但其中一些是在RI本身中,所以可用性不应该是一个问题)。这里有一个例子,你可能会发现最近的一些

如果您确实尝试继续进行自定义绑定,不知何故,还有一个相关的想法。。您可能会找到设置
用于生成顶级类而不是内部类。这为碰撞打开了一些其他的可能性,所以可能不是..但仅供参考

希望对你有帮助。。我很想听到更好的答案