【问题标题】:Can one validate marshalled XML with JAXB 2.0?可以使用 JAXB 2.0 验证编组的 XML 吗?
【发布时间】:2009-04-30 08:57:13
【问题描述】:

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

非常感谢。

【问题讨论】:

    标签: java validation jaxb


    【解决方案1】:

    通过使用 JAXP 1.3 Schema Validation Framework,验证功能在 JAXB 2.0 中得到了扩展。

    你之前在哪里:

    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

    【讨论】:

    • 你是否为 MARSHALLER 输入了相同的代码 - 这个代码看起来像是为 UNMARSHALLER 准备的......
    • 是的。您可以对 marshaller 和 unmarshaller 执行完全相同的操作。
    【解决方案2】:

    如果您希望验证 Java 对象是否根据模式生成有效的 XML,请查看 JAXB-Verification 项目:

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

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

    【讨论】:

    • JAXB 验证已过时,我不再开发它。顺便说一句,仅适用于 JAXB 1.x,不适用于 JAXB 2。
    猜你喜欢
    • 2014-10-27
    • 2011-01-29
    • 1970-01-01
    • 2014-02-27
    • 2012-01-11
    • 1970-01-01
    • 2011-05-23
    • 2011-05-22
    • 2011-06-19
    相关资源
    最近更新 更多