11

如何忽略 JAXB ans 中的意外元素情况仍然会得到所有其他类型的 javax.xml.bind.UnmarshalException?

obj = unmler.unmarshal(new StringReader(xml))

请注意,我仍然想获得 xml 解析的 obj 结果。

4

3 回答 3

13

解决方案。

在像这样实现 ValidationEventHandler 的 JAXB 中:

class CustomValidationEventHandler implements ValidationEventHandler{

    public boolean handleEvent(ValidationEvent evt) {
        System.out.println("Event Info: "+evt);
        if(evt.getMessage().contains("Unexpected element"))
            return true;
        return false;
    }

}

然后

Unmarshaller u = ...;

u.setEventHandler(new CustomValidationEventHandler());

u.unmarshal(new StringReader(xml));
于 2008-12-12T11:45:41.017 回答
4

此外,JAXB 2.0 会自动忽略无法识别的元素并继续解组过程。请参阅https://jaxb.java.net/nonav/jaxb20-fcs/docs/api/javax/xml/bind/Unmarshaller.html并跳转到“验证和格式良好”。

于 2013-06-28T16:44:12.100 回答
0

使用JAXB.unmarshal()默认忽略意外元素。小心,因为它也会跳过模式验证。

JavaDoc: https ://docs.oracle.com/javase/8/docs/api/javax/xml/bind/JAXB.html

于 2021-03-24T10:13:42.833 回答