Apache CXF 客戶端調用 超時設置
注:以下過程為本人親測,如有問題請留言,轉載請注明:http://blog.csdn.net/wqmain/article/details/8647416
Apache CXF提供了幾個客戶端調用代碼的例子,以下為其中之一(創建 JaxWsProxyFactoryBean 工廠的方式):
代碼片段一:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setAddress(SERVICE_ADDRESS); factory.setServiceClass(DemoService.class); DemoService service = (DemoService) factory.create();
SERVICE_ADDRESS 為 Web Service 服務端提供的接口調用地址;
DemoService.class 為根據CXF提供的wsdl2java.bat 生成的客戶端代碼類;
上述代碼在編譯、運行是沒問題的,但測試發現如果服務端沒有啟動或網絡環境差,CXF會默認等待一定的時間,這就麻煩了,界面不能卡在這里啊~~~
好在其提供了代理的方式來設置超時時間,編寫幫助類如下:
代碼片段二:
public class CXFClientUtil { public static final int CXF_CLIENT_CONNECT_TIMEOUT = 3 * 1000; public static final int CXF_CLIENT_RECEIVE_TIMEOUT = 5 * 1000; public static void configTimeout(Object service) { Client proxy = ClientProxy.getClient(service); HTTPConduit conduit = (HTTPConduit) proxy.getConduit(); HTTPClientPolicy policy = new HTTPClientPolicy(); policy.setConnectionTimeout(CXF_CLIENT_CONNECT_TIMEOUT); policy.setReceiveTimeout(CXF_CLIENT_RECEIVE_TIMEOUT); conduit.setClient(policy); } }
CXF_CLIENT_CONNECT_TIMEOUT 為與獲取服務端連接的超時時間,單位為毫秒
CXF_CLIENT_RECEIVE_TIMEOUT 為獲取連接后接收數據的超時時間,單位為毫秒
在“代碼片段一”的最后加入 CXFClientUtil.setTimeout(service); 就可以了,完整代碼如下:
代碼片段三:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setAddress(SERVICE_ADDRESS); factory.setServiceClass(DemoService.class); DemoService service = (DemoService) factory.create(); CXFClientUtil.setTimeout(service);
完成jar包如下圖:
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!