David,

Could you please post a code snippet that you think will reliably reproduce the 
problem?

As far as I can tell HttpMethodBase#responseBodyConsumed() is reliably executed when 
HttpMethodBase#getResponseBody() is called. HttpMethodBase#getResponseBody() in its 
turn invokes HttpConnection#releaseConnection(). Everything seems just fine. I do have 
to agree with Mike that the problem appears to have been caused by the way you use 
HttpClient. You should seriously consider redesigning your application to re-use 
HttpClient's instance or at least that of the ConnectionManager

See my test app's code below along with the resultant trace log

package org.apache.commons.httpclient;

import org.apache.commons.httpclient.methods.GetMethod;

public class Test {

        public static void main(String[] args) throws Exception {
        HttpClient httpclient = new HttpClient();
        GetMethod httpget = new GetMethod("http://www.yahoo.com";);
        httpclient.executeMethod(httpget);
        System.out.println(httpget.getStatusLine().toString());
        httpget.getResponseBody();
        }
}


[DEBUG] HttpClient - -Java version: 1.4.2
[DEBUG] HttpClient - -Java vendor: Sun Microsystems Inc.
[DEBUG] HttpClient - -Java class path: 
D:\Data\jakarta-commons-httpclient-tests\bin;D:\Data\jakarta-commons-httpclient-2.0\bin;C:\java\apache.org\jakarta-commons\lib\commons-logging.jar;C:\eclipse\plugins\org.junit_3.8.1\junit.jar
[DEBUG] HttpClient - -Operating system name: Windows 2000
[DEBUG] HttpClient - -Operating system architecture: x86
[DEBUG] HttpClient - -Operating system version: 5.0
...
[TRACE] GetMethod - -enter GetMethod(String)
[TRACE] HttpClient - -enter HttpClient.executeMethod(HttpMethod)
[TRACE] HttpClient - -enter 
HttpClient.executeMethod(HostConfiguration,HttpMethod,HttpState)
[DEBUG] HttpConnection - -HttpConnection.setSoTimeout(0)
[TRACE] HttpConnection - -enter HttpConnection.open()
[TRACE] HttpMethodBase - -enter HttpMethodBase.execute(HttpState, HttpConnection)
[DEBUG] HttpMethodBase - -Execute loop try 1
[TRACE] HttpMethodBase - -enter HttpMethodBase.processRequest(HttpState, 
HttpConnection)
[TRACE] HttpMethodBase - -Attempt number 1 to process request
[TRACE] HttpMethodBase - -enter HttpMethodBase.writeRequest(HttpState, HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.writeRequestLine(HttpState, 
HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.generateRequestLine(HttpConnection, 
String, String, String, String)
[TRACE] HttpConnection - -enter HttpConnection.print(String)
[TRACE] HttpConnection - -enter HttpConnection.write(byte[])
[TRACE] HttpConnection - -enter HttpConnection.write(byte[], int, int)
[TRACE] HttpMethodBase - -enter 
HttpMethodBase.writeRequestHeaders(HttpState,HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.addRequestHeaders(HttpState, 
HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.addUserAgentRequestHeaders(HttpState, 
HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.addHostRequestHeader(HttpState, 
HttpConnection)
[DEBUG] HttpMethodBase - -Adding Host request header
[TRACE] HttpMethodBase - -enter HttpMethodBase.addCookieRequestHeader(HttpState, 
HttpConnection)
[TRACE] HttpState - -enter HttpState.getCookies()
[TRACE] CookieSpec - -enter CookieSpecBase.match(String, int, String, boolean, 
Cookie[])
[TRACE] HttpMethodBase - -enter 
HttpMethodBase.addAuthorizationRequestHeader(HttpState, HttpConnection)
[TRACE] HttpMethodBase - -enter 
HttpMethodBase.addProxyAuthorizationRequestHeader(HttpState, HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.addProxyConnectionHeader(HttpState, 
HttpConnection)
[TRACE] HttpMethodBase - -enter 
HttpMethodBase.addContentLengthRequestHeader(HttpState, HttpConnection)
[TRACE] HttpConnection - -enter HttpConnection.print(String)
[TRACE] HttpConnection - -enter HttpConnection.write(byte[])
[TRACE] HttpConnection - -enter HttpConnection.write(byte[], int, int)
[TRACE] HttpConnection - -enter HttpConnection.print(String)
[TRACE] HttpConnection - -enter HttpConnection.write(byte[])
[TRACE] HttpConnection - -enter HttpConnection.write(byte[], int, int)
[TRACE] HttpConnection - -enter HttpConnection.writeLine()
[TRACE] HttpConnection - -enter HttpConnection.write(byte[])
[TRACE] HttpConnection - -enter HttpConnection.write(byte[], int, int)
[TRACE] HttpConnection - -enter HttpConnection.flushRequestOutputStream()
[TRACE] HttpConnection - -enter HttpConnection.flushRequestOutputStream()
[TRACE] HttpMethodBase - -enter HttpMethodBase.readResponse(HttpState, HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.readStatusLine(HttpState, 
HttpConnection)
[TRACE] HttpConnection - -enter HttpConnection.readLine()
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpMethodBase - -enter 
HttpMethodBase.readResponseHeaders(HttpState,HttpConnection)
[TRACE] HttpConnection - -enter HttpConnection.getResponseInputStream()
[TRACE] HttpParser - -enter HeaderParser.parseHeaders(HttpConnection, HeaderGroup)
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpMethodBase - -enter HttpMethodBase.processResponseHeaders(HttpState, 
HttpConnection)
[TRACE] GetMethod - -enter GetMethod.readResponseBody(HttpState, HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.readResponseBody(HttpState, 
HttpConnection)
[TRACE] HttpMethodBase - -enter HttpMethodBase.readResponseBody(HttpState, 
HttpConnection)
[TRACE] HttpConnection - -enter HttpConnection.getResponseInputStream()
[TRACE] HeaderElement - -enter HeaderElement.parse(String)
[TRACE] HeaderElement - -enter HeaderElement.parsePair(char[], int, int)
[DEBUG] HttpConnection - -HttpConnection.getSoTimeout()
[TRACE] HttpConnection - -enter HttpConnection.isResponseAvailable(int)
HTTP/1.1 200 OK
[DEBUG] HttpMethodBase - -Buffering response body
[TRACE] HttpParser - -enter HeaderParser.parseHeaders(HttpConnection, HeaderGroup)
[TRACE] HttpParser - -enter HttpParser.readLine()
[TRACE] HttpParser - -enter HttpParser.readRawLine()
[TRACE] HttpMethodBase - -enter responseBodyConsumed()
[DEBUG] HttpMethodBase - -Should close connection in response to Connection: close

[TRACE] HttpConnection - -enter HttpConnection.close()
[TRACE] HttpConnection - -enter HttpConnection.closeSockedAndStreams()
[TRACE] HttpConnection - -enter HttpConnection.releaseConnection()

Cheers

Oleg

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to