hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Natarajan_Va...@emc.com
Subject RE: stream corruption
Date Wed, 21 Jan 2009 23:30:39 GMT
Oleg, thanks for adding your comments. We call releaseConnection method
in finally. Can you think of anything else which might cause this
problem? Again, I'm not saying that this is a bug in httpclient and
thank you for confirming. I am seeking some help to fix the problem that
we have.

 
         m_multiThreadedHttpConnectionManager = new
 MultiThreadedHttpConnectionManager();
         m_client = new
HttpClient(m_multiThreadedHttpConnectionManager);
 
 
         PostMethod post = new PostMethod(url);
         try {
             post.setRequestEntity(new
InputStreamRequestEntity(serializeObject(request)));
 
             NameValuePair[] pair = new NameValuePair[1];
             pair[0] = new NameValuePair(name, value);
             post.setQueryString(pair);
             m_client.executeMethod(post);
 
             if (post.getStatusCode() == 200) {
                     ObjectInputStream responseStream = new
ObjectInputStream(post.getResponseBodyAsStream());
                     return responseStream.readObject();
             }
		 return post.getStatusText();
		}
		finally 
	  {
            post.releaseConnection();
        }


-----Original Message-----
From: Oleg Kalnichevski [mailto:olegk@apache.org] 
Sent: Wednesday, January 21, 2009 3:02 PM
To: HttpClient User Discussion
Subject: Re: stream corruption

Pete Keyes wrote:
> That isn't what you need to do.  You need to:
getResponseBodyAsStream()
> 
> Or some other method to flush the socket - the status has nothing to
do with the response body.
> 
>  

I do not mean to hijack the discussion, but I thought I should mention 
that HttpMethod#releaseConnection would take care of reading content to 
the end of the message and ensuring the connection was released in a 
consistent state. As long as HttpMethod#releaseConnection is called from

a finally clause, there should be no data corruption.

To this date (and I have been involved in maintaining HttpClient for 
long 6 years) I cannot recall a single case of confirmed data corruption

due to a bug in HttpClient.

Oleg

