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

Oleg Kalnichevski commented on HTTPCLIENT-1756:
-----------------------------------------------

Sounds reasonable to me. If we are to choose the first option one thing I would 
certainly suggest doing is limiting the length of the message to something like 
256 characters in order to avoid stack traces with megabytes of junk printed to 
console or logged in the log file.

Oleg

> Response Body on response codes over 300 should not be ignored
> --------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1756
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1756
>             Project: HttpComponents HttpClient
>          Issue Type: Improvement
>          Components: HttpClient
>    Affects Versions: 4.5.2
>            Reporter: Michael Peter Gower
>            Priority: Minor
>
> Hello.  This is my first time posting an issue to this project.  I've done my 
> best to be helpful.
> Many modern RESTful APIs (e.g. Amazon Web Services) will return a generic 
> status description (e.g. "Bad Request") and details in the body of the 
> response on an error (e.g. code 400).  
> However the org.apache.http.client.fluent.Response.returnContent() ignores 
> the body (content) on a return code of over or equal to 300, causing the 
> debugging information to be lost.  This leads to generic exception messages.
> A possible solution would be to include the body in the exception string, as 
> demonstrated in the below ResponseHandler.
>     protected static class FaultTolerantContentResponseHandler
>             extends ContentResponseHandler {
>         @Override
>         public Content handleResponse(final HttpResponse response)
>                 throws HttpResponseException, IOException {
>             final StatusLine statusLine = response.getStatusLine();
>             final HttpEntity entity = response.getEntity();
>             Content content = entity == null ? null : handleEntity(entity);
>             if (statusLine.getStatusCode() >= 300) {
>                 String message = statusLine.getReasonPhrase();
>                 if (content != null) {
>                     message += ", body was " + content.asString();
>                 }
>                 throw new HttpResponseException(statusLine.getStatusCode(),
>                         message);
>             }
>             return content;
>         }
>     }
> Alternatives would be to create a new subclass of HttpResponseException that 
> would have an additional getErrorContent() method to preserve backwards 
> compatibility.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to