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

标签 java xml jaxb xsd unmarshalling

我正在使用 XMLJAXB,因为我正在将 XML 解码和编码为 Java 对象,反之亦然。现在我正在尝试根据我们的架构 (test.xsd) 验证我们的 XML。假设如果我的 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:\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"));

最佳答案

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

了解更多信息

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

关于java - 如何使用 JAXB 根​​据模式验证 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760796/

相关文章:

Java选择txt文件并在函数中使用上述字符串

java - 删除 jaxb 编码中的空 XML 标记

java - 如何使用java代码生成xsd文件?

java - 开发网络服务

java - 如何在maven应用程序中使用eclipse swing设计器?

java - Gradle没有下载Jax RS库

.net - 显示二元决策树的工具

xml - 在 Swift 4 中解析 XML

java - 从 XML 字符串获取值

java - @GenerateValue 注解,构造函数值