有没有办法在XmlAdapter中抛出用户定义的异常并在JAXB marshalles / unmarshalls时捕获它们?我的意思是,我可以抛出自己的异常,但是JAXB只是忽略了这个异常并抛出了我自己的异常消息或异常对象。
try {
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
jaxbUnmarshaller.unmarshal(inputStream);
}
catch (UserDefinedException e) {
// Do something.
}
很抱歉没有发布JAXB抛出的正确异常,而不是我的。此刻,我无法获得代码。 Currentlly我正在使用JAXB-RI,但我使用了EclipseLink MoXY并遇到了这个问题。
当我能够获得代码时,我将发布其他数据。但在那之前,也许有人知道我在说什么。正确使用XmlAdapter的一些代码示例也很棒。
感谢。
答案 0 :(得分:1)
JAXB (JSR-222)实现的期望是它会抛出JAXBException
。这意味着在XmlAdapter
之类的内容中抛出的任何异常最终都会被包裹起来。您可以使用有状态XmlAdapter
来处理此用例:
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
MyXmlAdpater myXmlAdapter = new MyXmlAdapter();
jaxbUnmarshaller.setAdatper(myXmlAdapter);
jaxbUnmarshaller.unmarshal(inputStream);
if(myXmlAdapter.hasException() {
// Do something.
}
有关使用有状态XmlAdapter
的示例,请参阅: