Apache CXF 客戶端調用 超時設置

jopen 8年前發布 | 12K 次閱讀 Apache CXF WEB服務/RPC/SOA

注:以下過程為本人親測,如有問題請留言,轉載請注明: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包如下圖:


來自: http://blog.csdn.net/wqmain/article/details/8647416

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!