hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oleg Kalnichevski (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HTTPCORE-302) setEntity should consume the old entity first
Date Sun, 22 Jul 2012 11:43:35 GMT

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

Oleg Kalnichevski commented on HTTPCORE-302:
--------------------------------------------

Quietly discarding I/O exceptions would be a rather bad idea, at least without logging them.
Please note, though, if some extra processing logic is needed in a particular application
context one can easily replace the default HTTP message classes with custom ones by using
a custom  HttpResponseFactory / HttpRequestFactory implementations.

---
class MyBasicHttpResponse extends BasicHttpResponse {

    public MyBasicHttpResponse(ProtocolVersion ver, int code, String reason) {
        super(ver, code, reason);
    }

    public MyBasicHttpResponse(StatusLine statusLine) {
        super(statusLine);
    }

    @Override
    public void setEntity(HttpEntity entity) {
        EntityUtils.consumeQuietly(getEntity());
        super.setEntity(entity);
    }        

}

class MyHttpResponseFactory implements HttpResponseFactory {
    
    public HttpResponse newHttpResponse(ProtocolVersion ver, int status, HttpContext context)
{
        return new MyBasicHttpResponse(ver, status, 
                EnglishReasonPhraseCatalog.INSTANCE.getReason(status, Locale.US));
    }
    
    public HttpResponse newHttpResponse(StatusLine statusline, HttpContext context) {
        return new MyBasicHttpResponse(statusline);
    }
};
---

EntityUtils#updateEntity() should also be just fine. Would you like to contribute a patch?

Oleg 
                
> setEntity should consume the old entity first
> ---------------------------------------------
>
>                 Key: HTTPCORE-302
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-302
>             Project: HttpComponents HttpCore
>          Issue Type: Improvement
>          Components: HttpCore
>    Affects Versions: 4.2.1
>            Reporter: William R. Speirs
>             Fix For: 4.3
>
>
> The setEntity() method of HttpResponse makes it very easy to leak connections if used
without consuming the old entity first. I'm proposing the following enhancements:
> 1) add a Javadoc note to the setEntity() method of HttpResponse that says something like:
"Implementations might not consume an existing entity. Callers should consume any existing
entity before calling this method."
> 2) either add a consumeAndSetEntity() method to BasicHttpResponse which consumes an existing
entity before setting the reference, OR change the implementation of setEntity() to consume
any existing entity first. (My vote is for the later, although it will change existing behavior,
it shouldn't negatively impact any callers.)
> The reason for this improvement request is simply that I've been burned a few times by
calling setEntity() without first consuming the existing entity, and I think we could make
this more user friendly. I'm happy to submit a patch once we decide what should be done with
#2.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


Mime
View raw message