在 spring ws 中向@SoapFault 响应添加详细信息

问题描述

在我的应用程序中,我想为异常之一返回自定义响应。我通过异常上方的@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 (将#修改为@)