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:ol...@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 2063142...@archwireless.net > > -----Original Message----- > From: natarajan_va...@emc.com [mailto:natarajan_va...@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:pke...@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 2063142...@archwireless.net > > -----Original Message----- > From: natarajan_va...@emc.com [mailto:natarajan_va...@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: raykroe...@gmail.com [mailto:raykroe...@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_va...@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: raykroe...@gmail.com [mailto:raykroe...@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_va...@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: raykroe...@gmail.com [mailto:raykroe...@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_va...@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-unsubscr...@hc.apache.org >>> For additional commands, e-mail: httpclient-users-h...@hc.apache.org >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org >>> For additional commands, e-mail: httpclient-users-h...@hc.apache.org >>> >>> >> >> >> -- >> --------------------------------------------------------- >> Raymond Kroeker >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org >> For additional commands, e-mail: httpclient-users-h...@hc.apache.org >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org >> For additional commands, e-mail: httpclient-users-h...@hc.apache.org >> >> > > > --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org