2017-03-13 7 views
1

クライアントでJacksonを使用していましたが、Jerseyですべて正しく構成されていましたが、テストクラスで実行したとき、私たちのSTG環境に配備されたときに持っている特定のホストに接続し、常に読み取りタイムアウト例外をスローします。ジャージークライアントは読み取りタイムアウトを与えますが、Apache HTTPクライアントは通常通り接続します

はまた、私はcurl

を使用して接続することができます。しかしHTTPClientのに切り替えたときに、それが正常に働いていたので、問題は、私たちの環境ではないことを知っています。

これは私達が私達のジャージークライアントを作成する方法である:

Client client = ClientBuilder.newBuilder() 
      .register(JacksonFeature.class) 
      .property(ClientProperties.CONNECT_TIMEOUT,5000) 
      .property(ClientProperties.READ_TIMEOUT,15000) 
      .build(); 

ここでの唯一の違いは、アプリの流れであり、また、接続に影響を与える可能性の流れの中で起こる大きな変化は、その前にどこかにあります別のクラスジャージークライアントを呼び出すと、システムの設定でプロキシを設定します。

System.setProperty("http.proxyHost",strProxyHost); 
System.setProperty("http.proxyPort",strProxyPort); 
System.setProperty("https.proxyHost",strProxyHost); 
System.setProperty("https.proxyPort",strProxyPort); 

我々はHTTPClientのを使用して正常に接続を確立することができますしかし:

HttpConnectionManagerParams params = new HttpConnectionManagerParams(); 
params.setConnectionTimeout(5000); 
params.setSoTimeout(10000); 
HttpConnectionManager manager = new SimpleHttpConnectionManager(); 
manager.setParams(params); 
HttpClient httpClient = new HttpClient(manager); 

このアプリケーションの一部がレガシーでバージョンを更新できないため、HTTPClient 3を使用していますが、正常に動作します。

ジャージーとのこの接続の問題を引き起こす原因は何ですか?ジャージーが接続しようとしている時に何かグローバルなものがありますか?それは、これらのシステム変数が設定されている場合は、ジャージーは、この設定されたプロキシを介してすべての要求を送信することを意味し

System.setProperty("http.proxyHost",strProxyHost); 
System.setProperty("http.proxyPort",strProxyPort); 
System.setProperty("https.proxyHost",strProxyHost); 
System.setProperty("https.proxyPort",strProxyPort); 

- デフォルトで

答えて

1

Jerseyは、プロキシ構成のためのグローバル設定を以下HttpURLConnectionHttpURLConnection用途を使用しています。詳細を確認してくださいhere

ただし、Apache HttpClientはこれらの設定に従いません。 Apache HttpClientでプロキシを使用する場合は、HostConfiguration classを使用する必要があります。詳細を確認してくださいhere

あなたの問題では、あなたのSTG環境が指定されたプロキシに接続できず、サービスに直接接続できるように見えます。

したがって、Jerseyを使用している間、クライアントはプロキシに接続できないため、ReadTimeoutExceptionが発生しています。プロキシを使用するためにHttpClientを設定していないため、サービスに直接接続することができます。

+0

これを無視できますか? – engma

関連する問題