【问题标题】:How to use JAXBElement in jackson xml serialization?如何在jackson xml序列化中使用JAXBElement?
【发布时间】:2017-11-27 15:42:43
【问题描述】:

我使用xsd2java 从 xsd 自动生成了 java 类。我不能修改 xsd 和 java 类。

问题:在一个类中生成了List<JAXBElement> 的元素。 如果我现在添加任何JAXBElementjackson xml marshaller 将不会显示正确的 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 显式序列化?

【问题讨论】:

    标签: java spring spring-mvc jackson jaxbelement


    【解决方案1】:

    我不知道您当前使用的是哪个 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 文件也可能不是 100% 对原始 XSD 文件有效。


    <jaxb:bindings multiple="true" node="//xs:element[@name='someElement']//xs:complexType//xs:choice//xs:element">
        <simplify:as-element-property/>
    </jaxb:bindings>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-15
      • 2018-07-18
      • 2013-06-17
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 2017-01-11
      • 2018-01-27
      相关资源
      最近更新 更多