首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAXB XMLAdapter方法不抛出异常

JAXB XMLAdapter方法不抛出异常
EN

Stack Overflow用户
提问于 2012-06-20 15:02:56
回答 1查看 5.7K关注 0票数 18

我使用JAXB XMLadapter来编组和解组布尔值。应用程序的XML文件也将被C#应用程序访问。我们必须验证这个XML文件,这是使用XSD完成的。C#应用程序为布尔节点写入"True“值。但我们的XSD也验证了这一点,因为它只允许"true/false“或"1/0”。因此,我们在XSD中保留了用于布尔值的字符串,XMLAdapter将对该字符串进行验证,以便对我们进行编组和解组。XML适配器如下所示:

代码语言:javascript
复制
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“或"")时,”抛出新异常();“不会被传播,解组过程继续读取下一个节点。我希望应用程序在抛出异常时立即停止。看起来我的例外正在被吃掉。任何帮助都是非常感谢的。

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-20 15:13:19

来自XMLAdapter#unmarshal(ValueType)的JavaDoc

抛出:java.lang.Exception -如果在转换过程中出现错误。调用者负责通过ValidationEventHandler向用户报告错误。

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

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

代码语言:javascript
复制
unmarshaller.setEventHandler(new DefaultValidationEventHandler());

它将在第一个错误时导致解组失败。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11114428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档