2017-11-27 10 views
0

xsd2javaを使ってxsdからJavaクラスを自動生成しました。私はxsdもjavaクラスも変更できません。JAXBElementをjackson xml serializationで使用する方法は?

問題:あるクラスでは、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> 

質問:どのように私は適切なXMLを生成するjacksonまたはspring-mvcを教え、そしてないJAXBElementシリアライズ明示することができますか?

答えて

1

現在使用しているxsd2javaユーティリティはわかりませんが、XSDファイルからJavaクラスを生成するために次のmavenプラグインを試すことができます。

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> 
関連する問題