Почему JAXB отображает Java-объект на сложный тип вместо элемента? - PullRequest
2 голосов
/ 22 июля 2011

У меня есть 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 name?

XSD является сторонним, поэтому его нельзя изменить.

Спасибо!

Udo.

1 Ответ

5 голосов
/ 22 июля 2011

Вы можете использовать файл внешних привязок для управления именами сгенерированных классов.Пример см. В моем ответе на аналогичный вопрос:

Причина, по которой 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>
...