2017-03-13 2 views
1

Ich war Jersey 2.25 Client mit Jackson, ich konfiguriert alles richtig in Jersey, funktionierte es normalerweise auf meiner Entwicklungsmaschine, wenn ich es in einer Testklasse lief, aber Jersey-Client konnte nie Stellen Sie eine Verbindung zu einem bestimmten Host her, den wir in unserer STG-Umgebung implementiert haben, und lösen Sie immer eine Lese-Timeout-Ausnahme aus.Jersey Client gibt Lese-Timeout, aber Apache HTTP Client verbindet normalerweise

Ich weiß auch, dass das Problem nicht in unserer Umwelt ist, weil ich eine Verbindung herstellen kann curl

Verwendung Aber wenn zu Httpclient schaltet es funktionierte normal.

Dies ist, wie wir unser Jersey-Client erstellt:

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

Der einzige Unterschied hier ist der Ablauf der Anwendung, und auch die große Veränderung, die in der Strömung geschieht, den die Verbindung, dass irgendwo beeinflussen könnte vor Aufruf der Jersey-Client eine andere Klasse ein Proxy in der Systemkonfiguration setzt:

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

jedoch wir eine Verbindung normalerweise unter Verwendung von Httpclient herstellen können:

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

Wir verwenden HTTPClient 3, weil ein Teil dieser App veraltet ist und wir die Version nicht aktualisieren können, aber sie funktioniert normal.

Was könnte dieses Verbindungsproblem mit Jersey verursachen? Gibt es etwas Globales, das Jersey liest, wenn es versucht zu verbinden?

Antwort

1

Jersey verwendet standardmäßig HttpURLConnection und HttpURLConnection Anwendungen folgende globale Einstellungen für Proxy-Konfiguration -

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

Es bedeutet, wenn diese Systemvariablen eingestellt sind, wird Jersey alle Anfragen durch diesen konfigurierten Proxy senden. Überprüfen Sie Details here

Allerdings folgt Apache HttpClient nicht diesen Einstellungen. Um den Proxy in Apache HttpClient zu verwenden, müssen Sie HostConfiguration class verwenden. Überprüfen Sie Details here

So, jetzt zu Ihrem Problem, Es sieht aus, dass Ihre STG-Umgebung nicht in der Lage ist, eine Verbindung zum angegebenen Proxy aber in der Lage, mit dem Dienst direkt zu verbinden.

Also, während der Verwendung von Jersey, Client ist nicht in der Lage, eine Verbindung zum Proxy und damit ReadTimeoutException auftritt. Da Sie HttpClient für die Verwendung eines beliebigen Proxys nicht konfiguriert haben, können Sie sich direkt mit dem Dienst verbinden.

+0

Und können wir das überhaupt überschreiben? – engma

Verwandte Themen