Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ClientInterceptor-捕获404场景_Java_Spring_Spring Boot - Fatal编程技术网

Java ClientInterceptor-捕获404场景

Java ClientInterceptor-捕获404场景,java,spring,spring-boot,Java,Spring,Spring Boot,我正在使用ClientInterceptor截获应用程序发出的所有外部soap调用,并记录请求和响应。我能够捕获请求/响应和故障场景。但是,当我看到由于端点配置不正确而导致404错误时,我无法使用此接口提供的方法捕获该错误。有没有办法用这个接口捕获404错误?如果没有,你能帮助我知道我需要探索的替代方案吗 org.springframework.ws.client.support.interceptor.ClientInterceptor org.springframework.ws.clien

我正在使用ClientInterceptor截获应用程序发出的所有外部soap调用,并记录请求和响应。我能够捕获请求/响应和故障场景。但是,当我看到由于端点配置不正确而导致404错误时,我无法使用此接口提供的方法捕获该错误。有没有办法用这个接口捕获404错误?如果没有,你能帮助我知道我需要探索的替代方案吗

org.springframework.ws.client.support.interceptor.ClientInterceptor


org.springframework.ws.client.support.interceptor.ClientInterceptor.handleFault()
仅适用于拦截传入响应错误的进程。这就是规范定义的SOAP错误。因此,和规范定义了SOAP错误时返回的状态代码(例如,在请求消息信封中的XML格式错误的情况下)。SOAP 1.1为故障指定500状态代码,SOAP 1.2为发送方故障指定400状态代码,为所有其他故障指定500状态代码。如果出现故障,服务器将在包含SOAP故障元素的响应中返回SOAP消息,然后可以将该消息传递给
ClientInterceptor.handleFault()
方法。但404状态代码表明这不是SOAP故障,而是系统错误。因此,如果您还需要处理这种情况,则需要覆盖
WebServiceTemplate.handleError()
方法

这样就行了

public class CustomWebServiceTemplate extends WebServiceTemplate{

    @Override
    protected Object handleError(WebServiceConnection connection, WebServiceMessage request) throws IOException {
        log.info("Log the error case in here");
        return super.handleError(connection, request);
    }
}

谢谢@Babl。有没有办法在handleError方法中获取MessageContext对象?我在MessageContext中设置了一些属性,作为handleRequest方法的一部分。如果我需要使用handleError方法处理超时响应,是否有办法访问messagecontext中的元素?不是简单的方法,我的意思是没有什么是不可能的,但是您需要覆盖
WebServiceTemplate.doSendAndReceive
以拥有完全自定义的内容。。。默认实现的问题在于,它只将请求发送到
handleError
方法,如
handleError(connection,messageContext.getRequest())。因此,如果您真的需要它,您需要使用
WebServiceTemplate.dosendReceive
Hey@Babl,只是一个更新-我能够在扩展clientinterceptor的类中的after complete方法中截获这些消息。非常感谢。