All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zalando.riptide.httpclient.RestAsyncClientHttpResponse Maven / Gradle / Ivy

package org.zalando.riptide.httpclient;

import org.apache.http.conn.ConnectionReleaseTrigger;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpResponse;

import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;

final class RestAsyncClientHttpResponse implements ClientHttpResponse {

    private final ClientHttpResponse response;

    RestAsyncClientHttpResponse(final ClientHttpResponse response) {
        this.response = response;
    }

    @Override
    public HttpStatus getStatusCode() throws IOException {
        return response.getStatusCode();
    }

    @Override
    public int getRawStatusCode() throws IOException {
        return response.getRawStatusCode();
    }

    @Override
    public String getStatusText() throws IOException {
        return response.getStatusText();
    }

    @Override
    public InputStream getBody() throws IOException {
        final InputStream body = response.getBody();
        return new FilterInputStream(body) {
            @Override
            public void close() throws IOException {
                if (body instanceof ConnectionReleaseTrigger) {
                    // effectively releasing the connection back to the pool in order to prevent starvation
                    ConnectionReleaseTrigger.class.cast(body).abortConnection();
                }
                super.close();
            }
        };
    }

    @Override
    public HttpHeaders getHeaders() {
        return response.getHeaders();
    }

    @Override
    public void close() {
        response.close();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy