【问题标题】:Apache CFX (wsdl2java) generated SOAP Client closes connections after 5sApache CXF (wsdl2java) 生成的 SOAP 客户端在 5 秒后关闭连接
【发布时间】:2020-03-24 05:57:01
【问题描述】:

我有一个使用 apache-cxf(v3.3.2) 生成的 SOAP 客户端。 客户端使用嵌入式 Tomcat 在 Spring Boot 应用程序中运行。

如何指定此 SOAP 客户端的保持活动超时?

到目前为止我发现了什么:

用于建立连接的socket在5s后关闭。 此超时是底层 sun.net.www.http.HttpClient 中的硬编码默认值。 它不受 tomcat connection-timeout 或 com.sun.xml.internal.ws.request.timeout 属性的控制。 HttpClient.keepAliveTimeout 变量仅在服务器以 Keep-Alive 标头响应时设置(例如 Keep-Alive: timeout=60, max=100 ):see line 752

服务器不提供此标头。

根据this answer,这是预期的行为,但真的是这样吗:

客户端无法指定超时时间,是服务器配置 确定最大超时值。额外的 Keep-Alive 标头 可以通知客户端服务器愿意保留多长时间 连接打开...

【问题讨论】:

    标签: java soap timeout keep-alive wsdl2java


    【解决方案1】:

    尝试直接通过 HTTPClientPolicy 进行设置。我在我的 CXF 客户端中使用它。

            Client client = ClientProxy.getClient(port);
    
            HTTPConduit http = (HTTPConduit) client.getConduit();
    
            // Set connection timeout
            HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
            httpClientPolicy.setConnectionTimeout(30000);
            httpClientPolicy.setAllowChunking(false);
            httpClientPolicy.setReceiveTimeout(30000);
    
            http.setClient(httpClientPolicy);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      相关资源
      最近更新 更多