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

前端之家收集整理的这篇文章主要介绍了java – JAXB XMLAdapter方法不会抛出异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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());

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

猜你在找的Java相关文章