如何忽略 JAXB ans 中的意外元素情况仍然会得到所有其他类型的 javax.xml.bind.UnmarshalException?
obj = unmler.unmarshal(new StringReader(xml))
请注意,我仍然想获得 xml 解析的 obj 结果。
解决方案。
在像这样实现 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));
此外,JAXB 2.0 会自动忽略无法识别的元素并继续解组过程。请参阅https://jaxb.java.net/nonav/jaxb20-fcs/docs/api/javax/xml/bind/Unmarshaller.html并跳转到“验证和格式良好”。
使用JAXB.unmarshal()
默认忽略意外元素。小心,因为它也会跳过模式验证。
JavaDoc: https ://docs.oracle.com/javase/8/docs/api/javax/xml/bind/JAXB.html