[ 
https://issues.apache.org/jira/browse/HTTPCORE-349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13766386#comment-13766386
 ] 

Oleg Kalnichevski edited comment on HTTPCORE-349 at 9/13/13 4:02 PM:
---------------------------------------------------------------------

Hendy,

This is not an easy subject. You see, not all HTTP response objects keep 
allocated system resources and therefore not all of them need to be closed. For 
instance HTTP response objects returned by asynchronous (non-blocking) protocol 
handlers are self-contained. Making them implement Closeable would add extra 
complexity for no good reason.

What is certainly true that blocking protocol handlers should always return 
CloseableHttpResponse instead of HttpResponse. However, at least in HttpClient 
4.3 one can use CloseableHttpClient abstract class instead of HttpClient 
interface in order to be able to utilize 'try with resources' with response 
objects

{code}

try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
    HttpGet httpGet = new HttpGet("http://targethost/homepage";);
    try (CloseableHttpResponse response1 = httpclient.execute(httpGet)) {
        System.out.println(response1.getStatusLine());
        HttpEntity entity1 = response1.getEntity();
        EntityUtils.consume(entity1);
    }
}

{code}

Oleg
                
      was (Author: olegk):
    Hendy,

This is an easy subject. You see, not all HTTP response objects keep allocated 
system resources and therefore not all of them need to be closed. For instance 
HTTP response objects returned by asynchronous (non-blocking) protocol handlers 
are self-contained. Making them implement Closeable would add extra complexity 
for no good reason.

What is certainly true that blocking protocol handlers should always return 
CloseableHttpResponse instead of HttpResponse. However, at least in HttpClient 
4.3 one can use CloseableHttpClient abstract class instead of HttpClient 
interface in order to be able to utilize 'try with resources' with response 
objects

{code}

try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
    HttpGet httpGet = new HttpGet("http://targethost/homepage";);
    try (CloseableHttpResponse response1 = httpclient.execute(httpGet)) {
        System.out.println(response1.getStatusLine());
        HttpEntity entity1 = response1.getEntity();
        EntityUtils.consume(entity1);
    }
}

{code}

Oleg
                  
> HttpResponse should implement Closeable (Java7 try-with-resources support)
> --------------------------------------------------------------------------
>
>                 Key: HTTPCORE-349
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-349
>             Project: HttpComponents HttpCore
>          Issue Type: Improvement
>          Components: HttpCore
>    Affects Versions: 4.3
>            Reporter: Hendy Irawan
>             Fix For: Future
>
>
> Currently we've got code like this:
> {code}
> final HttpResponse response = client.execute(postReq);
> try {
>       final StatusLine responseStatus = response.getStatusLine();
>       final String responseBody;
>       if (response.getEntity() != null)
>               responseBody = 
> IOUtils.toString(response.getEntity().getContent());
>       else
>               responseBody = null;
>       if (responseStatus.getStatusCode() >= 200 && 
> responseStatus.getStatusCode() < 300) {
>               log.info("Job returned {}: {}", responseStatus, responseBody);
>       } else
>               log.error("Job returned {}: {}", responseStatus, responseBody);
> } finally {
>       HttpClientUtils.closeQuietly(response);
> }
> {code}
> It would be great if this could be simplified to : (in Java 7)
> {code}
> try (final HttpResponse response = client.execute(postReq)) { 
>     ...
> }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to