微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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 举报,一经查实,本站将立刻删除。