2017-11-27 7 views
0

Ich habe automatisch generierte Java-Klassen von xsd mit xsd2java. Ich kann weder xsd noch die Java-Klassen ändern.Wie JAXBElement in Jackson XML-Serialisierung zu verwenden?

Problem: in einer Klasse wird ein Element List<JAXBElement> generiert. Wenn ich jetzt eine hinzufügen, zeigt die jackson XML-Marshaller nicht das richtige XML-Element, sondern die Eigenschaften der JAXBElement serialisiert. Wie declaredType, scope, usw. Siehe unten.

@XmlRootElement(name = "bookingRequest") 
public class AutogeneratedReq { 
    private List<JAXBElement<?>> someElements; 
} 

Verbrauch:

AutogeneratedReq req = new AutogeneratedReq(); 
JAXBElement<?> person = new ObjectFactory().createPerson(); 
req.getSomeElements().add(person); 

Ergebnis:

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

Frage: Wie kann ich feststellen, jackson oder spring-mvc richtige XML zu generieren, und nicht JAXBElement Serialisierung explizit?

Antwort

1

Ich weiß nicht, welches xsd2java-Dienstprogramm Sie derzeit verwenden, aber Sie können das folgende maven-Plugin versuchen, Java-Klassen aus XSD-Dateien zu generieren.

https://github.com/highsource/jaxb2-basics/wiki/Using-JAXB2-Basics-Plugins

Und dann können Sie folgende Erweiterung verwenden richtig eingegeben POJO erstellen zu können.

https://github.com/highsource/jaxb2-basics/wiki/JAXB2-Simplify-Plugin

Aber auch wenn Sie getippt erstellen POJO Attribute, die XML-Datei aus diesem POJO erzeugt wird, kann nicht zu 100% gültig gegen Original-XSD-Datei sein.


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