You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Kalnichevski, Oleg" <ol...@bearingpoint.com> on 2004/06/04 13:23:23 UTC
RE: Problems with HttpClient
Paulo,
Apparently you were looking at the HttpClient 3.0 code. The problem has indeed been already fixed in CVS HEAD. Make sure you select HTTPCLIENT_2_0_BRANCH tag when accessing CVS repository in order to retrieve the latest HttpClient 2.0 compatible code
http://cvs.apache.org/viewcvs.cgi/jakarta-commons/httpclient/?only_with_tag=HTTPCLIENT_2_0_BRANCH
Oleg
-----Original Message-----
From: Paulo Gaspar [mailto:paulo.gaspar]
Sent: Tue 5/11/2004 17:13
To: Commons HttpClient Project
Cc:
Subject: Re: Problems with HttpClient
> ...
> Do not use HttpMethodBase#getResponseBody or
> HttpMethodBase#getResponseBodyAsString methods. They are plain broken.
> Both methods are made to ignore I/O errors and return null instead of
> propagating IOException-s to the caller.
> ...
When did that happen?
That is not what I see on the sources I have, in which
HttpMethodBase.java has a 2004-03-25 20:37:20 timestamp.
In this version there is no big difference between using any of those
methods.
From what I see, getResponseBodyAsString() uses the byte array built
by getResponseBody() to build a String from it. Building the String
from the array involves no I/O.
public String getResponseBodyAsString() throws IOException {
byte[] rawdata = null;
if (responseAvailable()) {
rawdata = getResponseBody();
}
if (rawdata != null) {
return EncodingUtil.getString(rawdata, getResponseCharSet());
} else {
return null;
}
}
Looking at how the byte array is built, I see that it uses
getResponseBodyAsStream() - which you say is OK - and reads it to that
stored-and-returned byte array without chocking any IOExceptions!
public byte[] getResponseBody() throws IOException {
if (this.responseBody == null) {
InputStream instream = getResponseBodyAsStream();
if (instream != null) {
LOG.debug("Buffering response body");
ByteArrayOutputStream outstream =
new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int len;
while ((len = instream.read(buffer)) > 0) {
outstream.write(buffer, 0, len);
}
outstream.close();
setResponseStream(null);
this.responseBody = outstream.toByteArray();
}
}
return this.responseBody;
}
Is it bad in CVS now? Was it recently fixed?
I have no CVS access at the moment but, anyway, I think it is important
to make clear if something went wrong and must be fixed or if there is
a misunderstanding of some kind frome one of us about how this methods
are implemented.
Thanks, and have fun,
Paulo Gaspar
Oleg Kalnichevski wrote:
> Anoop,
>
> My guess is that some of the methods simply timeout while reading the
> response from the server. Unfortunately, HttpClient does not handle this
> situation well. Do not use HttpMethodBase#getResponseBody or
> HttpMethodBase#getResponseBodyAsString methods. They are plain broken.
> Both methods are made to ignore I/O errors and return null instead of
> propagating IOException-s to the caller. Whoever designed those methods
> did HttpClient a bad service. Use getResponseBodyAsStream and do the
> reading from the input stream as you see fit
>
> Cheers,
>
> Oleg
>
>
> On Fri, 2004-05-07 at 17:01, Anoop Adya wrote:
>
>>Hi
>>We have developed a client solution with the help of HttpClient.
>>During the trial run we noticed that it works smoothly for clients and
>>server within the same domain. However, if i try to use HttpClient over
>>multiple domains, I get a NullPointerException as getResponseBody returns
>>null.
>>Do we need to do something special to handle cross domain requests?
>>Note however that the user is in the same domain as the server we try to
>>access.
>>
>>Any pointers would be greatly appreciated.
>>
>>regards, Anoop.
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org
>>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org