簡體   English   中英

Java Web服務客戶端中的連接詳細信息和超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM