我使用 xsd2java
从 xsd 自动生成了 java 类。我无法修改 xsd 和 java 类。
问题:在一个类中 List<JAXBElement>
的元素被生成。
如果我现在添加任何 JAXBElement
,jackson
xml 编码器不会显示正确的 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
显式序列化?
最佳答案
我不知道您当前使用哪个 xsd2java 实用程序,但您可以尝试以下 Maven 插件从 XSD 文件生成 Java 类。
https://github.com/highsource/jaxb2-basics/wiki/Using-JAXB2-Basics-Plugins
然后您可以使用以下扩展来创建类型正确的 POJO。
https://github.com/highsource/jaxb2-basics/wiki/JAXB2-Simplify-Plugin
但是,即使您可以创建类型化 POJO 属性,从此 POJO 生成的 XML 文件对于原始 XSD 文件也可能不是 100% 有效。
<小时/><jaxb:bindings multiple="true" node="//xs:element[@name='someElement']//xs:complexType//xs:choice//xs:element">
<simplify:as-element-property/>
</jaxb:bindings>
关于java - 如何在jackson xml序列化中使用JAXBElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47514718/