2012-03-16 797 views
3

我在更改Axis 1.4生成的Web服務客戶端代碼使用的標準選項時遇到問題。 我們使用舊的RPC/Encoded樣式的合作伙伴的某個Web服務,這基本上意味着我們無法訪問Axis 2,但僅限於Axis 1.4。更改Axis 1.4生成的SOAP Java客戶端的超時設置

服務客戶端正在通過我們的代理從遠程服務器檢索數據,它實際上運行得非常好。

我們的應用程序被部署爲一個servlet。將檢索到的外部Web服務響應插入到我們提供給我們內部系統/ CMS的(XML)文檔中。 但是,如果外部服務沒有響應 - 這還不發生,但隨時可能發生 - 我們要很好地降解,並沒有一個合理的時間內計算出的網絡服務信息回報我們生產的XML文檔。 檢索的數據是可選的(如果缺少這個特定的計算,它根本不是一個大問題)。

所以我試圖改變超時設置。我確實在軸的文檔中應用/使用了所有可以找到的方法和鍵,以通過搜索網頁來更改連接和套接字超時。 這些都不會影響連接超時。

任何人都可以給我建議如何改變基於1.4版的軸存根/服務/端口的設置?

下面是幾種配置,我試過一個例子:

MyService service = new MyServiceLocator(); 
MyServicePort port = null; 

try { 
    port = service.getMyServicePort(); 
    javax.xml.rpc.Stub stub = (javax.xml.rpc.Stub) port; 
    stub._setProperty("axis.connection.timeout", 10); 
    stub._setProperty(org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, 10); 
    stub._setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_CONNECTION_TIMEOUT_KEY, 10); 
    stub._setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_SO_TIMEOUT_KEY, 10); 

    AxisProperties.setProperty("axis.connection.timeout", "10"); 
    AxisProperties.setProperty(org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, "10"); 
    AxisProperties.setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_CONNECTION_TIMEOUT_KEY, "10"); 
    AxisProperties.setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_SO_TIMEOUT_KEY, "10"); 

    logger.error(AxisProperties.getProperties()); 

    service = new MyClimateServiceLocator(); 
    port = service.getMyServicePort(); 
} 

我指定的服務生成前的屬性改變後,我設置初始化時的屬性,我嘗試了其他幾個超時的鍵,我發現,... 我想我對此感到生氣,並開始忘記我已經嘗試過!

我在做什麼錯?我的意思是必須有一個選擇,不是嗎?

如果我沒有找到我想過建立一個線程同步與我們的代碼中的超時實際上感覺非常尷尬,不知怎麼傻了妥善的解決辦法。 你能想像別的嗎?

預先感謝


axis1.4 Java客戶端皁WSDL2Java的RPC /編碼的XML的servlet產生改變變化設置存根超時連接插座密鑰方法

+1

你們每個人都找到解決這個問題的方法嗎? – Stainedart 2012-04-19 19:43:47

回答

0

類型轉換服務端口對象org.apache.axis.client.Stub。

(即) org.apache.axis.client.Stub存根=(org.apache.axis.client.Stub)端口;

然後設置所有屬性:

stub._setProperty(org.apache.axis.client.Call。CONNECTION_TIMEOUT_PROPERTY,10); stub._setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_CONNECTION_TIMEOUT_KEY,10); stub._setProperty(org.apache.axis.components.net.DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_SO_TIMEOUT_KEY,10);

+1

以上解決方案不起作用。使用Axis 1.4和Java 1.7。事實上,沒有一種方法正在爲Axis讀取超時。驚喜!嘗試下面提到的所有選項鍊接 - http://wiki.apache.org/ws/FrontPage/Axis/AxisCommonsHTTP -/- http://www.coderanch.com/t/544075/Web-Services/ java/set-timeout-Axis-client -/- https://samaxes.com/2009/04/axis-14-read-timed-out-and-http-11/ – Santosh 2016-06-14 06:00:56