加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 17:48:40 所属栏目:Java 来源:网络整理
导读:我正在使用JAXB XMLadapter来组织和解组布尔值.应用程序的XML文件也将被C#应用程序访问.我们必须验证这个XML文件,这是使用XSD完成的. C#应用程序为布尔节点写入“True”值.但是,我们的XSD的验证是相同的,因为它只允许“true / false”或“1/0”.所以我们在XS
我正在使用JAXB XMLadapter来组织和解组布尔值.应用程序的XML文件也将被C#应用程序访问.我们必须验证这个XML文件,这是使用XSD完成的. C#应用程序为布尔节点写入“True”值.但是,我们的XSD的验证是相同的,因为它只允许“true / false”或“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进程继续读取下一个节点.
一旦抛出异常,我希望应用程序停止.
看来我的异常被吃掉了.
任何帮助深表感谢.

如何解决这个问题?

解决方法

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());

第一个错误会导致解组失败.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读