On Wed, Apr 22, 2009 at 08:53:45AM -0400, Jeudy, Guillaume wrote:
>  
> 
> ________________________________
> 
> From: Oleg Kalnichevski [mailto:ol...@apache.org]
> Sent: Wed 4/22/2009 6:01 AM
> To: HttpClient User Discussion
> Subject: Re: Weird problems with httpclient 4.0beta2 and httpcore 4.0
> 
> 
> 
> On Tue, Apr 21, 2009 at 05:01:45PM -0400, Sam Berlin wrote:
> > >
> > >
> > > Is using a ResponseHandler the reason why the HttpEntity response is
> > > consumed eagerly in DefaultHttpClient?
> >
> >
> > Yes.  I haven't used ResponseHandler's myself, but what I remember from
> > their introduction is that the concept is that a ResponseHandler takes an
> > HttpResponse and converts it to an Object.   In order to construct the
> > object, it must read the response.  The idea behind ResponseHandler is that
> > it has the "read the response & perform some logic based on it" built in, so
> > that you can reuse the logic easily.  If you have no need to perform any
> > action based on the response, don't supply a ResponseHandler.  If you do
> > have some action that would be performed on a response, it should all be
> > done within the ResponseHandler's handleResponse.
> >
> > I'm not sure I fully understand the stack trace, though -- is that from
> > after execute on HttpClient has returned, or during it?  Is the exception
> > being triggered within a ResponseHandler's handleResponse method?  If so,
> > this may be a different issue.  HttpClient 4 has an "EofSensorInputStream"
> > that will automatically close the stream once you read to the end of the
> > response's content length.  This may be an issue that the Decoder.peek is
> > trying to peek beyond the end of the stream.
> >
> > Sam
> >
> >
> 
> >I think the cause of the problem is that the StAX builder is trying to read
> >from a closed input stream for some reason. I guess HttpClient 3.1 was more
> >lenient about such cases. You should review and possibly revise the test 
> >case.
> >
> >Oleg
> 
> Sorry if I wasn't clear, the stacktrace comes after HttpClient execute() call 
> returned and the ResponseHandler was executed. I think the HttpClient 3.1 
> populates the response in HttpMethodBase and that response is non-repeatable 
> when getResponseAsStream() is called. That is what the axis2 transport was 
> doing. In light of this
> and in order to replicate previous functionality I am forced not to use 
> HttpClient 4.0 ResponseHandler pattern, I will have to
> handle the response separately. The upper layer (OutInAxisOperationClient) 
> expects an InputStream returned from the transport operation so I can't use a 
> ResponseHandler in this case. 
> 
> My only concern is how to ensure the underlying connection is released? Is 
> reading through the end of the InputStream enough to release the connection? 
> Or should I absolutely call entity.consumeContent() in order to achieve this 
> ? The upper layer is not aware of HttpEntity object because it is transport 
> protocol agnostic.
> 

Just make sure the input stream is always read until the end (-1) or closed if 
no longer needed. Closing the stream in a finally clause should probably be the 
best option.

Hope this helps

Oleg



> Guillaume
> > >
> > >
> > > See I/O exception i'm currently getting:
> > >
> > > java.io.IOException: Attempted read from closed stream.
> > >  at
> > > org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:145)
> > >  at
> > > org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:175)
> > >  at
> > > org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:178)
> > >  at com.sun.xml.fastinfoset.Decoder.peek(Decoder.java:1817)
> > >  at
> > > com.sun.xml.fastinfoset.Decoder._isFastInfosetDocument(Decoder.java:1869)
> > >  at com.sun.xml.fastinfoset.Decoder.decodeHeader(Decoder.java:1262)
> > >  at
> > > com.sun.xml.fastinfoset.stax.StAXDocumentParser.next(StAXDocumentParser.java:220)
> > >  at
> > > org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:506)
> > >  at
> > > org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:161)
> > >  at
> > > org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:156)
> > >  at
> > > org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:105)
> > >  at
> > > org.apache.axis2.fastinfoset.FastInfosetBuilder.processDocument(FastInfosetBuilder.java:57)
> > >  at
> > > org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:164)
> > >  at
> > > org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112)
> > >  at
> > > org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88)
> > >  at
> > > org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
> > >  at
> > > org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
> > >  at
> > > org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
> > >  at
> > > org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
> > >  at
> > > org.apache.axis2.fastinfoset.SimpleAddServiceStub.addStrings(SimpleAddServiceStub.java:740)
> > >  at
> > > org.apache.axis2.fastinfoset.SimpleAddServiceClient.addStrings(SimpleAddServiceClient.java:104)
> > >  at
> > > org.apache.axis2.fastinfoset.FastInfosetTest.testAdd(FastInfosetTest.java:49)
> > >  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > >  at
> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> > >  at
> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > >  at java.lang.reflect.Method.invoke(Method.java:585)
> > >  at junit.framework.TestCase.runTest(TestCase.java:168)
> > >  at junit.framework.TestCase.runBare(TestCase.java:134)
> > >  at junit.framework.TestResult$1.protect(TestResult.java:110)
> > >  at junit.framework.TestResult.runProtected(TestResult.java:128)
> > >  at junit.framework.TestResult.run(TestResult.java:113)
> > >  at junit.framework.TestCase.run(TestCase.java:124)
> > >  at junit.framework.TestSuite.runTest(TestSuite.java:232)
> > >  at junit.framework.TestSuite.run(TestSuite.java:227)
> > >  at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> > >  at junit.extensions.TestSetup$1.protect(TestSetup.java:23)
> > >  at junit.framework.TestResult.runProtected(TestResult.java:128)
> > >  at junit.extensions.TestSetup.run(TestSetup.java:27)
> > >  at
> > > org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
> > >  at
> > > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
> > >  at
> > > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> > >  at
> > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> > >  at
> > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> > >  at
> > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> > >  at
> > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> > > Apr 21, 2009 3:43:11 PM org.apache.axis2.deployment.DeploymentEngine
> > > prepareRepository
> > >
> > > Please advise,
> > > Thanks,
> > > -Guillaume
> > >
> > >
> > >
> > > ____________________________________________________________________________________________________
> > > This electronic mail (including any attachments) may contain information
> > > that is privileged, confidential, and/or otherwise protected from 
> > > disclosure
> > > to anyone other than its intended recipient(s). Any dissemination or use 
> > > of
> > > this electronic email or its contents (including any attachments) by 
> > > persons
> > > other than the intended recipient(s) is strictly prohibited. If you have
> > > received this message in error, please notify us immediately by reply 
> > > email
> > > so that we may correct our internal records. Please then delete the 
> > > original
> > > message (including any attachments) in its entirety. Thank you.
> > >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
> For additional commands, e-mail: httpclient-users-h...@hc.apache.org
> 
> 
> 
> 
> 
> 
> ____________________________________________________________________________________________________
> This electronic mail (including any attachments) may contain information that 
> is privileged, confidential, and/or otherwise protected from disclosure to 
> anyone other than its intended recipient(s). Any dissemination or use of this 
> electronic email or its contents (including any attachments) by persons other 
> than the intended recipient(s) is strictly prohibited. If you have received 
> this message in error, please notify us immediately by reply email so that we 
> may correct our internal records. Please then delete the original message 
> (including any attachments) in its entirety. Thank you.

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

Reply via email to