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

sse*_*ano 2 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>
Run Code Online (Sandbox Code Playgroud)

JAXB输出一个叫做的类,concreteComplexA我可以让它输出concreteA名称吗?

XSD是第三方所以它不能被修改.

谢谢!

你做.

bdo*_*han 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>
Run Code Online (Sandbox Code Playgroud)