Jaxb 在XMLAdapter中引发自定义异常

Jaxb 在XMLAdapter中引发自定义异常,jaxb,Jaxb,我正在使用XMLAdapter封送和取消封送日期。在我的解组器中,我想检查REST服务提供的格式。如果格式错误,那么我想抛出我自己的异常。然而,费用正在消耗殆尽,应用程序将继续运行。我知道解决方案在于ValidationEventHandler,但我不知道如何准确地使用它。请帮助了解如何使用它。我的XMLAdapter代码如下 public class DateFormatAdapter extends XmlAdapter<String, Date> { @Override pu

我正在使用XMLAdapter封送和取消封送日期。在我的解组器中,我想检查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;
}
公共类DateFormatAdapter扩展了XmlAdapter{
@凌驾
公共字符串封送处理程序(日期arg0)引发异常{
返回arg0.toString();
}
@凌驾
公共日期解组(字符串arg0){
DateFormat df=新的简化格式(“MM/dd/yyyy”);
df.setLenient(假);
日期startDate=null;
试一试{
startDate=df.parse(arg0);
格式(起始日期);
}捕获(解析异常){
//从这里抛出自定义异常
}
返回起始日期;
}

}这是真的!如果在XMLAdapter的实现中抛出异常,将捕获该异常并继续服务。响应的状态不会设置为
状态。内部\u服务器\u错误
或其他。相反,数据没有映射,因此响应不包含所需的数据。如果要影响响应代码,如果数据格式不匹配,则必须在数据实体本身中引发异常。在您的情况下,您必须创建一个CustomDate类来扩展Date,然后从构造函数调用一个验证方法。此外,不考虑使用apdapter类进行数据验证,因此使用自定义日期类和可选验证代理的方法更方便。

没错!如果在XMLAdapter的实现中抛出异常,将捕获该异常并继续服务。响应的状态不会设置为
状态。内部\u服务器\u错误
或其他。相反,数据没有映射,因此响应不包含所需的数据。如果要影响响应代码,如果数据格式不匹配,则必须在数据实体本身中引发异常。在您的情况下,您必须创建一个CustomDate类来扩展Date,然后从构造函数调用一个验证方法。此外,不考虑使用apdapter类进行数据验证,因此使用自定义日期类和可选验证代理的方法更加方便。

Ya这似乎是一种可行的方法。我会尝试这个并更新。是的,这似乎是一个可行的方法。我将尝试此更新。