java - Out of memory error when marshalling large attachments -


i'm using spring ws on server side axiomsoapmessagefactory:

<bean id="messagefactory" class="org.springframework.ws.soap.axiom.axiomsoapmessagefactory">        <property name="payloadcaching" value="true"/>         <!-- need figure out appropriate directory -->        <property name="attachmentcachedir" value="..."/>     </bean> 

this works fine when services ingesting message. however, when services attempt serve large message java out of memory exception. here stack trace:

java.lang.outofmemoryerror: java heap space         @ java.util.arrays.copyof(arrays.java:2786)         @ java.io.bytearrayoutputstream.write(bytearrayoutputstream.java:94)         @ org.apache.axiom.mime.impl.axiom.multipartwriterimpl$partoutputstream.write(multipartwriterimpl.java:42)         @ javax.activation.datahandler.writeto(datahandler.java:294)         @ org.apache.axiom.mime.impl.axiom.multipartwriterimpl.writepart(multipartwriterimpl.java:116)         @ org.apache.axiom.om.impl.ommultipartwriter.writepart(ommultipartwriter.java:136)         @ org.apache.axiom.om.impl.mimeoutpututils.writesoapwithattachmentsmessage(mimeoutpututils.java:269)         @ org.springframework.ws.soap.axiom.axiomsoapmessage.writeswamessage(axiomsoapmessage.java:298)         @ org.springframework.ws.soap.axiom.axiomsoapmessage.writeto(axiomsoapmessage.java:248)         @ org.springframework.ws.server.messagedispatcher.getmessagecontent(messagedispatcher.java:192)         @ org.springframework.ws.server.messagedispatcher.receive(messagedispatcher.java:174)         @ org.springframework.ws.transport.support.webservicemessagereceiverobjectsupport.handleconnection(webservicemessagereceiverobjectsupport.java:88)         @ org.springframework.ws.transport.http.webservicemessagereceiverhandleradapter.handle(webservicemessagereceiverhandleradapter.java:57)         @ org.springframework.ws.transport.http.errorawarewebservicemessagereceiverhandleradapter.handle(errorawarewebservicemessagereceiverhandleradapter.java:42)         @ org.springframework.ws.transport.http.messagedispatcherservlet2.doservice(messagedispatcherservlet2.java:148)         @ org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:571)         @ org.springframework.web.servlet.frameworkservlet.dopost(frameworkservlet.java:511)         @ javax.servlet.http.httpservlet.service(httpservlet.java:637)         @ javax.servlet.http.httpservlet.service(httpservlet.java:717)         @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:290)         @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)         @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:233)         @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:191)         @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:127)         @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:102)         @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:109)         @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:298)         @ org.apache.coyote.http11.http11processor.process(http11processor.java:857)         @ org.apache.coyote.http11.http11protocol$http11connectionhandler.process(http11protocol.java:588)         @ org.apache.tomcat.util.net.jioendpoint$worker.run(jioendpoint.java:489)         @ java.lang.thread.run(thread.java:680) 

the problem seems services attempting read whole attachment memory prior writing out. there way stream attachment?

i'm running in tomcat instance on osx 10.6.7 java --version =

java version "1.6.0_24" java(tm) se runtime environment (build 1.6.0_24-b07-334-10m3326) java hotspot(tm) 64-bit server vm (build 19.1-b02-334, mixed mode)

have tried changing following parameters allow more memory?

-xms512m -xmx1024m -xx:permsize=256m


Comments