cxf 联接超时

cxf 连接超时
  1. 1 客户端(在spring中配置超时):   
  2.   
  3. 如例:   
  4.   
  5. view plaincopy to clipboardprint?   
  6. <beans   xmlns="http://www.springframework.org/schema/beans"  
  7.             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  8.             xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"  
  9.             xsi:schemaLocation="http://cxf.apache.org/transports/http/configuration     
  10.                 http://cxf.apache.org/schemas/configuration/http-conf.xsd     
  11.                 http://www.springframework.org/schema/beans     
  12.                 http://www.springframework.org/schema/beans/spring-beans.xsd">   
  13.             <http-conf:conduit name="{http://apache.org/hello_world_soap_http}SoapPort.http-conduit">   
  14.                 <http-conf:client ConnectionTimeout="30000" ReceiveTimeout="60000" />   
  15.             </http-conf:conduit>   
  16.         </beans>   
  17. 首先要注意的事情是<http:conduit>的name属性。   
  18.   
  19. 这个name包含服务的命名空间,WSDL的端口(port)名--就是wsdl的<wsdl:port>name属性,以及".http-conduit".   
  20.   
  21. 就是下面这个模板:"{WSDL Namespace}portName.http-conduit". 注意:它是端口名称(port name),不是服务名称(service name)。   
  22.   
  23. name值的另一个选择是"*.http-conduit",是URL的正则表达式。例:   
  24.   
  25. <http:conduit name=".*">   
  26.   
  27. </http:conduit>   
  28.   
  29. 在localhost:8080上为所有交互配置一个conduit. 在同一个服务端,如果你有多个客户端与不同的服务进行交互,这可能是最   
  30.   
  31. 简单的方法。   
  32.   
  33. Namespace   
  34.   
  35. 这个元素用于配置一个HTTP客户端,它定义在命名空间:http://cxf.apache.org/transports/http /configuration.   
  36.   
  37. 它通常被称为使用前缀http-conf. 为了使用HTTP配置元素,你需要添加下面显示的一行到你的端点配置文件的   
  38.   
  39. beans元素。此外,你还需要添加配置元素的命名空间到xsi : schemaLocaion属性。   
  40.   
  41. 例:HTTP 客户端配置命名空间   
  42.   
  43. <beans ....   
  44.   
  45. xmlns:http-conf="http://cxf.apache.org/transports/http/configuration   
  46.   
  47. xsi:schemaLocation="...   
  48.   
  49. http://cxf.apache.org/transports/http/configuration   
  50.   
  51. http://cxf.apache.org/schemas/configuration/http-conf.xsd   
  52.   
  53. ...>   
  54.   
  55. conduit元素   
  56.   
  57. 你使用http-conf:conduit元素和它的子元素配置一个HTTP客户端。 http-conf:conduit元素只有一个属性,name,   
  58.   
  59. 它指定对应到端点接口的WSDL port元素. 这个name属性的值是:prtQName.http-conduit.   
  60.   
  61. 例如,下面的代码显示http-conf : conduit元素将被用于为一个端点接口添加配置,它指定为wsdl片断   
  62.   
  63. <port binding="widgetSOAPBinding" name="widgetSOAPPort">,如果端点接口的目标命名空间是:   
  64.   
  65. 例:http-conf:conduit Element   
  66.   
  67. <http-conf:conduit name="{http://widgets/widgetvendor.net}widgetSOAPPort.http-conduit">   
  68.   
  69. ....   
  70.   
  71. </http-conf:conduit>   
  72.   
  73. 也你能使用通配符来指定http:conduit,你要配置:   
  74.   
  75. <http-conf:conduit name="*.http-conduit">   
  76.   
  77. ....   
  78.   
  79. </http:conf:conduit>   
  80.   
  81. http-conf:conduit元素有一些子元素,其中http-conf : client----- 指定http连接属性,如:超时,保持活动的请求,内容类型等。   
  82.   
  83. 这个是我们需要的。   
  84.   
  85. 这个http-conf:client元素有一些属性,定义超时的有两个:   
  86.   
  87. ConnectionTimeout(连接超时)------ 指定的一个时间量,以毫秒为单位,客户端将在超时之前尝试建立连接。默认是   
  88.   
  89. 30000(30秒). 0 指定客户端将继续无限期地尝试打开一个连接。   
  90.   
  91. ReceiveTimeout(接收超时)----- 指定的一个时间量,以毫秒为单位,客户端将在超时之前等待响应。默认是   
  92.   
  93. 60000(一分钟). 0 指定客户端将无限期等待。   
  94.   
  95. 2 客户端(在java代码直接控制超时配置)   
  96.   
  97. 首先你需要从代理对象或客户端得到HTTPConduit, 然后你能设置HTTPClientPolicy,AuthorizationPolicy,   
  98.   
  99. ProxyAuthorizationPolicy,TLSClientParameters,和/或 HttpBasicAuthSupplier.   
  100.   
  101. view plaincopy to clipboardprint? URL wsdl = getClass().getResource("wsdl/greeting.wsdl");     
  102. SOAPservice service = new SOAPservice(wsdl,serviceName);     
  103. Greeter greeter = service.getPort(portName,Greeter.class);   Client client = ClientProxy.getClient(greeter);     
  104. HTTPConduit http = (HTTPConduit)client.getConduit();     
  105. HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();     
  106. httpClientPolicy.setConnectionTimeout(36000);     
  107. httpClientPolicy.setReceiveTimeout(32000);     
  108. http.setClient(httpClientPolicy);   greeter.sayHi("Hello");   
  109. 3 服务端(在spring中配置)   
  110.   
  111. Namespace   
  112.   
  113. 如例(与client差不多,意思也一样):   
  114.   
  115. <beans ...   
  116.   
  117. xmlns:http-conf="http://cxf.apache.org/transports/http/configuration   
  118.   
  119. xsi:schemaLocation="...   
  120.   
  121. http://cxf.apache.org/transports/http/configuration   
  122.   
  123. http://cxf.apache.org/schemas/configuration/http-conf.xsd   
  124.   
  125. ...>   
  126.   
  127. destination元素   
  128.   
  129. 如例(与client差不多,意思也差不多)   
  130.   
  131. ....   
  132.   
  133. <http-conf:destination name="{http://widgets/widgetvendor.net}widgetSOAPPort.http-destination>   
  134.   
  135. ......   
  136.   
  137. </http-conf:destination>   
  138.   
  139. http-conf:destination元素有个子元素:http-conf:server ------指定HTTP连接属性   
  140. <http-conf:server>有属性:ReceiveTimeout-----设置以毫秒为单位的时间长度,服务端在连接超时之前   
  141. 尝试接收请求。默认是30000(30秒)。 指定服务器将不超时使用0 view plaincopy to clipboardprint?   
  142. <beans   xmlns="http://www.springframework.org/schema/beans"  
  143.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  144.         xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"  
  145.         xsi:schemaLocation="http://cxf.apache.org/transports/http/configuration     
  146.             http://cxf.apache.org/schemas/configuration/http-conf.xsd     
  147.             http://www.springframework.org/schema/beans     
  148.             http://www.springframework.org/schema/beans/spring-beans.xsd">         <http-conf:destination name="{http://apache.org/hello_world_soap_http}SoapPort.http-destination">   
  149.             <http-conf:server     ReceiveTimeout="30000"/>   
  150.         </http-conf:destination>   
  151.     </beans>