2013-08-21 146 views
0

我在這方面尋找解決方案,但它們都不適用於我的案例。所以在這裏: 我有一個應用程序需要對第三方域進行服務調用。我正在使用球衣客戶端進行此服務調用。撥打此電話的代碼是獲取java.net.ConnectException:連接被拒絕

ClientResponse resp = resourceWithParams. 
         header("Authorization", getAccessKeyId() + ":" + 
         hmacSha1.toUpperCase()). 
         post(ClientResponse.class,""); 

其中resourceWithParams是澤西網絡資源。請注意,即使它是POST,Web服務期望查詢字符串和空主體。這可能是有問題的設計,但這是我們必須合作的。

此設置在我的本地機器以及我們的preprod服務器上工作得很好。然而在我們的生產服務器它給出了一個例外:

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused

有一對夫婦低於點可能在指着我在正確的方向會有所幫助:

1)我們得到當有效響應我們在prod服務器命令行上使用curl向Web服務發送請求,因此似乎沒有防火牆問題。只有當我們通過Web應用程序嘗試它時,即通過使用澤西客戶端的Java代碼纔會發生這種情況。

2)沒有設置督促服務器

3)上的代理作品從本地主機細。

4)其餘的web服務使用https和正確的證書安裝在我們的服務器上,事實證明,在prod上的web服務的工作正常。

關於這個問題可能是什麼以及我們應該從哪裏開始尋找的任何想法?

編輯:

如上所述,我們使用https連接到web服務。如果我們使用http,它似乎工作。

+0

HTTPS通常運行在與HTTP不同的端口上,即443而不是80.當您使用curl測試連接時,是否使用https? – Joni

回答

2

我建議您設置一個tcpdump會話來查看拒絕連接的來源。特別是,請查看源IP和目標IP地址是什麼,對於成功的連接和不成功的連接。

有兩種可能性以上的目的是測試:

  1. 你說你不使用代理服務器,但Java實際上有從系統的其餘部分的單獨代理配置,因此它可能是因爲你的Java被配置爲使用非功能性代理服務器。
  2. 您的Java系統可能會使用不同的源IP地址發送請求到curl正在使用的請求。
+2

謝謝。我們的管理員做了一個tcpdump,它顯示請求已轉到Web服務提供者的暫存域。重新啓動prod服務器解決了這個問題。推測是服務器正在從不正確的陳舊/緩存屬性文件中獲取域信息。在問題得到解決的同時,根源分析正在進行中。 – kau

+0

這已經開始再次發生,看起來像是正確的網址。管理員說,當他發出請求(在UI中)時,他沒有在tcp棧上看到任何東西。有任何想法嗎?我可以獲得更多信息。謝謝。 – kau

相關問題