问题描述
在我的应用程序中,我想为异常之一返回自定义响应。我通过异常上方的@SoapFault 注释找到了一种方法,它可以正常工作,我得到了自定义故障代码,但由于某种原因它没有在自定义异常解析器中命中我的customizefault 方法,所以我无法向响应添加详细信息。 代码:
public class DetailSoapFaultAnnotationExceptionResolver extends SoapFaultAnnotationExceptionResolver {
private static final QName DESCRIPTION = new QName("description");
private static final QName ERROR = new QName("code");
@Override
protected void customizefault(Object endpoint,Exception ex,SoapFault fault) {
SoapFaultDetail detail = fault.addFaultDetail();
if (ex instanceof ValidationException) {
detail.addFaultDetailElement(DESCRIPTION).addText(validationException.getMessage());
detail.addFaultDetailElement(ERROR).addText("Validation Error");
}
log.error(ex.getMessage(),ex);
}
异常:
@SoapFault(faultCode = FaultCode.CLIENT,locale = "en",faultStringOrReason = "Validation error",customFaultCode = "{URI}SOAP-ENV:Client")
public class ValidationException extends RuntimeException {
public ValidationException(String errorMessage) {
super(errorMessage);
}
}
配置:
@Bean
public DetailSoapFaultAnnotationExceptionResolver detailSoapFaultAnnotationExceptionResolver() {
DetailSoapFaultAnnotationExceptionResolver soapFaultAnnotationExceptionResolver = new DetailSoapFaultAnnotationExceptionResolver();
SoapFaultDeFinition faultDeFinition = new SoapFaultDeFinition();
faultDeFinition.setFaultCode(SoapFaultDeFinition.CLIENT);
soapFaultAnnotationExceptionResolver.setDefaultFault(faultDeFinition);
soapFaultAnnotationExceptionResolver.setorder(2);
return soapFaultAnnotationExceptionResolver;
}
如您所见,它的顺序为 2,因为我已经有一个自定义解析器来捕获所有其他异常(而带有注释的这个解析器也没有遇到第一个异常)
我还尝试将此异常添加到第一个自定义解析器中的错误映射中,但我无法仅为此异常设置不同的 faultString
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)