为什么JAXB将java对象映射到复杂类型而不是元素?

时间:2011-07-22 11:15:10

标签: java jaxb jaxb2 maven-jaxb2-plugin

我有XSD :(片段)

    <xs:complexType name="complexA">
        <xs:sequence>
            <xs:element ref="abstractA" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="abstractA" abstract="true"/>

    <xs:element name="concreteA" type="concreteComplexA" substitutionGroup="abstractA"/>

    <xs:complexType name="concreteComplexA">
        <xs:attribute name="class" type="classId" use="required"/>
        <xs:attribute name="property" type="namingId" use="required"/>
        <xs:attribute name="value" type="xs:string" use="required"/>
    </xs:complexType>

JAXB输出一个名为concreteComplexA的类,我可以改为输出concreteA名吗?

XSD是第三方,因此无法修改。

谢谢!

1 个答案:

答案 0 :(得分:5)

您可以使用外部绑定文件来控制生成的类的名称。有关示例,请参阅我对类似问题的回答:

JAXB将Java对象映射到类型而不是元素的原因是对于全局复杂类型(如在您的示例中),可能有许多引用它的全局元素:

<xs:element name="concreteA" type="concreteComplexA" substitutionGroup="abstractA"/>
<xs:element name="anotherConcreteA" type="concreteComplexA" substitutionGroup="abstractA"/>

<xs:complexType name="concreteComplexA">
    <xs:attribute name="class" type="classId" use="required"/>
    <xs:attribute name="property" type="namingId" use="required"/>
    <xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>