我正在使用 JAXB XMLadapter 编组和解组布尔值。C# 应用程序也将访问应用程序的 XML 文件。我们必须验证这个 XML 文件,这是使用 XSD 完成的。C# 应用程序为布尔节点写入“True”值。但是我们的 XSD 也验证了这一点,因为它只允许“真/假”或“1/0”。因此,我们在 XSD 中为布尔值保留了 String,并且该字符串将由 XMLAdapter 验证以在我们这边编组和解组。XML 适配器如下:
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”或“”)时,“throw new Exception();” 没有得到传播,Unmarshal 进程继续读取下一个节点。我希望应用程序在抛出异常后立即停止。看来我的例外被吃掉了。任何帮助深表感谢。
如何解决这个问题?