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]

Reply via email to