[ https://issues.apache.org/jira/browse/AXIS2-5301?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13264337#comment-13264337 ]
Andreas Veithen commented on AXIS2-5301: ---------------------------------------- With AXIOM-417 implemented, the OOM error would now be: java.lang.OutOfMemoryError: Java heap space at org.apache.axiom.util.blob.MemoryBlob.addBuffer(MemoryBlob.java:160) at org.apache.axiom.util.blob.MemoryBlob$OutputStreamImpl.write(MemoryBlob.java:51) at org.apache.axiom.util.base64.Base64DecodingOutputStreamWriter.doWrite(Base64DecodingOutputStreamWriter.java:37) at org.apache.axiom.util.base64.AbstractBase64DecodingWriter.decode(AbstractBase64DecodingWriter.java:100) at org.apache.axiom.util.base64.AbstractBase64DecodingWriter.write(AbstractBase64DecodingWriter.java:57) at org.apache.axiom.util.base64.AbstractBase64DecodingWriter.write(AbstractBase64DecodingWriter.java:39) at com.ctc.wstx.sr.BasicStreamReader.readAndWriteText(BasicStreamReader.java:5024) at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:1355) at org.apache.axiom.util.stax.dialect.Woodstox4StreamReaderWrapper.writeTextTo(Woodstox4StreamReaderWrapper.java:135) at org.apache.axiom.util.stax.XMLStreamReaderUtils.writeTextTo(XMLStreamReaderUtils.java:285) at org.apache.axiom.om.impl.llom.SwitchingWrapper.writeTextTo(SwitchingWrapper.java:419) at org.apache.axiom.util.stax.XMLStreamReaderUtils.writeTextTo(XMLStreamReaderUtils.java:285) at org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(XMLStreamReaderUtils.java:237) at com.sample.sample.sampleservice.SampleServiceStub$SampleResponseType$Factory.parse(SampleServiceStub.java:749) at com.sample.sample.sampleservice.SampleServiceStub$SampleResponse$Factory.parse(SampleServiceStub.java:2002) at com.sample.sample.sampleservice.SampleServiceStub.fromOM(SampleServiceStub.java:2109) at com.sample.sample.sampleservice.SampleServiceStub.sampleRequest(SampleServiceStub.java:193) at com.sample.sampleservice.client.Client.main(Client.java:46) This is what is expected in this case (where the decoded base64 data doesn't fit into memory). > Axis2 MTOM client outof memory error when downloading file from service > ----------------------------------------------------------------------- > > Key: AXIS2-5301 > URL: https://issues.apache.org/jira/browse/AXIS2-5301 > Project: Axis2 > Issue Type: Bug > Components: adb, databinding > Affects Versions: 1.6.1 > Environment: Windows XP , Axis2 1.6.1, JDK 1.5 > Reporter: Sridhar Ratna > Labels: file_download_service, large_file_download, > stream_copy_exception, webservice_download_client > Attachments: SampleService.zip, SampleServiceClient.zip > > > I am trying to upload and download large binary files with axis2 using MTOM. > I am able to upload upto 2GB file without any memory issue either at server > side or client side. But when downloading file from server to client, client > is getting out of memory, though the server is sending a stream. > When the response received at client side, javax.activation.Datahandler is > embedded in the response which is a pointer to InputStream. Ideallly it > should not give out of memory. And this is the same mechanism while > uploading, and there is no problem at that end. > Seems to be a bug at client side handling of large documents in response > stream. > WSDL is > <?xml version="1.0" encoding="UTF-8"?> > <wsdl:definitions targetNamespace="http://sample.com/sample/SampleService" > xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" > xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" > xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" > xmlns:ns1="http://org.apache.axis2/xsd" > xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" > xmlns:ax21="http://sample.com/sample/SampleService/xsd" > xmlns:ns="http://sample.com/sample/SampleService" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> > <wsdl:documentation> > Please Type your service description here > </wsdl:documentation> > <wsdl:types> > <xs:schema elementFormDefault="qualified" > targetNamespace="http://sample.com/sample/SampleService"> > > <xs:complexType name="SampleRequestType"> > <xs:sequence> > <xs:element maxOccurs="1" minOccurs="1" > name="fileName" type="xs:string"/> > <xs:element maxOccurs="1" minOccurs="0" > name="contentType" type="xs:string"/> > </xs:sequence> > </xs:complexType> > <xs:complexType name="SampleResponseType"> > <xs:sequence> > <xs:element maxOccurs="1" minOccurs="1" name="fileName" > type="xs:string"/> > <xs:element maxOccurs="1" minOccurs="0" name="content" > type="xs:base64Binary"/> > </xs:sequence> > </xs:complexType> > > <xs:element name="SampleRequest" > type="ns:SampleRequestType"/> > <xs:element name="SampleResponse" > type="ns:SampleResponseType"/> > </xs:schema> > </wsdl:types> > <wsdl:message name="SampleResponse"> > <wsdl:part name="parameters" element="ns:SampleResponse"> > </wsdl:part> > </wsdl:message> > <wsdl:message name="SampleRequest"> > <wsdl:part name="parameters" element="ns:SampleRequest"> > </wsdl:part> > </wsdl:message> > <wsdl:portType name="SampleServicePortType"> > <wsdl:operation name="SampleRequest"> > <wsdl:input message="ns:SampleRequest" wsaw:Action="urn:SampleRequest"> > </wsdl:input> > <wsdl:output message="ns:SampleResponse" > wsaw:Action="urn:SampleResponse"> > </wsdl:output> > </wsdl:operation> > </wsdl:portType> > <wsdl:binding name="SampleServiceHttpBinding" > type="ns:SampleServicePortType"> > <http:binding verb="POST"/> > <wsdl:operation name="SampleRequest"> > <http:operation location="SampleRequest"/> > <wsdl:input> > <mime:content part="parameters" type="text/xml"/> > </wsdl:input> > <wsdl:output> > <mime:content part="parameters" type="text/xml"/> > </wsdl:output> > </wsdl:operation> > </wsdl:binding> > <wsdl:binding name="SampleServiceSoap12Binding" > type="ns:SampleServicePortType"> > <soap12:binding style="document" > transport="http://schemas.xmlsoap.org/soap/http"/> > <wsdl:operation name="SampleRequest"> > <soap12:operation soapAction="urn:SampleRequest" style="document"/> > <wsdl:input> > <soap12:body use="literal"/> > </wsdl:input> > <wsdl:output> > <soap12:body use="literal"/> > </wsdl:output> > </wsdl:operation> > </wsdl:binding> > <wsdl:binding name="SampleServiceSoap11Binding" > type="ns:SampleServicePortType"> > <soap:binding style="document" > transport="http://schemas.xmlsoap.org/soap/http"/> > <wsdl:operation name="SampleRequest"> > <soap:operation soapAction="urn:SampleRequest" style="document"/> > <wsdl:input> > <soap:body use="literal"/> > </wsdl:input> > <wsdl:output> > <soap:body use="literal"/> > </wsdl:output> > </wsdl:operation> > </wsdl:binding> > <wsdl:service name="SampleService"> > <wsdl:port name="SampleServiceHttpSoap12Endpoint" > binding="ns:SampleServiceSoap12Binding"> > <soap12:address > location="http://localhost:8080/SampleService/services/SampleService.SampleServiceHttpSoap12Endpoint/"/> > </wsdl:port> > <wsdl:port name="SampleServiceHttpSoap11Endpoint" > binding="ns:SampleServiceSoap11Binding"> > <soap:address > location="http://localhost:8080/SampleService/services/SampleService.SampleServiceHttpSoap11Endpoint/"/> > </wsdl:port> > <wsdl:port name="SampleServiceHttpEndpoint" > binding="ns:SampleServiceHttpBinding"> > <http:address > location="http://localhost:8080/SampleService/services/SampleService.SampleServiceHttpEndpoint/"/> > </wsdl:port> > </wsdl:service> > </wsdl:definitions> > and the service class > public class SampleService implements SampleServiceSkeletonInterface { > public SampleResponse sampleRequest(SampleRequest req) { > try { > SampleResponse response = new SampleResponse(); > SampleResponseType type = new SampleResponseType(); > FileInputStream fis = new > FileInputStream("c:/tmp/"+req.getSampleRequest().getFileName()); > DataHandler dh = new DataHandler(new > StreamDataSource(fis, req.getSampleRequest().getContentType())); > type.setContent(dh); > type.setFileName(req.getSampleRequest().getFileName()); > response.setSampleResponse(type); > return response; > } catch (FileNotFoundException e) { > e.printStackTrace(); > } > > return null; > } > } > And the client code > public static void main(String[] args) throws Exception{ > SampleServiceStub stub = new SampleServiceStub(); > > > stub._getServiceClient().getOptions().setProperty(Constants.Configuration.ENABLE_MTOM, > Constants.VALUE_TRUE); > > //stub._getServiceClient().getOptions().setProperty(Constants.Configuration.ENABLE_SWA, > Constants.VALUE_TRUE); > > stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(1000*60*10 ); > > > //stub._getServiceClient().getOptions().setProperty(Constants.Configuration.CACHE_ATTACHMENTS, > Constants.VALUE_TRUE); > > //stub._getServiceClient().getOptions().setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR, > "c:/tmp"); > > //stub._getServiceClient().getOptions().setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD, > "4000"); > SampleRequestType type = new SampleRequestType(); > type.setFileName("server.log"); > type.setContentType("text/plain"); > SampleRequest request = new SampleRequest(); > request.setSampleRequest(type); > SampleResponse response = stub.sampleRequest(request); > > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org For additional commands, e-mail: java-dev-h...@axis.apache.org