2013-08-14 36 views
9

私はWSをテストするためにapache httpクライアントを使用しています。私はジャージーにWSを書いています。このWSのためのURLは、URLを使ってこのWSを呼び出すためにapache httpクライアントorg.apache.http.NoHttpResponseException:ターゲットサーバが応答に失敗しました

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

である私は、プログラムを実行し、この関数にURLを渡す際に従う

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); 
    } 

} 

は、今私は例外を取得している方法を記述しています

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) 
をたどるように、ラインで

HttpResponse response = client.execute(request); 

例外があります0

WS URLを使用してブラウザを使用した場合、期待どおりの結果が得られますが、私のapache httpクライアントコードで何が問題なのかを知りたいのですが...

+0

Excatly同じ問題がここに掲載されました:http://stackoverflow.com/questions/10558791/apache-httpclient-interim-error-nohttpresponseexception – pls

答えて

2

私はここからのリンクを経て、この答えになった: get NoHttpResponseException for load testing

右のトラックに私を設定し

。少しここで答えを更新するには、解決策は、現在のHTTPクライアント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(); 
} 

私はRestTemplate工場のためのパラメータとしてクライアントを使用するので、私はそれになりたいので、私もそこに春・ウェブを使用しますRestTemplateで使用されます。

-4

「URL」に正しい値。 "ターゲットサーバーが応答できませんでした"というエラーメッセージが表示されます。これは、提供されたURLが間違っているか、サーバーがシャットダウンしています。間違ったパラメータ名/値などを指定した場合は、エラーメッセージが異なります。

+1

url is correct。私はウェブブラウザでこのURLを使用していて、そこではうまく動作しています –

+0

ウェブブラウザのリクエストとjava-appリクエストのやり方が異なっていますが、クライアントがHTTPヘッダーをサーバーから読み取ることができないことは明らかです。これらのエラーがApache http-clientで発生したソースコードを確認してください。 – wonhee

+0

do { //バッファをクリアする this.lineBuf.clear(); int i = sessionBuffer.readLine(this.lineBuf); if(i == -1 && count == 0){ //サーバがただちに接続を切断しました 新しいNoHttpResponseExceptionをスローします(「対象サーバは応答しませんでした」)。 } – wonhee

関連する問題