簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM