如何忽略JAXB中的意外元素情况仍然得到所有其他类型的javax.xml.bind.UnmarshalException?
obj = unmler.unmarshal(new StringReader(xml))
注意我仍然希望得到xml解析的obj结果。
答案 0 :(得分:11)
解决方案。
在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));
答案 1 :(得分:4)
此外,JAXB 2.0会自动忽略无法识别的元素并继续解组过程。请参阅https://jaxb.java.net/nonav/jaxb20-fcs/docs/api/javax/xml/bind/Unmarshaller.html并跳转到“验证和良好形成”。
答案 2 :(得分:0)
使用 - alert: log_requests_missing
expr: sum(increase(log_request_duration_seconds_count[1m])) == 0 and [[alerts_enabled]]
for: 8m
labels:
severity: warning
annotations:
summary: 'test'
description: 'Test description'
,默认情况下会忽略意外元素。小心,因为它也会跳过架构验证。
JavaDoc: https://docs.oracle.com/javase/8/docs/api/javax/xml/bind/JAXB.html