繁体   English   中英

JAXB XMLAdapter方法不会抛出异常

[英]JAXB XMLAdapter method does not throws Exception

我正在使用JAXB XMLadapter来编组和解组布尔值。 应用程序的XML文件也将由C#应用程序访问。 我们必须验证此XML文件,这是使用XSD完成的。 C#应用程序为布尔节点写入“True”值。 但是我们的XSD也证实了这一点,因为它只允许“真/假”或“1/0”。 因此,我们在XSD中保留了String的布尔值,XMLAdapter将验证该字符串,以便我们编组和解组。 XML Adapter如下:

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”或“”)时,则抛出“new new Exception();” 没有传播,Unmarshal进程继续读取下一个节点。 我希望应用程序在抛出异常后立即停止。 看来我的异常被吃光了。 任何帮助深表感谢。

如何解决这个问题?

来自XMLAdapter#unmarshal(ValueType)的JavaDoc:

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

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

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

unmarshaller.setEventHandler(new DefaultValidationEventHandler());

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM