在实际项目中发现,CXF在默认状态下Client与Server端TimeOut时间大概设置在大约1分钟左右。
换句话说,如果客户端调用服务端一个比较费时的服务(方法)时,当该服务运行时间超过1分钟时,客户端会断开服务,报Exception。
亦即TimeOut了。
设置的办法如下:
public static Object getCxfWsClient(Class<?> clazz) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(clazz);
factory.setAddress(getWebServiceURL(clazz));
Object client = factory.create();
// Client cxfClient = ClientProxy.getClient(client);
// Endpoint cxfEndpoint = cxfClient.getEndpoint();
// cxfEndpoint.getInInterceptors().add(getKeystoreInInterceptor());
// cxfEndpoint.getInInterceptors().add(new CXFLoggingInInterceptor());
// cxfEndpoint.getOutInterceptors().add(getKeystoreOutInterceptor());
// cxfEndpoint.getOutInterceptors().add(new CXFLoggingOutInterceptor());
Client proxy = ClientProxy.getClient(client);
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(CXF_CLIENT_TIME_OUT);
policy.setReceiveTimeout(CXF_CLIENT_TIME_OUT);
conduit.setClient(policy);
return client;
}
其他参考资料: