[英]Connection details & timeouts in a java web service client
我必須為給定的WSDL文件實現webservice客戶端。 我使用SDK的'wsimport'工具從WSDL創建Java類,以及將webservice唯一的方法( enhanceAddress(auth, param, address)
)包裝成一個簡單的java方法的類。 到現在為止還挺好。 Web服務功能正常,返回結果正確。 代碼如下所示:
try {
EnhancedAddressList uniservResponse = getWebservicePort().enhanceAddress(m_auth, m_param, uniservAddress);
//Where the Port^ is the HTTP Soap 1.2 Endpoint
}catch (Throwable e) {
throw new AddressValidationException("Error during uniserv webservice request.", e);
}
問題現在:我需要獲取有關連接的信息以及為了填充各種JMX值而可能發生的任何錯誤(例如COUNT_READ_TIMEOUT,COUNT_CONNECT_TIMEOUT,...)不幸的是,該方法沒有正式拋出任何異常,所以按順序要獲取有關ConnectException的詳細信息,我需要在將拋出的ClientTransportException
上使用getCause()
。
更糟糕的是:我試圖測試讀取超時值,但沒有。 我在wsdl文件中更改了服務的位置,將請求發布到php腳本,該腳本只是永遠等待並且不會返回。 你猜怎么着:Web服務客戶端不會超時,但將永遠等待,以及(我30多分鍾的等待后,殺死了應用程序)。 這不是我的應用程序的選項,因為我最終用完了tcp連接,如果其中一些被“卡住”。
enhanceAddress(auth, param, address)
方法未實現,但使用javax.jws注釋。*注釋,這意味着我無法查看/更改/檢查實際執行的代碼。
我有什么選擇,但要扔掉整個wsimport / javax.jsw-stuff並實現我自己的soap客戶端?
要設置讀取超時和連接超時,您可以在設置服務和端口實例時配置綁定參數:
Service = new Service();
Port = Service.getPort();
((BindingProvider) Port).getRequestContext().put(
BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://localhost:8080/service");
((BindingProvider) Port).getRequestContext().put(
BindingProviderProperties.CONNECT_TIMEOUT,
30);
((BindingProvider) Port).getRequestContext().put(
BindingProviderProperties.REQUEST_TIMEOUT,
30);
現在,無論何時通過“端口”執行服務,如果后端響應緩慢,您將獲得響應超時和/或連接超時。 值遵循套接字類的超時值。
當超過這些超時時,您將獲得超時執行或連接異常,並且您可以使用計數器代碼來跟蹤您獲得的數量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.