> ...Pete
> Starbucks Coffee Co.
> 2601 Utah Ave S.
> Seattle, WA. 98134
> (work) 206-318-5933
> (cell) 206-226-4552 
> (page) 206-314-2054 or 2063142054@archwireless.net
> 
> -----Original Message-----
> From: Natarajan_Valli@emc.com [mailto:Natarajan_Valli@emc.com] 
> Sent: Wednesday, January 21, 2009 1:39 PM
> To: httpclient-users@hc.apache.org
> Subject: RE: stream corruption
> 
> We read status text when return code is not 200
> 
> post.getStatusText()
> 
> Is that enough? 
> 
> Thanks
> Valli
> 
> -----Original Message-----
> From: Pete Keyes [mailto:PKeyes@starbucks.com] 
> Sent: Wednesday, January 21, 2009 1:23 PM
> To: HttpClient User Discussion
> Subject: RE: stream corruption
> 
> That will fail to clear the connection stream any time the HTTP return
> code is not 200.
> 
> You must always completely read the HTTP response - or face
corruption.
> 
>  
> ...Pete
> Starbucks Coffee Co.
> 2601 Utah Ave S.
> Seattle, WA. 98134
> (work) 206-318-5933
> (cell) 206-226-4552 
> (page) 206-314-2054 or 2063142054@archwireless.net
> 
> -----Original Message-----
> From: Natarajan_Valli@emc.com [mailto:Natarajan_Valli@emc.com] 
> Sent: Wednesday, January 21, 2009 12:00 PM
> To: httpclient-users@hc.apache.org
> Subject: RE: stream corruption
> 
> Yes all defaults.
> 
> Code snippet
> 
>         m_multiThreadedHttpConnectionManager = new
> MultiThreadedHttpConnectionManager();
>         m_client = new
HttpClient(m_multiThreadedHttpConnectionManager);
> 
> 
>         PostMethod post = new PostMethod(url);
>         try {
>             post.setRequestEntity(new
> InputStreamRequestEntity(serializeObject(request)));
> 
>             NameValuePair[] pair = new NameValuePair[1];
>             pair[0] = new NameValuePair(name, value);
>             post.setQueryString(pair);
>             m_client.executeMethod(post);
> 
>             if (post.getStatusCode() == 200) {
>                     ObjectInputStream responseStream = new
> ObjectInputStream(post.getResponseBodyAsStream());
>                     return responseStream.readObject();
>             }
> 
> 
> -----Original Message-----
> From: raykroeker@gmail.com [mailto:raykroeker@gmail.com] On Behalf Of
> Raymond Kroeker
> Sent: Wednesday, January 21, 2009 11:53 AM
> To: HttpClient User Discussion
> Subject: Re: stream corruption
> 
> What about any retry params.  I'm guessing you're using the defaults
> there too?
> 
> On Wed, Jan 21, 2009 at 10:44,  <Natarajan_Valli@emc.com> wrote:
>> we use standard ones (no customization)
>>
>> org.apache.commons.httpclient.methods.PostMethod
>> org.apache.commons.httpclient.methods.InputStreamRequestEntity (we
>> buffer the serialized java object and pass ByteArrayInputStream to
>> InputStreamRequestEntity).
>>
>> As recommended we re-use HttpClient object and create PostMethod
> object
>> every time by passing url. Also use default params and its values.
>>
>> Thanks
>> Valli
>>
>> -----Original Message-----
>> From: raykroeker@gmail.com [mailto:raykroeker@gmail.com] On Behalf Of
>> Raymond Kroeker
>> Sent: Wednesday, January 21, 2009 10:32 AM
>> To: HttpClient User Discussion
>> Subject: Re: stream corruption
>>
>> What about the http methods themselves.  Are you using the vanilla
>> versions that come with http client; are you extending them in any
>> way; are you using a request entity for either post/put?
>>
>> Raymond
>>
>> On Wed, Jan 21, 2009 at 10:20,  <Natarajan_Valli@emc.com> wrote:
>>> Raymond,
>>>
>>> Thanks for reply.
>>>
>>> 1. Yes & no. The problem re-occurs but things work fine when we
> resend
>>> failed request. So, there is no testcase or data that reproduce the
>>> problem as needed.
>>> 2. I tried to buffer & dump content on server side before calling
>>> ObjectInputStream and readObject in order to see content of
malformed
>>> stream. Unfortunately, the problem did not occur or at least the
>> problem
>>> is delayed for hours...
>>>
>>> Additional information is, we use MultiThreadedHttpConnectionManager
>> on
>>> client side.
>>>
>>> Thanks
>>> Valli
>>>
>>> -----Original Message-----
>>> From: raykroeker@gmail.com [mailto:raykroeker@gmail.com] On Behalf
Of
>>> Raymond Kroeker
>>> Sent: Wednesday, January 21, 2009 10:07 AM
>>> To: HttpClient User Discussion
>>> Subject: Re: stream corruption
>>>
>>> Hi Natarajan,
>>>    I've been using hc 3.0.1 for a long while and have never noticed
>>> this issue.  I have a couple of questions.
>>>
>>> 1.  Can you reproduce the event that causes the error?
>>> 2.  Can you see what the content of the malformed stream is?
>>>
>>>    If neither of these is true I would suggest that you persist the
>>> request content such that when the error occurs you can troubleshoot
>>> the problem and ask better questions.
>>>
>>> Raymond
>>>
>>> On Wed, Jan 21, 2009 at 09:02,  <Natarajan_Valli@emc.com> wrote:
>>>> We use HttpClient version 3.0.1 and recently noticed stream
>>> corruption.
>>>> The corruption is noticed on server side when the server (webapp
>>> running
>>>> in Jboss server) receives those requests. We believe that at some
>>> point
>>>> content of 2 requests are mixed. Is that possible? The problem is
>> very
>>>> intermittent but happens very often.
>>>>
>>>>
>>>>
>>>> Here is the code snippet that receives the stream on server side
>>>>
>>>>
>>>>
>>>>                    ObjectInputStream reqStream = new
>>>> ObjectInputStream(httpServletReq.getInputStream());
>>>>
>>>>                    return (IRequest) reqStream.readObject();
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> exception returned by this when problem occurs
>>>>
>>>>
>>>>
>>>> java.lang.NullPointerException
>>>>
>>>>                at
>>>>
> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1820)
>>>>                at
>>>>
>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719
>>>> )
>>>>
>>>>                at
>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
>>>>
>>>>                at
>>>>
>
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
>>>>                at
>>>>
> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
>>>>                at
>>>>
>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719
>>>> )
>>>>
>>>>                at
>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
>>>>
>>>>                at
>>>> java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
>>>>
>>>>
>>>>
>>>> Any idea to resolve this problem is highly appreciated!
>>>>
>>>>
>>>>
>>>> Thanks
>>>>
>>>> Valli
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> ---------------------------------------------------------
>>> Raymond Kroeker
>>>
>>>
---------------------------------------------------------------------
>>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>>
>>>
>>>
>>>
---------------------------------------------------------------------
>>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>>
>>>
>>
>>
>> --
>> ---------------------------------------------------------
>> Raymond Kroeker
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>
>>
> 
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Mime
View raw message