2017-08-04 17 views
1

リクエストに署名するElastic Search Serviceの呼び出し中に、AWS応答の内容を読み取る方法はまだ分かりません。ストリームがどこかで消費されているようです。たとえば、応答コンテンツを文字列として出力する唯一の方法は、ResponseHandler内にあります。 Amazon AWS Java SDK 1.11.170を使用しています。クローズドストリームを消費するAWSレスポンスを避ける

AmazonHttpClient client = new AmazonHttpClient(new ClientConfiguration()); 

Response<Void> response = client 
     .requestExecutionBuilder() 
     .request(request) 
     //.errorResponseHandler(errorHandler) 
     .executionContext(context) 
     //.execute(responseHandler) 
     .execute() 
; 

System.out.println("response = " + convertStreamToString(response.getHttpResponse().getContent())); 

このコードが故障と言う:リクエストの実行後、応答ハンドラー外のオープンストリームを維持する方法は

java.io.IOException: Attempted read from closed stream. 

ありますか?

+0

あなたはどのようなAWSサービスを使用していると詰まっJest clientを使用することができます? IMOでは、非常に低レベルのライブラリを使用しており、AWSが提供するサービス固有のSDKを使用する必要があります。 –

+0

残念ながらJavaクライアントがないので、基本的には単純なAmazonHttpClientを使用しています。とにかく、私はこれらの詳細を私の質問に追加しました、ありがとう! – koopa

答えて

1

最終的にこの問題を解決する解決策が見つかりましたgithub issue。 私は正しい応答ハンドラを使用しなければなりませんでした。ここでは、次のとおりです。呼び出し側で

public class StringResponseHandler implements HttpResponseHandler<AmazonWebServiceResponse<String>> { 

    @Override 
    public AmazonWebServiceResponse<String> handle(com.amazonaws.http.HttpResponse response) throws IOException { 

     AmazonWebServiceResponse<String> awsResponse = new AmazonWebServiceResponse<>(); 

     //putting response string in the result, available outside the handler 
     awsResponse.setResult((String) IOUtils.toString(response.getContent())); 

     return awsResponse; 
    } 

    @Override 
    public boolean needsConnectionLeftOpen() { 
     return false; 
    } 

} 

そして:

AmazonHttpClient client = new AmazonHttpClient(new ClientConfiguration()); 

Response<AmazonWebServiceResponse<String>> response = client 
     .requestExecutionBuilder() 
     .request(request) 
     .executionContext(context) 
     .execute(new StringResponseHandler()) //note the new handler 
     .execute() 
; 

//print the result (string expected) 
System.out.println("aws response result = " + response.getAwsResponse().getResult(); 

サードパーティのLIBSに行きたい場合は、あなたがJest AWS signer

関連する問題