Apache CFX(wsdl2java)生成的SOAP客户端在5s后关闭连接

Apache CFX(wsdl2java)生成的SOAP客户端在5s后关闭连接,java,soap,timeout,keep-alive,wsdl2java,Java,Soap,Timeout,Keep Alive,Wsdl2java,我有一个使用ApacheCXF(v3.3.2)生成的SOAP客户端。 客户机使用嵌入式Tomcat在Spring引导应用程序中运行 如何指定此SOAP客户端的保持活动超时 到目前为止,我发现: 用于建立连接的插座在5s后关闭。 此超时是基础sun.net.www.http.HttpClient中硬编码的默认值它不受tomcat连接超时或com.sun.xml.internal.ws.request.timeout属性的控制。 HttpClient.keepAliveTimeout变量仅在服务器使

我有一个使用ApacheCXF(v3.3.2)生成的SOAP客户端。 客户机使用嵌入式Tomcat在Spring引导应用程序中运行

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

到目前为止,我发现:

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

服务器不提供此标头

根据这一点,这是预期的行为,但它真的是:

客户端无法指定超时,这是服务器配置 确定最大超时值的。额外的保持活动标题 可以通知客户机服务器愿意将数据保留多长时间 连接打开


尝试直接通过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);