Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-5694

axis2 reading DataHandler in client ws causing: DataHandler.getorg.apache.axiom.om.OMException: java.io.IOException: Attempted read on closed stream.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.6.2, 1.6.4, 1.7.0
    • 1.8.0
    • adb, client-api

    Description

      I use MTOM to send files back and forward. I use the DataHandler. On one side:

      File serverFile = new File(finalPath.toString());
      DataSource serverDs = new FileDataSource(serverFile);;
      dh = new DataHandler(serverDs);

      return new.RetrFileResponse().setRetrFileResponse(dh);

      ... on the other side:

      OutputStream os = new FileOutputStream(new File("C:/TEMP/" + finalFileName));
      OMAbstractFactory.getOMFactory());
      DataSource ds = rfr.getRetrFileResponse().getDataSource();
      rfr.getRetrFileResponse().writeTo(os);
      os.flush();
      os.close();

      It works perfectly well in the upload service (client to server).
      But the download version (server to client) makes the above mentioned exception (on the call '.getDataSource()').

      Maybe it is related to jira issues:
      https://issues.apache.org/jira/browse/AXIS2-5487
      https://issues.apache.org/jira/browse/AXIS2-5469
      ? If yes, where can I get Axis 1.7? Seems not to be downloadable yet?
      If not, how can I keep the stream open? And anyway, the datas should be in the soap message! So I don't see why it can't retrieve the datas though the stream is closed on the server!

      Can anybody help me please? I'd love to give further information!

      Here is the whole exception stack:

      ERROR [JHttp-38] 2015-04-09 20:39:24.317 ERROR
      org.apache.axiom.om.OMException: java.io.IOException: Attempted read on closed stream.
      at org.apache.axiom.attachments.PartContentFactory.createPartContent(PartContentFactory.java:153) ~[axiom-api-1.2.13.jar:1.2.13]
      at org.apache.axiom.attachments.PartImpl.fetch(PartImpl.java:176) ~[axiom-api-1.2.13.jar:1.2.13]
      at org.apache.axiom.attachments.PartImpl.getContent(PartImpl.java:149) ~[axiom-api-1.2.13.jar:1.2.13]
      at org.apache.axiom.attachments.PartImpl.getDataSource(PartImpl.java:234) ~[axiom-api-1.2.13.jar:1.2.13]
      at org.apache.axiom.attachments.PartDataHandler.getDataSource(PartDataHandler.java:50) ~[axiom-api-1.2.13.jar:1.2.13]
      at com.iflow.ws.server.octipus.WsOctiHello.testServiceRetrFile(WsOctiHello.java:571) ~[octipus.jar:na]
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75]
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_75]
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_75]
      at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_75]
      at com.groiss.servlet.Dispatcher.service(Dispatcher.java:394) ~[ep.jar:9.0.18382]
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api.jar:3.1.0]
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224]
      at com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:293) [pjl-comp-filter-1.8.1.jar:na]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224]
      at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:198) [javamelody-1.53.0.jar:na]
      at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:176) [javamelody-1.53.0.jar:na]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:224) [websocket-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) [jetty-security-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.Server.handle(Server.java:497) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) [jetty-io-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.9.v20150224.jar:9.2.9.v20150224]
      at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.9.v20150224.jar:9.2.9.v20150224]
      at java.lang.Thread.run(Unknown Source) [na:1.7.0_75]
      Caused by: java.io.IOException: Attempted read on closed stream.
      at org.apache.commons.httpclient.AutoCloseInputStream.isReadAllowed(AutoCloseInputStream.java:183) ~[commons-httpclient-3.1.jar:na]
      at org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:107) ~[commons-httpclient-3.1.jar:na]
      at java.io.FilterInputStream.read(Unknown Source) ~[na:1.7.0_75]
      at org.apache.axiom.om.util.DetachableInputStream.read(DetachableInputStream.java:147) ~[axiom-api-1.2.13.jar:1.2.13]
      at org.apache.james.mime4j.io.BufferedLineReaderInputStream.fillBuffer(BufferedLineReaderInputStream.java:111) ~[apache-mime4j-core-0.7.2.jar:0.7.2]
      at org.apache.james.mime4j.io.MimeBoundaryInputStream.fillBuffer(MimeBoundaryInputStream.java:223) ~[apache-mime4j-core-0.7.2.jar:0.7.2]
      at org.apache.james.mime4j.io.MimeBoundaryInputStream.read(MimeBoundaryInputStream.java:157) ~[apache-mime4j-core-0.7.2.jar:0.7.2]
      at org.apache.james.mime4j.io.BufferedLineReaderInputStream.fillBuffer(BufferedLineReaderInputStream.java:111) ~[apache-mime4j-core-0.7.2.jar:0.7.2]
      at org.apache.james.mime4j.io.BufferedLineReaderInputStream.read(BufferedLineReaderInputStream.java:158) ~[apache-mime4j-core-0.7.2.jar:0.7.2]
      at org.apache.james.mime4j.io.LineReaderInputStreamAdaptor.read(LineReaderInputStreamAdaptor.java:67) ~[apache-mime4j-core-0.7.2.jar:0.7.2]
      at java.io.FilterInputStream.read(Unknown Source) ~[na:1.7.0_75]
      at org.apache.axiom.attachments.impl.BufferUtils.inputStream2FileOutputStream(BufferUtils.java:183) ~[axiom-api-1.2.13.jar:1.2.13]
      at org.apache.axiom.attachments.impl.BufferUtils.inputStream2OutputStream(BufferUtils.java:69) ~[axiom-api-1.2.13.jar:1.2.13]
      at org.apache.axiom.attachments.PartContentOnFile.<init>(PartContentOnFile.java:62) ~[axiom-api-1.2.13.jar:1.2.13]
      at org.apache.axiom.attachments.PartContentFactory.createPartContent(PartContentFactory.java:134) ~[axiom-api-1.2.13.jar:1.2.13]
      ... 38 common frames omitted

      ... and here is the wsdl; upladFile is working perfectly. retrFile is not!

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      <wsdl:definitions
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
      xmlns:tns="http://.../"
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      targetNamespace="http://.../">

      <wsdl:types>
      <xsd:schema targetNamespace="http://.../"
      xmlns:xmime="http://www.w3.org/2005/05/xmlmime">

      <xsd:element name="SayHelloRequest">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="firstname" minOccurs="0" maxOccurs="1" type="xsd:string"/>
      <xsd:element name="lastname" minOccurs="0" maxOccurs="1" type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
      <xsd:element name="SayHelloResponse">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="responseMsg" type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>

      <xsd:element name="MoveFileRequest">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="fileName" minOccurs="0" maxOccurs="1" type="xsd:string"/>
      <xsd:element name="filePath" minOccurs="0" maxOccurs="1" type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
      <xsd:element name="MoveFileResponse">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="responseFile" minOccurs="0" maxOccurs="1" type="xsd:base64Binary"/>
      <xsd:element name="responseCode" type="xsd:int"/>
      <xsd:element name="errorMsg" type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>

      <xsd:element name="RetrFileRequest">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="fileName" minOccurs="0" maxOccurs="1" type="xsd:string"/>
      <xsd:element name="filePath" minOccurs="0" maxOccurs="1" type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
      <xsd:element name="RetrFileResponse" type="xsd:base64Binary"/>

      <xsd:element name="UploadFileRequest">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="payload" minOccurs="0" maxOccurs="1" type="xsd:base64Binary"/>
      <xsd:element name="fileName" minOccurs="0" maxOccurs="1" type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
      <xsd:element name="UploadFileResponse">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="responseCode" type="xsd:int"/>
      <xsd:element name="errorMsg" type="xsd:string"/>
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>

      </xsd:schema>
      </wsdl:types>

      <wsdl:message name="SayHelloInput">
      <wsdl:part element="tns:SayHelloRequest" name="parameters"/>
      </wsdl:message>
      <wsdl:message name="SayHelloOutput">
      <wsdl:part element="tns:SayHelloResponse" name="parameters"/>
      </wsdl:message>

      <wsdl:message name="MoveFileInput">
      <wsdl:part element="tns:MoveFileRequest" name="parameters"/>
      </wsdl:message>
      <wsdl:message name="MoveFileOutput">
      <wsdl:part element="tns:MoveFileResponse" name="parameters"/>
      </wsdl:message>

      <wsdl:message name="RetrFileInput">
      <wsdl:part element="tns:RetrFileRequest" name="parameters"/>
      </wsdl:message>
      <wsdl:message name="RetrFileOutput">
      <wsdl:part element="tns:RetrFileResponse" name="parameters"/>
      </wsdl:message>

      <wsdl:message name="UploadFileInput">
      <wsdl:part element="tns:UploadFileRequest" name="parameters"/>
      </wsdl:message>
      <wsdl:message name="UploadFileOutput">
      <wsdl:part element="tns:UploadFileResponse" name="parameters"/>
      </wsdl:message>

      <wsdl:portType name="OctiHelloPort">
      <wsdl:operation name="sayHello">
      <wsdl:input message="tns:SayHelloInput"/>
      <wsdl:output message="tns:SayHelloOutput"/>
      </wsdl:operation>
      <wsdl:operation name="moveFile">
      <wsdl:input message="tns:MoveFileInput"/>
      <wsdl:output message="tns:MoveFileOutput"/>
      </wsdl:operation>

      <wsdl:operation name="retrFile">
      <wsdl:input message="tns:RetrFileInput"/>
      <wsdl:output message="tns:RetrFileOutput"/>
      </wsdl:operation>

      <wsdl:operation name="uploadFile">
      <wsdl:input message="tns:UploadFileInput"/>
      <wsdl:output message="tns:UploadFileOutput"/>
      </wsdl:operation>
      </wsdl:portType>

      <wsdl:binding name="OctiHelloSOAPBinding" type="tns:OctiHelloPort">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="sayHello">
      <soap:operation soapAction="http://.../sayHello"/>
      <wsdl:input>
      <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
      <soap:body use="literal"/>
      </wsdl:output>
      </wsdl:operation>

      <wsdl:operation name="moveFile">
      <soap:operation soapAction="http://.../moveFile"/>
      <wsdl:input>
      <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
      <soap:body use="literal"/>
      </wsdl:output>
      </wsdl:operation>

      <wsdl:operation name="uploadFile">
      <soap:operation soapAction="http://.../uploadFile"/>
      <wsdl:input>
      <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
      <soap:body use="literal"/>
      </wsdl:output>
      </wsdl:operation>

      <wsdl:operation name="retrFile">
      <soap:operation soapAction="http://.../retrFile"/>
      <wsdl:input>
      <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
      <soap:body use="literal"/>
      </wsdl:output>
      </wsdl:operation>

      </wsdl:binding>

      <wsdl:service name="OctiHelloService">
      <wsdl:port binding="tns:OctiHelloSOAPBinding" name="OctiHelloSOAP">
      <soap:address location="http://localhost:8180/wf/services.axis2/OctiHelloService"/>
      </wsdl:port>
      </wsdl:service>
      </wsdl:definitions>

      Attachments

        Activity

          People

            veithen Andreas Veithen
            graitery Daniel Minder
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: