[ http://issues.apache.org/jira/browse/AXIS2-795?page=comments#action_12438988 ] Davanum Srinivas commented on AXIS2-795: ----------------------------------------
Folks, I am willing to upgrade this bug to blocker if i get a sample for us to recreate the problem. Can you please help? thanks, dims > Returning a MTOM message causes IOException (closed stream) > ----------------------------------------------------------- > > Key: AXIS2-795 > URL: http://issues.apache.org/jira/browse/AXIS2-795 > Project: Apache Axis 2.0 (Axis2) > Issue Type: Bug > Components: databinding > Affects Versions: 1.0 > Environment: JDK 1.4.2_06 > Reporter: Wolfram Kaiser > Assigned To: Thilina Gunarathne > > When accessing an attachment sent via MTOM on the client side I get the > following exception: > org.apache.axiom.om.OMException: javax.mail.MessagingException: Error in > input stream; nested exception is: > java.io.IOException: Attempted read on closed stream. > at org.apache.axiom.attachments.Attachments.getPart(Attachments.java:462) > at > org.apache.axiom.attachments.Attachments.getNextPart(Attachments.java:359) > at org.apache.axiom.attachments.Attachments.getPart(Attachments.java:324) > at > org.apache.axiom.attachments.Attachments.getDataHandler(Attachments.java:274) > at > org.apache.axiom.om.impl.mtom.MTOMStAXSOAPModelBuilder.getDataHandler(MTOMStAXSOAPModelBuilder.java:151) > at > org.apache.axiom.om.impl.llom.OMTextImpl.getDataHandler(OMTextImpl.java:341) > The client stub was generated using the default / no data binding (-> direct > Axiom access). I believe the error is in the generated stub: > public org.apache.axiom.om.OMElement echoPdf(org.apache.axiom.om.OMElement > param48) throws java.rmi.RemoteException { > ... > _messageContext.getTransportOut().getSender().cleanup(_messageContext); > return (org.apache.axiom.om.OMElement) object; > } > The cleanup() seems to close the InputStream for the PDF/attachment while the > attachment has not been loaded in Axiom. Thus, when accessing the attachment > in the OMElement returned by MyStub.echoPdf() the aforementioned exception is > thrown. I would argue that the pull mechanism of Axiom fails in cases where > the associated InputStream has been closed while the generated stub has done > its processing already. > The following simple - but rather ugly - work-around seems to solve the > problem: > public org.apache.axiom.om.OMElement echoPdf(org.apache.axiom.om.OMElement > param48) throws java.rmi.RemoteException { > ... > org.apache.axiom.om.OMElement omElement = (org.apache.axiom.om.OMElement) > object; > // retrieving the content of a OMTextNode will load the associated data > so it can be accessed > // even after the InputStream from this web service call has been closed. > omElement.getText(); // or omElement.toString(); > _messageContext.getTransportOut().getSender().cleanup(_messageContext); > return omElement; > The getText()/toString() has the effect that all binary data from the web > service call is loaded in the Axiom objects so they can be accessed in the > client code which uses the MyStub.echoPdf() method. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
