最近一直在找CXF客戶端超時時間設置的例子,但是網上搜出來的都是通過Spring配置。找了很久,也琢磨了很久。終於可以不用Spring配置來實現客戶端超時時間的設置了。
例子:我這個是java 調用Asp.net的Webservice例子
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import javax.xml.namespace.QName;
import org.tempuri.DHLServiceSoap;
public String invokeIPEXService(String data, String dataType) {
//創建WebService客戶端代理工廠
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//註冊WebService接口
factory.setServiceClass(DHLServiceSoap.class);
//設置WebService地址
factory.setAddress(url);
//QName函數的兩個參數,第一個是命名空間,第二個是webservice的服務名
//第一個參數在.net服務發佈時可以找到,也就是targetnamespace,
//第二個參數在java的接口實現類中可以找到,也就是serviceName。
factory.setServiceName(new QName("http://tempuri.org/", "DHLServiceSoap"));
DHLServiceSoap dhlService = (DHLServiceSoap)factory.create();
// 設置客戶端等待服務端響應時間
Client proxy = ClientProxy.getClient(dhlService );
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setAllowChunking(false);
// 連接服務器超時時間 3分鐘
policy.setConnectionTimeout(180*1000);
// 等待服務器響應超時時間 5分鐘
policy.setReceiveTimeout(300*1000); conduit.setClient(policy);
// 調用asp.net Webservice
String wsMsg = dhlService.ifIPEXInterface(data, dataType);
}