Как использовать 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>