2012-04-25 113 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