Hello,
my apologies for cross-posting, but I don't know if the problem we
face is an Axiom or an Axis2 issue.
We have a Web Service that returns some data as an element of XML
Schema type base64Binary. The data may be large. (We will eventually
have to look into MTOM, but right now the data is embedded into the
SOAP document.)
We prepared the client stub using Axis2's code generator (Axis2 1.3,
sync style only). For some reasons, we preferred a stub without
databinding, whence we handle Axiom's OMElements directly. Everything
seemed to work out ok until the data we sent became large: Suddenly
we encountered WstxIOExceptions ("Attempted read on closed stream")
in the client code when we call reponse.getFirstElement().getText().
Is there anything special you need to be aware of when accessing
large text nodes via the OMElement interface?
I put the code for a test service and client with junit test on the
web at <URL:http://festus.textgrid.it.fh-worms.de/misc/testcases/
Axis2_LargeBase64.zip>. It shows the error appears as soon as the
string that is base64 encoded is longer than 2850 bytes. Then we get
the attached stacktrace.
The catch is: If we generate the client with ADB binding, then it has
no problems parsing long messages. (The zip file at the URL above
contains also a testcase for the ADB binding that is analogous to the
"purely OM based" test case.) We did not dissect and re-engineer the
generated code in detail yet, but it is obviously possible to handle
large data with Axiom.
Can anyone tell if we do something wrong in our code? Or is there a
bug in Axiom or Axis2 that the ADB binding happens to work around?
We appreciate any help.
Regards
Christoph
---
FH Worms - University of Applied Sciences
Erenburgerstr. 19, 67549 Worms, Germany
org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxIOException: Attempted
read on closed stream.
at
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:239)
at
org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:552)
at
org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:134)
at
org.apache.axiom.om.impl.llom.OMElementImpl.getText(OMElementImpl.java:711)
at
test.axis2.lb64.client.om.junit.LB64OMTestCase.dummy(LB64OMTestCase.java:55)
at
test.axis2.lb64.client.om.junit.LB64OMTestCase.testDummy(LB64OMTestCase.java:71)
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:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
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)
Caused by: com.ctc.wstx.exc.WstxIOException: Attempted read on closed stream.
at com.ctc.wstx.sr.StreamScanner.throwFromIOE(StreamScanner.java:683)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1086)
at
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:153)
... 23 more
Caused by: java.io.IOException: Attempted read on closed stream.
at
org.apache.commons.httpclient.AutoCloseInputStream.isReadAllowed(AutoCloseInputStream.java:165)
at
org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:106)
at java.io.FilterInputStream.read(FilterInputStream.java:111)
at java.io.PushbackInputStream.read(PushbackInputStream.java:161)
at java.io.FilterInputStream.read(FilterInputStream.java:90)
at com.ctc.wstx.io.UTF8Reader.loadMore(UTF8Reader.java:362)
at com.ctc.wstx.io.UTF8Reader.read(UTF8Reader.java:110)
at com.ctc.wstx.io.MergedReader.read(MergedReader.java:101)
at com.ctc.wstx.io.ReaderSource.readInto(ReaderSource.java:84)
at
com.ctc.wstx.io.BranchingReaderSource.readInto(BranchingReaderSource.java:57)
at
com.ctc.wstx.sr.StreamScanner.loadMoreFromCurrent(StreamScanner.java:1021)
at
com.ctc.wstx.sr.StreamScanner.loadMoreFromCurrent(StreamScanner.java:1028)
at
com.ctc.wstx.sr.StreamScanner.getNextCharFromCurrent(StreamScanner.java:786)
at
com.ctc.wstx.sr.BasicStreamReader.readEndElem(BasicStreamReader.java:3204)
at
com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2830)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1019)
... 24 more
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]