700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用CXF调用webservice接口是超时异常的捕获处理

使用CXF调用webservice接口是超时异常的捕获处理

时间:2019-12-18 21:35:56

相关推荐

使用CXF调用webservice接口是超时异常的捕获处理

在调用第三方提供的webservice接口时我们可以设置超时时间:

HTTPClientPolicy client = new HTTPClientPolicy();

client.setReceiveTimeout(1000 * 10); // 该时间为响应超时。

client.setConnectionTimeout(1000 * 20 ); // 连接超时。

超时后异常:

请求超时 .SocketTimeoutException: connect timed out

响应超时 .SocketTimeoutException: Read timed out

org.apache.cxf.interceptor.Fault: Could not send Message.

at org.apache.cxf.interceptor.MessageSenderInterceptorMessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)atorg.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)atorg.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)atorg.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68)atcom.sun.proxy.MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at org.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68) at com.sun.proxy.MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)atorg.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)atorg.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)atorg.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68)atcom.sun.proxy.Proxy32.bizECQuery(Unknown Source)

at com.sinosoft.test.Test.main(Test.java:400)

Caused by: .SocketTimeoutException: SocketTimeoutException invoking http://localhost:8080/services/IBizECQuery?wsdl: Read timed out

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.mapException(HTTPConduit.java:2058)atorg.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.mapException(HTTPConduit.java:2058) at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.mapException(HTTPConduit.java:2058)atorg.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.close(HTTPConduit.java:2043)

at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)

at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639)

at org.apache.cxf.interceptor.MessageSenderInterceptorMessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)...8moreCausedby:.SocketTimeoutException:.SocketInputStream.socketRead0(NativeMethod).SocketInputStream.socketRead(SocketInputStream.java:116).SocketInputStream.read(SocketInputStream.java:171).SocketInputStream.read(SocketInputStream.java:141)atjava.io.BufferedInputStream.fill(BufferedInputStream.java:246)atjava.io.BufferedInputStream.read1(BufferedInputStream.java:286)atjava.io.BufferedInputStream.read(BufferedInputStream.java:345).www.http.HttpClient.parseHTTPHeader(HttpClient.java:704).www.http.HttpClient.parseHTTP(HttpClient.java:647).www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569).www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474).HttpURLConnection.getResponseCode(HttpURLConnection.java:480)atorg.apache.cxf.transport.http.HTTPConduitMessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) ... 8 more Caused by: .SocketTimeoutException: Read timed out at .SocketInputStream.socketRead0(Native Method) at .SocketInputStream.socketRead(SocketInputStream.java:116) at .SocketInputStream.read(SocketInputStream.java:171) at .SocketInputStream.read(SocketInputStream.java:141) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at .www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) at .www.http.HttpClient.parseHTTP(HttpClient.java:647) at .www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569) at .www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) at .HttpURLConnection.getResponseCode(HttpURLConnection.java:480) at org.apache.cxf.transport.http.HTTPConduitMessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)...8moreCausedby:.SocketTimeoutException:.SocketInputStream.socketRead0(NativeMethod).SocketInputStream.socketRead(SocketInputStream.java:116).SocketInputStream.read(SocketInputStream.java:171).SocketInputStream.read(SocketInputStream.java:141)atjava.io.BufferedInputStream.fill(BufferedInputStream.java:246)atjava.io.BufferedInputStream.read1(BufferedInputStream.java:286)atjava.io.BufferedInputStream.read(BufferedInputStream.java:345).www.http.HttpClient.parseHTTPHeader(HttpClient.java:704).www.http.HttpClient.parseHTTP(HttpClient.java:647).www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569).www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474).HttpURLConnection.getResponseCode(HttpURLConnection.java:480)atorg.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.handleResponseInternal(HTTPConduit.java:2165)

at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.handleResponse(HTTPConduit.java:2134)atorg.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.handleResponse(HTTPConduit.java:2134) at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.handleResponse(HTTPConduit.java:2134)atorg.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.close(HTTPConduit.java:1988)

… 11 more

处理超时的时候我们想捕获.SocketTimeoutException异常是捕获不到的,但是有时又需要根据超时返回响应的结果。

经过认真思考终于发现了解决办法:

catch (Exception e) {

e.printStackTrace();

Throwable cause = e.getCause();

if (cause.getMessage().indexOf(“Connection refused: connect”) > 0){

System.out.println(“连接异常”);

}else if (cause.getMessage().indexOf(“Read timed out”) > 0){

System.out.println(“响应超时”);

}else if (cause.getMessage().indexOf(“connect timed out”) > 0){

System.out.println(“连接超时”);

}else{

System.out.println(“处理异常”);

}

}

连接异常:地址连接不可用,可能是服务端没有启动。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。