JAXB 不报告非法元素重复

JAXB doesn't report about illegal element duplicate

提问人:const.grigoryev 提问时间:10/6/2022 最后编辑:const.grigoryev 更新时间:10/6/2022 访问量:61

问:

假设我有一个带注释的 Java 类:

@XmlRootElement
class Person {
    public String name;
    public int age;
}

应从 XML 文档创建该类的实例。但有时 XML 记录与我的 POJO 不太匹配。例如,它可能有多个标签:<name>

<person>
  <name>Dr. Jekyll</name>
  <name>Mr. Hyde</name>
  <age>35</age>
</person>

在这种情况下,我希望收到来自 unmarshaller 的错误消息。但它实际上只是悄悄地重新初始化了两次属性。有没有办法让 JAXB 通知我这些错误?(类似的东西将是一个完美的解决方案。从属性设置器中抛出异常对我来说看起来太过平板)VerificationErrorHandler

更新。我的 JAXB 设置不出人意料:

var jaxb = JAXBContext.newInstance(Person.class);
var jaxbDecoder = jaxb.createUnmarshaller();
var errorLog = new ArrayList<ValidationEvent>();
jaxbDecoder.setEventHandler(e -> errorLog.add(e));
// Now unmarshal:
var p = (Person) jaxbDecoder.unmarshal(xml);

之后,尽管我的XML文档显然不正确,但它是空的。errorLog

Java XML XML 解析 JAXB

评论

0赞 xerx593 10/6/2022
分享您的“解组细节”......javaee.github.io/jaxb-v2/doc/user-guide/......
0赞 xerx593 10/6/2022
..那么我们也可以“尝试安装在 Unmarshaller 上”..并检查 JAXBContext;ValidationEventHandler
1赞 const.grigoryev 10/6/2022
@xerx593我做到了,但这没有帮助(见更新后)。而且我没有完整的文档 XSD 架构来验证,因此用户指南中的下一个提示(“确保您的实例文档有效”)与我的情况无关。
0赞 LMC 10/6/2022
如果没有 XSD,只要 XML 格式正确,就不会出现这样的“错误”,因此 JAXB 无法将多个元素视为错误。

答: 暂无答案