XmlJavaTypeAdapter抛出用户定义的异常

时间:2012-04-25 13:02:39

标签: jaxb

有没有办法在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的一些代码示例也很棒。

感谢。

1 个答案:

答案 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的示例,请参阅: