3

有没有办法在 XmlAdapter 中抛出用户定义的异常并在 JAXB 编组/解组时捕获它们?我的意思是,我可以抛出自己的异常,但 JAXB 只是忽略此异常并抛出他自己的异常,我无法从中获取异常消息或异常对象。

try {
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    jaxbUnmarshaller.unmarshal(inputStream);
}
catch (UserDefinedException e) {
    // Do something.
}

很抱歉没有发布 JAXB 抛出的正确异常而不是我的异常。此刻,我无法获取代码。目前我正在使用 JAXB-RI,但我使用了 EclipseLink MoXY 并遇到了这个问题。

当我能够拿到代码时,我会发布额外的数据。但在那之前,也许有人知道我在说什么。一些正确使用 XmlAdapter 的代码示例也很棒。

谢谢。

4

1 回答 1

1

JAXB (JSR-222)实现的期望是它抛出一个JAXBException. 这意味着在诸如 an 之类的东西中抛出的任何异常XmlAdapter最终都会被包裹起来。您可能会使用有状态XmlAdapter来处理此用例:

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
MyXmlAdpater myXmlAdapter = new MyXmlAdapter();
jaxbUnmarshaller.setAdatper(myXmlAdapter);
jaxbUnmarshaller.unmarshal(inputStream);
if(myXmlAdapter.hasException() {
    // Do something.
}

有关使用有状态的示例,XmlAdapter请参见:

于 2012-04-25T16:34:49.987 回答