gpt4 book ai didi

java - JAXB XMLAdapter 方法不会抛出异常

转载 作者:太空狗 更新时间:2023-10-29 22:44:35 31 4
gpt4 key购买 nike

我正在使用 JAXB XMLadapter 来编码和解码 boolean 值。应用程序的 XML 文件也将由 C# 应用程序访问。我们必须验证此 XML 文件,这是使用 XSD 完成的。 C# 应用程序为 boolean 节点写入“True”值。但是我们的 XSD 确实验证了这一点,因为它只允许“真/假”或“1/0”。所以我们在 XSD 中保留了 boolean 值的字符串,并且该字符串将由 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 进程继续读取下一个节点。我希望应用程序在抛出异常时立即停止。看来我的异常(exception)正在被吃掉。非常感谢任何帮助。

如何解决这个问题?

最佳答案

来自 XMLAdapter#unmarshal(ValueType) 的 JavaDoc :

Throws: java.lang.Exception - if there's an error during the conversion. The caller is responsible for reporting the error to the user through ValidationEventHandler.

所以,是的 - 异常是被吃掉,然后使用 ValidationEventHandler 报告,不会被扔到堆栈的顶部。

检查您是否已经在使用任何(自定义的,也许)ValidationEventHandler 来对您的异常进行分组,或者使用 DefaultValidationEventHandler ,像这样:

unmarshaller.setEventHandler(new DefaultValidationEventHandler());

它会在第一次错误时导致解码失败。

关于java - JAXB XMLAdapter 方法不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114428/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com