iru*_*umi 15 java apache timeout cxf
可能的原因是:
org.apache.cxf.interceptor.Fault: Could not send Message.
Caused by: java.net.SocketTimeoutException: SocketTimeoutException invoking https://xxx.xxx.xxx.xxx:8443/services/test: Read timed out
它通常发生在我发送肥皂请求之后ws.我正在使用apache cxf.我完全确定它ws已启动并运行,因为在超时发生之前,客户端将再发送2个请求.超时发生在第三个soap请求中.
Car*_*eon 17
我的webservice客户端也遇到了这个错误.对我有用的解决方案是在CXF配置文件(cxf.xml)中配置http客户端.
1.添加http-conduit命名空间和xsd:
Run Code Online (Sandbox Code Playgroud)<beans ... xmlns:http-conf="http://cxf.apache.org/transports/http/configuration ... xsi:schemaLocation="... http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd ...">
2.添加http-conduit标签/元素并将RecieveTimeout/ConnectionTimeout设置为180000ms:
Run Code Online (Sandbox Code Playgroud)<http-conf:conduit name="*.http-conduit"> <http-conf:client ConnectionTimeout="300000" ReceiveTimeout="300000"/> </http-conf:conduit>
Pau*_*nis 13
错误消息表示您的Web服务客户端尝试通过网络从远程Web服务接收数据,但在特定时间段内未收到任何数据,因此Web服务客户端停止等待接收数据.
其中一个可能的原因可能是timeout房产太低了.默认为cxf默认值分别为30000和60000 ms.这些可以根据您创建客户端的方式进行更改.
如果您使用Java代码创建客户端,则可以使用:
//1 minute for connection
((BindingProvider) wsPort).getRequestContext().put("com.sun.xml.ws.connect.timeout", 1 * 60 * 1000);
//3 minutes for request
((BindingProvider) wsPort).getRequestContext().put("com.sun.xml.ws.request.timeout", 3 * 60 * 1000);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Spring,则可以使用如下地图:
<util:map id="jaxwsProperties">
<entry key="com.sun.xml.internal.ws.request.timeout">
<value type="java.lang.Integer">120000</value>
</entry>
<entry key="com.sun.xml.internal.ws.connect.timeout">
<value type="java.lang.Integer">60000</value>
</entry>
</util:map>
Run Code Online (Sandbox Code Playgroud)
然后将该映射设置为您的<jaxws:client.../>配置.
配置超时的另一种方法(以编程方式):
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
Object serviceClass = factory.create();
defineTimeouts(serviceClass);
static void defineTimeouts(Object serviceClass) {
Client cxfClient = ClientProxy.getClient(serviceClass);
HTTPConduit httpConduit = (HTTPConduit) cxfClient.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(DEFAULT_CLIENT_CONNECTION_TIMEOUT);
httpClientPolicy.setReceiveTimeout(DEFAULT_CLIENT_RECEIVE_TIMEOUT);
httpConduit.setClient(httpClientPolicy);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62054 次 |
| 最近记录: |