2013-08-14 4 views
9

Ich verwende Apache HTTP-Client, um meine WS zu testen. Ich habe eine WS in Jersey geschrieben. URL für diese WS istApache HTTP-Client org.apache.http.NoHttpResponseException: Der Zielserver konnte nicht antworten

http://localhost:8080/mobilestore/rest/sysgestockmobilews/getinventory?xml=dataString 

dieses WS zu nennen URL ich eine Methode schreiben, die als

public static void getInventory(String input) 
     throws ClientProtocolException, IOException { 

    System.out.println(input); 
    String url = URL + "getinventory"; 
    HttpClient client = new DefaultHttpClient(); 

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
    nameValuePairs.add(new BasicNameValuePair("xml", input)); 
    String paramString = URLEncodedUtils.format(nameValuePairs, "utf-8"); 
    url += "?" + paramString; 
    System.out.println(url); 
    HttpGet request = new HttpGet(url); 
    HttpResponse response = client.execute(request); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(response 
      .getEntity().getContent())); 

    String line = ""; 
    while ((line = rd.readLine()) != null) { 
     System.out.println(line); 
    } 

} 

Nun folgen ist, wenn ich das Programm ausführen und die URL an diese Funktion übergeben i Ausnahme erhalten an der Linie ist

HttpResponse response = client.execute(request); 

Ausnahme als

Aug 14, 2013 9:31:50 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute 
INFO: I/O exception (org.apache.http.NoHttpResponseException) caught when processing   request: The target server failed to respond 
Aug 14, 2013 9:31:50 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute 
INFO: Retrying request 
Aug 14, 2013 9:31:50 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute 
INFO: I/O exception (org.apache.http.NoHttpResponseException) caught when processing request: The target server failed to respond 
Aug 14, 2013 9:31:50 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute 
INFO: Retrying request 
Aug 14, 2013 9:31:50 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute 
INFO: I/O exception (org.apache.http.NoHttpResponseException) caught when processing  request: The target server failed to respond 
Aug 14, 2013 9:31:50 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute 
INFO: Retrying request 
Exception in thread "main" org.apache.http.NoHttpResponseException: The target server failed to respond 
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95) 
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62) 
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254) 
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289) 
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252) 
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191) 
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300) 
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127) 
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) 
at com.tainosystems.http.client.TestWs.getInventory(TestWs.java:66) 
at com.tainosystems.http.client.TestWs.main(TestWs.java:47) 
folgen 0

Jetzt, wenn ich die WS-URL benutze und es mit einem beliebigen Browser wähle, bekomme ich das erwartete Ergebnis, aber ich möchte wissen, was mit meinem Apache http Client-Code falsch ist.

+0

Genau das gleiche Problem wurde hier gepostet: http://stackoverflow.com/questions/10558791/apache-httpclient-interim-error-nohttpresponseseception – pls

Antwort

2

Ich ging von hier die Links durch und bekam zu dieser Antwort: get NoHttpResponseException for load testing

Das hat mich auf die richtige Spur gesetzt. So aktualisieren Sie die Antwort ein bisschen hier ist die Lösung der aktuellen HTTP-Client-4.5-API:

private final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(createHttpClient()); 

private CloseableHttpClient createHttpClient() { 
    return HttpClients.custom().setRetryHandler((exception, executionCount, context) -> { 
      if (executionCount > 3) { 
       LOGGER.warn("Maximum tries reached for client http pool "); 
       return false; 
      } 
      if (exception instanceof org.apache.http.NoHttpResponseException) { 
       LOGGER.warn("No response from server on " + executionCount + " call"); 
       return true; 
      } 
      return false; 
     }).build(); 
} 

ich auch feder Bahn dort verwenden, damit ich den Client als Parameter für RestTemplate Fabrik verwendet, da ich mag es sein in der RestTemplate verwendet.

-4

Überprüfen Sie, ob Ihre "URL" den richtigen Wert hat . Die Fehlermeldung lautet "Der Zielserver konnte nicht antworten". Entweder ist die angegebene URL falsch oder der Server wurde heruntergefahren. Wenn Sie einen falschen Parameternamen/-wert oder etwas falsch angegeben haben, ist die Fehlermeldung anders.

+1

URL ist korrekt. Ich benutze diese URL im Webbrowser und ihre Arbeit dort gut –

+0

Ich weiß nicht, was Sie zwischen Web-Browser-Anfrage und Java-App-Anfrage anders gemacht haben, aber es ist sehr klar, dass Ihr Client HTTP-Header vom Server sowieso nicht lesen kann. Überprüfen Sie den Quellcode, von dem die Fehler in Apache http-client stammen. – wonhee

+0

do { // löschen Sie den Puffer this.lineBuf.clear(); int i = sessionBuffer.readLine (this.lineBuf); if (i == -1 && count == 0) { // Der Server hat gerade die Verbindung zu uns unterbrochen Neue NoHttpResponseException ausgelöst ("Der Zielserver konnte nicht antworten"); } – wonhee

Verwandte Themen