如何忽略JAXB中的意外元素情况?

时间:2008-12-12 11:33:56

标签: xml jaxb

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

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

注意我仍然希望得到xml解析的obj结果。

3 个答案:

答案 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