Skip to content

ApacheConnector could throw ConnectionClosedException when using httpclient: 4.5.1+ with chunked transfer encoding #3629

@jerseyrobot

Description

@jerseyrobot

As per the comment here: jersey/jersey@0d1326d#diff-91ece5335d0cdc9321a099df1caec54fR640

This change does not work with the org.apache.httpcomponents: httpclient: 4.5.1+ when using chunked transfer encoding. This is because they have changed the way they close the connection.
In this case when response.close() is called the connection is closed and the input stream's buffer is cleared, then super.close() function is not able to close the ChunkedInputStream and results in org.apache.http.ConnectionClosedException: Premature end of chunk coded message body: closing chunk expected.
The reason of the exception occurring is that upon close of ChunkedInputStream, the close() function reads the remainder of the chunked message and it fails because the buffer of the stream has been cleared when the connection has been closed in response.close() call. Reference: https://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/ChunkedInputStream.html#close()
The fix to this problem is putting super.close() line of code before the response.close(). This allows for the stream to be closed correctly before its buffer has been cleared.

The ApacheConnector could throw ConnectionClosedException: Premature end of chunk coded message body: closing chunk expected when using httpclient: 4.5.1+ with chunked transfer encoding.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions