Skip to content

Clarification regarding correct usage of ResponseInputStream#abort and #close #5978

Open
@pepijnve

Description

@pepijnve

Describe the issue

Using a ReponseInputStream in a try-with-resources block combined with a call to abort can lead to a 'premature end of stream' error.

As an example, the following code

s3Client.putObject(b -> b.bucket(bucketName).key("object"), RequestBody.fromString("abcd"));
try (var object = s3Client.getObject(GetObjectRequest.builder().bucket(bucketName).key("object").build())) {
   object.abort();
}

produces an exception with this stack trace

org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 4; received: 0)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:198)
at org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:101)
at org.apache.http.impl.execchain.ResponseEntityProxy.streamClosed(ResponseEntityProxy.java:142)
at org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:228)
at org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:172)
at java.base/java.io.FilterInputStream.close(FilterInputStream.java:170)
at java.base/java.io.FilterInputStream.close(FilterInputStream.java:170)
at software.amazon.awssdk.core.io.SdkFilterInputStream.close(SdkFilterInputStream.java:83)

Is this the expected behaviour? The javadoc for ReponseInputStream seems to suggest that abort should be used instead of close. That does make it rather difficult to use abort in combination with try-with-resources.

Links

https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/ResponseInputStream.html

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationThis is a problem with documentation.needs-triageThis issue or PR still needs to be triaged.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions