[
https://issues.apache.org/jira/browse/HTTPCLIENT-651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12495909
]
Oleg Kalnichevski commented on HTTPCLIENT-651:
----------------------------------------------
Mirco,
The 'modality' of the response handling logic in HttpClient is a well know and
a very old problem that dates back to the days of HttpClient 1.x. (I remember
discussing the issue as early as year 2002). The problem has been resolved in
HttpClient 4.0 codeline. I do not see a possibility for fixing the problem in
HttpClient 3.x without taking a very high risk of breaking existing
applications.
Oleg
> Inconsistent, order dependant behaviour in HttpMethodBase.getResponse*
> ----------------------------------------------------------------------
>
> Key: HTTPCLIENT-651
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-651
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Reporter: Mirko Friedenhagen
> Priority: Minor
>
> `getReponseBodyAsString` is storing the body and may therefore provide a
> valid result if the code is requesting the body as stream afterwards. If you
> switch the order and first call getResponseBodyAsStream and afterwards try to
> `getReponseBodyAsString`, the result will be `null`.
> I wrote a unittest which hopefully describes the IMHO confusing behaviour:
> public void testHttpClientBodyVsStream() throws HttpException,
> IOException {
> final HttpClient httpClient = new HttpClient();
> final GetMethod getMethod = new GetMethod("http://www.heise.de/");
> final String bodyFromStream;
> final String body;
> try {
> httpClient.executeMethod(getMethod);
> body = getMethod.getResponseBodyAsString();
> bodyFromStream = IOUtils.toString(getMethod
> .getResponseBodyAsStream());
> } finally {
> getMethod.releaseConnection();
> }
> assertEquals(body, bodyFromStream);
> }
>
> public void testHttpClientStreamVsBody() throws HttpException,
> IOException {
> final HttpClient httpClient = new HttpClient();
> final GetMethod getMethod = new GetMethod("http://www.heise.de/");
> final String bodyFromStream;
> final String body;
> try {
> httpClient.executeMethod(getMethod);
> bodyFromStream = IOUtils.toString(getMethod
> .getResponseBodyAsStream());
> body = getMethod.getResponseBodyAsString();
> } finally {
> getMethod.releaseConnection();
> }
> // ** This will fail **
> assertEquals(body, bodyFromStream);
> }
> Searching
> http://svn.apache.org/repos/asf/jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpMethodBase.java
> I understand the outcome, but this is confusing.
> I would expect the body data to be gone after calling one of the
> getResponse*-Methods and calling them again not to return null but even to
> throw an IllegalStateException. I would not store the body at all in the
> method.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]