繁体   English   中英

如何在杰克逊xml序列化中使用JAXBElement?

[英]How to use JAXBElement in jackson xml serialization?

我已经使用xsd2java从xsd自动生成了Java类。 我无法修改xsd或Java类。

问题:在一个类中,生成List<JAXBElement>的元素。 如果现在添加任何JAXBElement ,则jackson xml编组器将不会显示适当的xml元素,但是会序列化JAXBElement的属性。 类似于declaredTypescope等。请参见下文。

@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>

问题:如何告诉jacksonspring-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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM