【发布时间】:2008-12-12 11:33:55
【问题描述】:
如何忽略 JAXB 中的意外元素情况仍然会得到所有其他类型的 javax.xml.bind.UnmarshalException?
obj = unmler.unmarshal(new StringReader(xml))
注意我还是想得到xml解析的obj结果。
【问题讨论】:
如何忽略 JAXB 中的意外元素情况仍然会得到所有其他类型的 javax.xml.bind.UnmarshalException?
obj = unmler.unmarshal(new StringReader(xml))
注意我还是想得到xml解析的obj结果。
【问题讨论】:
解决办法。
在 JAXB 中像这样实现 ValidationEventHandler:
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));
【讨论】:
Locale.getDefaultLocale())!!例如,Locale.GERMAN 是“unerwartetes 元素”。
此外,JAXB 2.0 会自动忽略无法识别的元素并继续解组过程。请参阅https://jaxb.java.net/nonav/jaxb20-fcs/docs/api/javax/xml/bind/Unmarshaller.html 并跳转到“验证和格式良好”。
【讨论】:
使用JAXB.unmarshal(),默认情况下会忽略意外元素。请小心,因为它也会跳过架构验证。
Java 文档: https://docs.oracle.com/javase/8/docs/api/javax/xml/bind/JAXB.html
【讨论】: