如何使用 JAXB 根据模式验证 XML?

2022-09-03 01:06:18

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

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 schema path 是 -

C:\workspace\one\two\three\src\main\java\com\package\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

您只需要在执行 unmarshal 之前设置 javax.xml.validation.Schema 的实例。您可以指定 上的实现,以捕获在取消封送过程中发生的任何问题。UnmarshallerValidationEventHandlerUnmarshaller

详细信息

我已经在我的博客上写了更多关于这个用例的文章:


答案 2

推荐