0

我已经使用 .xsd 从 xsd 自动生成了 java 类xsd2java。我既不能修改 xsd 也不能修改 java 类。

问题:在一个类List<JAXBElement>中生成了一个元素。如果我现在添加 any JAXBElementjacksonxml 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>

问题:我怎样才能知道jacksonspring-mvc生成正确的 xml,而不是JAXBElement显式的序列化?

4

1 回答 1

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>
于 2017-11-27T16:15:52.437 回答