我正在使用JAXB XMLadapter編組和解組布爾值。應用程序的XML文件也將由C#應用程序訪問。我們必須驗證這個XML文件,並且這是使用XSD完成的。 C#應用程序爲布爾節點寫入「True」值。但是我們的XSD也會得到驗證,因爲它只允許「真/假」或「1/0」。所以我們在XSD中爲布爾值保留了字符串,並且該字符串將由XMLAdapter進行驗證以對我們進行編組和解組。 XML適配器如下: JAXB XMLAdapter方法不會拋出異常
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();
}
}
上述代碼工作在正常條件下,但是,當無效的數據(例如:「ABCD」或「」)是從XML文件中讀取那麼「拋出新的異常(); 「沒有得到傳播,Unmarshal進程繼續讀取下一個節點。 我希望應用程序在引發異常時立即停止。 這似乎是我的例外被吃掉了。 任何幫助,非常感謝。
如何解決此問題?
謝謝@npe: 這工作..! :) 對ValidationEventHandler()不太瞭解,但是您指向JavaDoc的指針幫了很大忙。 只需設置 unmarshaller.setEventHandler(new DefaultValidationEventHandler()); 做了工作.. 標記您的解決方案作爲答案.. 乾杯..! –