解组非根元素时的 JAXB 模式验证
Posted
技术标签:
【中文标题】解组非根元素时的 JAXB 模式验证【英文标题】:JAXB Schema validation when unmarshalling non-root element 【发布时间】:2018-01-25 18:32:26 【问题描述】:当您使用 JAXB 解组整个 XML 时,您可以设置 XML 模式以在解析期间启用验证:
//javax.xml.validation.Schema schema = ...
jaxbUnmarshaller = JAXBContext.newInstance(SomeRootType.class).createUnmarshaller();
jaxbUnmarshaller.setSchema(schema);
另一方面,当您从 XML 中解组 NestedObjest
s 列表时,一个一个(例如,为了减少内存使用)此方法会失败(因为 Schema 只接受 root)并出现异常:
org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 22; cvc-elt.1: Cannot find the declaration of element 'NestedObject'
即使NestedObjectType
在 XSD 中定义明确,它也会失败。有没有启用嵌套对象验证的选项?请注意,定义新架构是一个糟糕的选择,因为 XSD 对于我的应用程序是外部的,由其他人维护。
【问题讨论】:
您能否提供一些示例输入,出现此错误的位置? 【参考方案1】:您是否尝试将绑定 bean 的类传递给 unmarshal
方法?就像Example 65. Unmarshalling into a known type中解释的那样
【讨论】:
可以修改源xml吗? eg: 添加 xsi:type 属性 我无法修改 xml/schema。在您链接的示例中,未启用验证。 你的 xml 格式是什么?萨克斯,dom,流?我设法在架构中没有元素声明的情况下取消编组的唯一方法是在 xml 中使用 xsi:type。以上是关于解组非根元素时的 JAXB 模式验证的主要内容,如果未能解决你的问题,请参考以下文章