在XMLAdapter中抛出自定义异常

时间:2013-06-03 06:31:11

标签: jaxb

我正在使用XMLAdapter来编组和解组日期。在我的unmarshaller中,我想检查从REST服务提供的格式。如果格式错误,那么我想抛出一个我自己的例外。然而,这个考虑被吃掉了,应用程序继续前进。我知道解决方案在于 ValidationEventHandler ,但我无法弄清楚如何正确使用它。请帮助您使用它的方法。我的XMLAdapter代码就像这样

public class DateFormatAdapter extends XmlAdapter<String, Date> {

@Override
public String marshal(Date arg0) throws Exception {

    return arg0.toString();
}

@Override
public Date unmarshal(String arg0) {
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
    df.setLenient(false);
    Date startDate = null;
    try {
        startDate = df.parse(arg0);
        df.format(startDate);

    } catch (ParseException e) {
        // throw custom exception from here
    }

    return startDate;
}

}

1 个答案:

答案 0 :(得分:1)

这是真的!如果在XMLAdapter的实现中抛出异常,它将被捕获并继续服务。响应的状态不会设置为Status.INTERNAL_SERVER_ERROR或其他内容。检测到数据未映射,因此响应不包含所需数据。如果要影响响应代码,如果数据格式不匹配,则必须在数据实体本身中抛出异常。在您的情况下,您必须创建一个扩展Date的CustomDate类,然后从构造函数调用验证方法。此外,apdapter类不被视为进行数据验证,因此使用自定义日期类和可选验证代理的方法更加方便。