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));
また、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