![](/img/trans.png)
[英]JAXB XMLAdapter: Is there a way to convert this method into JAXB XmlAdapter
[英]JAXB XMLAdapter method does not throws Exception
我正在使用JAXB XMLadapter來編組和解組布爾值。 應用程序的XML文件也將由C#應用程序訪問。 我們必須驗證此XML文件,這是使用XSD完成的。 C#應用程序為布爾節點寫入“True”值。 但是我們的XSD也證實了這一點,因為它只允許“真/假”或“1/0”。 因此,我們在XSD中保留了String的布爾值,XMLAdapter將驗證該字符串,以便我們編組和解組。 XML Adapter如下:
public class BooleanAdapter extends XmlAdapter<String, Boolean> {
@Override
public Boolean unmarshal(String v) throws Exception {
if(v.equalsIgnoreCase("true") || v.equals("1")) {
return true;
} else if(v.equalsIgnoreCase("false") || v.equals("0")) {
return false;
} else {
throw new Exception("Boolean Value from XML File is Wrong.");
}
}
@Override
public String marshal(Boolean v) throws Exception {
return v.toString();
}
}
上面的代碼在正常情況下工作,但是當從xml文件中讀取無效數據(例如:“abcd”或“”)時,則拋出“new new Exception();” 沒有傳播,Unmarshal進程繼續讀取下一個節點。 我希望應用程序在拋出異常后立即停止。 看來我的異常被吃光了。 任何幫助深表感謝。
如何解決這個問題?
來自XMLAdapter#unmarshal(ValueType)
的JavaDoc:
拋出:
java.lang.Exception
- 如果在轉換過程中出現錯誤。 調用者負責通過ValidationEventHandler向用戶報告錯誤 。
所以,是的 - 吃了異常然后使用ValidationEventHandler
報告,而不是拋到堆棧的頂部。
檢查您是否已經使用任何(自定義的) ValidationEventHandler
對您的異常進行分組,或者使用DefaultValidationEventHandler
,如下所示:
unmarshaller.setEventHandler(new DefaultValidationEventHandler());
它會在第一次錯誤時導致解組失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.