hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mirko Friedenhagen (JIRA)" <j...@apache.org>
Subject [jira] Created: (HTTPCLIENT-651) Inconsistent, order dependant behaviour in HttpMethodBase.getResponse*
Date Tue, 15 May 2007 08:57:16 GMT
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: httpcomponents-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpcomponents-dev-help@jakarta.apache.org


Mime
View raw message