2009-04-30 65 views
19

显然在JAXB的第2版中 - 验证器类已被弃用 - 这是否意味着编组器会自动验证您的XML?如果是这样,它似乎并没有抱怨我正在形成的一些不正确的XML!任何人都可以给我一些建议,关于如何验证编组XML以确保其符合XSD架构。是否可以使用JAXB 2.0验证编组的XML?

非常感谢。

回答

27

JAXB 2.0通过使用JAXP 1.3模式验证框架扩展了验证功能。

当你做之前:

unmarshaller.setValidating(true); 

现在你需要做的:

SchemaFactory sf = SchemaFactory.newInstance(
    javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI); 
Schema schema = sf.newSchema(new File("myschema.xsd")); 
unmarshaller.setSchema(schema); 

如果传递null到setSchema,它禁用验证。

请检查this reference

+1

你把一个MARSHALLER相同的代码 - 这个代码看起来像是一个UNMARSHALLER ... – Vidar 2009-04-30 10:01:32

2

如果你正在寻找验证Java对象生成根据模式是有效的XML,看看JAXB的验证项目:

https://jaxb-verification.dev.java.net/

这是一个JAXB RI插件XJC将产生XML模式的ObjectVerifier实现。这避免了为了验证XML而必须编组Java对象。