2012-03-22 15 views
3

@ResponseBodyおよび@XmlElementマーシャリング(JAXB)を使用して多数のXMLを返すシステムがあります。XMLスキーマを使用してJAXBによってマーシャリングされた@ResponseBodyを検証する方法

作成されたスキーマを使用して結果のXMLを検証する最良の方法は何ですか?

まだ要素を実行してそれらをテストする必要がありますが、XMLスキーマの検証によって2番目の部分が本当に簡単になります。

+0

ソリューションを見つけましたか? –

+0

残念ながら、 – mamruoc

答えて

1

JAXBのマーシャラーとアンマーシャラーのセットアップXSDスキーマ:それを非整列化して

SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI); 
InputStream schemaStream = openMySchemaFileStream(); 
Schema schema = schemaFactory.newSchema(new StreamSource(schemaStream));  
marshaller.setSchema(schema); 
unmarshaller.setSchema(schema); 

検証XML文字列:何もしないSAX」たDefaultHandlerに整列化することにより

Reader reader = new StringReader(xml); 
StreamSource source = new StreamSource(reader); 
unmarshaller.unmarshal(source, YourJAXBClass.class); 

検証JAXBオブジェクト:

marshaller.marshal(obj, new DefaultHandler()); 
+0

ええと、これをSpringとどのように '@ ResponseBody'に結びつけるのですか? – mamruoc

2

Springはこれを簡単にします(Jaxb2Marshalle r):

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="schema" value="file:/some/path/schema.xsd"/> 
</bean> 
+0

私はSpringにはかなり新しくなっていますが、テストする必要がある '@ ResponseBody'をどのxsdに指定するのですか(コントローラーは複合モデルに基づいてマーシャリングされたXMLを返します) – mamruoc

+0

Oki、 = "marshaller" class = "test.project.util.ClasspathScanningJaxb2Marshaller"> '、' classesToBeBound'を追加する代わりに、私はhttp://www.walgemoed.org/2010/12/jaxb2-spring-ws/を使用しました。しかし、すべてがうまく動作します。その意味では無効なxsdはエラー・メッセージを表示しません。 – mamruoc

+0

http://www.ibm.com/developerworks/web/library/wa-restful/(リスト4)を参照してください。 httpマーシャリングコンバーターをセットアップし、それに上記のマーシャラーを与えます。 –

関連する問題