CXF WebService 客户端设置超时时间
本文主要介绍CXF WebService 客户端如何设置超时时间,以及相关参数的介绍。 在使用WebService时,出现了超时的异常,如下。 警告: Interceptor for {http://www.idc.com/idc/idc.wsdl}SouthBaseService#{http://www.idc.com/idc/idc.wsdl}SyncVmInfo has thrown exception,unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
...
Caused by: java.net.SocketTimeoutException: SocketTimeoutException invoking http://127.0.0.1:8081/njrs/SouthBaseWS: Read timed out
...
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:689)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1324)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2165)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2134)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1988)
... 105 more
最初的想法是觉得肯定有地方是可以设置这么一个超时时间的,但是却苦苦找不到设置的地方,最终经过各种折腾,Google之百度之,找到了解决办法。 Using WebService,we usually set in the client request timeout limit in order to avoid long time to connect to the server is unavailable. CXF environment,the client can be configured through two properties timeout limit: 在使用网络服务时,通常需要为客户端设置请求超时时间,以避免长时间的去连接不可用的服务器。在CXF环境中,客户端可以通过两个参数配置超时限制:
Here are two ways to configure the client: In the spring configuration file settings. <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd ">
<http-conf:conduit name="{WSDL Namespace}portName.http-conduit">
<http-conf:client ConnectionTimeout="10000" ReceiveTimeout="20000"/>
</http-conf:conduit>
</beans>
It should be noted there are several places: 如下几点需要注意: Java code to be set. Client client = ClientProxy.getClient (port);
HTTPConduit http = (HTTPConduit) client.getConduit();
To = new HTTPClientPolicy (HTTPClientPolicy httpClientPolicy);
httpClientPolicy.setConnectionTimeout (36000);
httpClientPolicy.setAllowChunking (false);
httpClientPolicy.setReceiveTimeout (32000);
http.setClient (httpClientPolicy);
Server-side set spring code is as follows: <! - On the server side to set the response timeout limit,now is the default value of 30 seconds ->
<http-conf:destination name="*.http-conduit">
<http-conf:server ReceiveTimeout="30000" />
</ Http-conf: destination>
参考: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |