如何使用JAXB针对模式验证XML?

时间:2014-07-15 14:25:31

标签: java xml jaxb xsd unmarshalling

我正在使用XMLJAXB,因为我正在解组并将XML编组为Java对象,反之亦然。现在我试图根据我们的模式验证我们的XML(test.xsd)。假设我的XML中缺少任何必需字段,那么我想知道在针对模式test.xsd验证XML之后缺少哪个字段。

public void unmarshal(final InputStream is) {
    final XMLInputFactory factory = XMLInputFactory.newInstance();
    final XMLStreamReader reader = factory.createXMLStreamReader(is);

    Object req = unmarshaller.unmarshal(reader);

    // how would I validate here?
}

如何针对test.xsd架构验证我的XML。我的test.xsd架构路径是 -

  

C:\工作空间\一个\ 2周\ 3 \ SRC \主\的java \ COM \包\ SERV \ AP \ VersionOne的\ test.xsd

更新:将test.xsd加载为:

Schema schema = factorySchema.newSchema(new File("C:\\workspace\\one\\two\\three\\src\\main\\java\\com\\package\\serv\\ap\\versionOne\\test.xsd"));

1 个答案:

答案 0 :(得分:20)

您需要在执行unmarshal之前在Unmarshaller上设置javax.xml.validation.Schema的实例。您可以在ValidationEventHandler上指定Unmarshaller的实现,以捕获在解组过程中发生的任何问题。

了解更多信息

我在博客上写了更多关于此用例的内容: