Как использовать JAXBElement в сериализации jackson xml?

Я автоматически сгенерировал Java-классы из XSD, используя xsd2java, Я не могу изменить ни xsd, ни java-классы.

Проблема: в одном классе элемент List<JAXBElement> генерируется. Если я сейчас добавлю JAXBElement, jackson xml marshaller не покажет правильный элемент xml, но свойства JAXBElement сериализованная. подобно declaredType, scopeи т. д. См. ниже.

@XmlRootElement(name = "bookingRequest")
public class AutogeneratedReq {
    private List<JAXBElement<?>> someElements;
}

Использование:

AutogeneratedReq req = new AutogeneratedReq();
JAXBElement<?> person = new ObjectFactory().createPerson();
req.getSomeElements().add(person);

Результат:

<someElements>
    <JAXBElement>
        <name>person</name>
        <declaredType>net.some.company.Person</declaredType>
        <scope>net.some.company</scope><value someattribues="test"/>
        <nil>false</nil>
        <globalScope>false</globalScope>
        <typeSubstituted>false</typeSubstituted>
    </JAXBElement>
</someElements>

Вопрос: как я могу сказать jackson или же spring-mvc генерировать правильный XML, а не JAXBElement явная сериализация?

1 ответ

Решение

Я не знаю, какую утилиту xsd2java вы используете в настоящее время, но вы можете попробовать следующий плагин maven для генерации классов Java из файлов XSD.

https://github.com/highsource/jaxb2-basics/wiki/Using-JAXB2-Basics-Plugins

И тогда вы можете использовать следующее расширение для создания правильно набранных POJO.

https://github.com/highsource/jaxb2-basics/wiki/JAXB2-Simplify-Plugin

НО, даже если вы можете создавать типизированные атрибуты POJO, XML-файл, сгенерированный из этого POJO, может быть не на 100% действительным по сравнению с исходным XSD-файлом.


<jaxb:bindings multiple="true" node="//xs:element[@name='someElement']//xs:complexType//xs:choice//xs:element">
    <simplify:as-element-property/>
</jaxb:bindings>
Другие вопросы по тегам