2012-04-25 90 views
3

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

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

对不起,没有发布JAXB抛出正确的异常,而不是我的。此时,我无法进入代码。目前我使用的是JAXB-RI,但是我使用了EclipseLink MoXY并遇到了这个问题。

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

谢谢。

回答

1

JAXB (JSR-222)执行的期望是它抛出一个​​。这意味着像XmlAdapter之类的任何异常将最终被封装。你可能使用状态XmlAdapter来处理这个用例:

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

对于使用状态XmlAdapter看到的例子:

+1

好布莱斯,这个工程就像一个魅力。谢谢。我恢复了EclipseLink MOXy。我在使用XmlAdapters和JAXB-RI Ant schemagen任务时遇到了问题,但是使用了MOXy代schmea作品。对于阅读此评论的任何人,我强烈建议您使用EclipseLink MOXY来满足您的JAXB需求。它会为你节省大量的时间和精力。 – 2012-04-26 09:50:53