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]