Как отключить оптимизацию JAXB

#java #java-8 #jaxb

Вопрос:

Использование java 1.8 , maven-jaxb2-plugin:0.14.0 , и JAXB 2.3.0

когда я создаю классы java из XSD-файлов, а некоторые классы слишком просты, JAXB решает пропустить их. Вместо этого он помещает аннотацию @XmlElementWrapper.

Пример:

 <xs:complexType name="AAAA">
    <xs:sequence>
        <xs:element name="eeee" type="BBBB" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>
 

Превращается в

 @XmlElementWrapper(namespace = ...)
@XmlElement(namespace = ....)
protected List<BBBB> eeee;
 

в журналах я вижу:

 [INFO]  Replacing field [eeee AAAA]
 

В данном конкретном случае эта оптимизация мне не помогает, я бы предпочел видеть классы так, как я разработал XSD (например. АААА превратился в класс Java).

Есть ли способ заставить JAXB генерировать все классы и прекратить выполнение шага «Замена поля»?

Ответ №1:

Я не уверен, что правильно понял. Будет лучше, если вы опубликуете полную модель xsd и исходный сгенерированный класс java/ожидаемый класс.

Но, возможно, использование ссылки поможет вам

 <xs:complexType name="AAAA">
    <xs:sequence>
        <xsd:element ref="eeee" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="eeee">
    <xs:sequence>
        <xs:element name="eeee" type="BBBB" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>