加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

CXF WebService 客户端设置超时时间

发布时间:2020-12-16 22:39:24 所属栏目:安全 来源:网络整理
导读:本文主要介绍CXF WebService 客户端如何设置超时时间,以及相关参数的介绍。 在使用WebService时,出现了超时的异常,如下。 警告: Interceptor for {http://www .idc .com /idc/idc .wsdl }SouthBaseService #{http://www.idc.com/idc/idc.wsdl}SyncVmInfo

本文主要介绍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环境中,客户端可以通过两个参数配置超时限制:

  • The ConnectionTimeout: WebService based TCP connection,this property can be understood as TCP handshake time settings,exceeds the time that it is the connection timeout in milliseconds,the default is 30000 milliseconds,or 30 seconds.
  • ConnectionTimeout: WebService是基于TCP连接的,因此这个属性可以理解为设置TCP握手时间,若超出这个时间就认为连接超时。默认的时间单位是毫秒,默认设置是30000毫秒,即30秒。

  • ReceiveTimeout: this property WebService request is sent to wait for a response time exceeds the length of time that it is the response timeout in milliseconds,the default is 60000 milliseconds,or 60 seconds.

  • ReceiveTimeout: 这个属性表示发送WebService请求后所等待响应的时间,若超过设置的时间则认为超时。默认的时间单位是毫秒,默认设置是60000毫秒,即60秒。

Here are two ways to configure the client:
下面有两种方法可以在客户端进行配置:

In the spring configuration file settings.
- 在spring配置文件中进行配置。

<?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:
1,we need to specify the http-conf namespace: xmlns: http-conf =
2,the location of the specified pattern:
Http-conf: Conduit name attribute to specify service settings to take effect. by the service namespace in the WSDL port name. “http-conduit”,the name attribute,such as the {} HelloWorld.http in-conduit. If the name attribute is set to “http-conduit”,will be effective for all services.

如下几点需要注意:
1. 需要指定http-conf的命名空间:xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
2. 指定模式位置: http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
3. http-conf:conduit中的name属性,指定设置生效的服务。name属性由service的namespace、WSDL中的 port name和”.http-conduit”组成,如{http://apache.org/hello_world}HelloWorld.http- conduit。如果将name属性设置为“*.http-conduit”,则会对所有服务生效。

Java code to be set.
- 使用Java代码设置:

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:
- 服务器端的spring代码配置如下:

<! - 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>

参考:
http://www.javawebdevelop.com/3314355/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读