2012-03-22 56 views
3

我有一个系统使用@ResponseBody和@XmlElement编组(JAXB)返回了很多XML。如何使用XML模式来验证由JAXB编组的@ResponseBody

使用创建的Schema验证生成的XML的最佳方法是什么?

我仍然需要遍历元素并测试它们,但是使用XML Schema验证会使第二部分非常容易。对于JAXB编组与解组

+0

您是否找到解决方案? – 2015-06-05 08:53:03

+0

不幸的是没有。 – mamruoc 2015-06-06 21:40:49

回答

1

设置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字符串,来解组是:

Reader reader = new StringReader(xml); 
StreamSource source = new StreamSource(reader); 
unmarshaller.unmarshal(source, YourJAXBClass.class); 
通过编组到SAX”的DefaultHandler

验证JAXB对象,不做任何事:

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

呃,我该如何将此连接到Spring以及'@ ResponseBody'中的结果? – mamruoc 2012-03-22 21:47:45

2

春天让你很容易(假设你使用Jaxb2Marshalle r):

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

我对Spring很新,但是如何指定哪个xsd到哪个'@ ResponseBody'这是我需要测试的(控制器返回一个基于组合模型的编组XML) – mamruoc 2012-03-22 21:49:09

+0

Oki,我已经添加了'',而不是增加'classesToBeBound',我用http://www.walgemoed.org/2010/12/jaxb2-spring-ws/。然而,一切运行良好,从某种意义上说,即使无效的xsd也不会给出任何错误消息 – mamruoc 2012-03-23 08:38:21

+0

查看http://www.ibm.com/developerworks/web/library/wa-restful/(清单4)建立一个http编组转换器并给它上面的编组器。 – 2012-03-23 11:12:41