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
Post a Comment