Apache CXF 作為主流 JAX-WS 實現,透過 HTTPConduit 精細控制 HTTP 傳輸層超時參數。本文提供生產環境驗證的最小化配置代碼,區分連接建立階段與數據接收階段的超時語義。
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(Service1Soap.class);
factory.setAddress("https://host:port/SMSService/Service1.asmx?WSDL");
Service1Soap client = (Service1Soap) factory.create();
// 關鍵:獲取 Client 控制 HTTPConduit
Client proxy = ClientProxy.getClient(client);
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(10_000); // 連接超時 10s:TCP 三次握手階段
policy.setReceiveTimeout(10_000); // 接收超時 10s:從發送請求到讀取完響應
// policy.setAllowChunking(false); // 視服務端支援情況關閉分塊傳輸
conduit.setClient(policy);
// 業務調用
String result = client.sendSms("account", "password", "", "", "");
System.out.println("耗時: " + (System.currentTimeMillis() - start) + "ms");
| 參數 | 階段 | 觸發條件 | 異常類型 |
|---|---|---|---|
ConnectionTimeout | TCP 連接建立 | 握手超過閾值無響應 | ConnectException / SocketTimeoutException |
ReceiveTimeout | 數據傳輸/處理 | 發送請求後,讀取響應數據流超過閾值無新數據 | SocketTimeoutException (read timeout) |