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