[英]Is setting up a server runtime necessary to generate a web service client with CXF in Eclipse?
[英]Setting a client receiveTimeout for CXF service above 4 minutes
我已經生成了CXF服務,並為這兩個都設置了120000ms = 2min
超時:
requestContext.put("javax.xml.ws.client.receiveTimeout", 120000);
requestContext.put("javax.xml.ws.client.connectionTimeout", 120000);
它運行良好,我已經對其進行了20s, 1min, 3min
-每次它都在等待足夠多的時間來響應。
但是,當我想將其設置為5min
時,問題仍然存在。 服務僅在~240800ms = ~4min
〜4min內等待響應。
我正在打電話給jboss esb服務。 此過程最多持續5min
。 從我的PC的簡單.jar
應用程序內部調用CXF服務,因此之間沒有其他服務器/容器(例如tomcat等)。
有什么想法可以解決我的超時設置?
使用Apache CXF 3.0.1
編輯
我現在知道要收到2條不同的消息,這取決於我的超時設置:
如果我將其設置為<=4min
(通過我的@pedrofb方法),那么經過這段時間后,我會得到:
org.apache.cxf.interceptor.Fault:無法發送消息。 在org.apache.cxf.endpointClient的org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)的org.apache.cxf.interceptor.MessageSenderInterceptor $ MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)處.doInvoke(ClientImpl.java:516)
引起原因:java.net.SocketTimeoutException:調用http:// esb:8080 / MyService / ebws / Category / MyService的 SocketTimeoutException:讀取超時
如果我將其設置為>4min
或0
,則會得到:
javax.xml.ws.soap.SOAPFaultException:未收到對服務[Category:MyService]的響應,請不要重試。
老實說,我很困惑預期的結果(我認為是第一個)
編輯2
我已經通過SoapUI
測試了MyService
。 我在那里設置了5min
超時時間,並根據樣品要求進行拍攝。
同樣,再過4分鍾后,我得到了:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<env:Fault>
<faultcode>env:Server</faultcode>
<faultstring>No response received for service [Category:MyService], Told not to retry.</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>
但是,當我查看Jboss ESB的日志時,我沒有異常,沒有錯誤, MyService
了1分鍾(約5分鍾)並返回正常響應-由審核工具確認(該響應將每個請求注冊到我的esb-帶有響應)和時間)。
我認為@pedrofb在評論中提到的這一點。 有什么建議嗎?
也許您的問題類似於此http://rayploski.blogspot.com.es/2010/08/jbossesb-setting-up-long-running.html客戶端在ESB繼續處理時收到超時。 在這種情況下,需要在ESB中配置org.jboss.soa.esb.ws.timeout
要配置客戶端超時,似乎對requestContext
參數的使用似乎不合理,請參見https://java.net/jira/browse/JAX_WS-1166 。 CXF團隊建議他們可以改變
嘗試使用CXF特定參數進行超時
Client client = ClientProxy.getClient(proxy);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(0);
httpClientPolicy.setReceiveTimeout(0);
http.setClient(httpClientPolicy);
參數的完整列表在此處 。 0表示沒有超時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.