2009-04-30 66 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對象。