java - 避免读取消耗 AWS Response 的关闭流

标签 java amazon-web-services httpresponse aws-sdk

当我调用 Elastic Search Service 对请求进行签名时,我仍然无法理解如何读取 AWS 响应的内容。看起来流在某个地方被消耗了。例如,我可以将响应内容打印为字符串的唯一方法是在 ResponseHandler 中。我正在使用 Amazon AWS Java SDK 1.11.170。

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.

有没有办法在请求执行后并在响应处理程序之外保持流打开?

最佳答案

最终通过阅读此找到解决方案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();

如果您想使用第三方库,可以使用 Jest client插入 Jest AWS signer

关于java - 避免读取消耗 AWS Response 的关闭流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45502955/

相关文章:

JavaFX TextInputControl requestFocus

java - 无法在windows上运行java字节码,在mac上编译

Java EE 5 和 hibernate

django - 从 AWS S3 加载的 iframe 同源问题

http - 如何使用 boost::http::response_parser 解析字符串?

java - 检测edittext android Pie中的语言类型?

拉 og :image 时 Facebook 错误

amazon-web-services - AWS 存储桶策略 - 使用存储桶策略限制对存储桶的访问

get - NestJS 从 GridFS 返回一个文件

java - Android http 响应不起作用