Hi,

I am getting OutOfMemoryError when using WebServiceTemplate attachments.

I am using AxiomSoapMessageFactory and the bean configuration is:

<bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoap MessageFactory">
<!-- <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMe ssageFactory"> -->
<description>A message factory to support SOAP 1.2</description>
<property name="soapVersion">
<util:constant static-field="org.springframework.ws.soap.SoapVersion.SOA P_11" />
</property>
<property name="attachmentCaching" value="true"></property>
<!-- <property name="attachmentCacheDir" value=""></property> -->
</bean>

On the server side, SaajSoapMessageFactory is streaming attachments to a tmp file as you would expect, but attachmentCaching=true is not working when used on the client side.

BTW: I am not using MTOM - I do not have much control on the WSDL definition.

Any idea?

Code:
java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2786)
	at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
	at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:61)
	at org.springframework.ws.transport.TransportOutputStream.write(TransportOutputStream.java:64)
	at javax.activation.DataHandler.writeTo(DataHandler.java:294)
	at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:452)
	at org.apache.axiom.om.impl.MIMEOutputUtils.writeBodyPart(MIMEOutputUtils.java:216)
	at org.apache.axiom.om.impl.MIMEOutputUtils.writeDataHandlerWithAttachmentsMessage(MIMEOutputUtils.java:312)
	at org.apache.axiom.om.impl.MIMEOutputUtils.writeSOAPWithAttachmentsMessage(MIMEOutputUtils.java:259)
	at org.springframework.ws.soap.axiom.AxiomSoapMessage.writeSwAMessage(AxiomSoapMessage.java:328)
	at org.springframework.ws.soap.axiom.AxiomSoapMessage.writeTo(AxiomSoapMessage.java:278)
	at org.springframework.ws.transport.AbstractWebServiceConnection.send(AbstractWebServiceConnection.java:45)
	at org.springframework.ws.client.core.WebServiceTemplate.sendRequest(WebServiceTemplate.java:622)
	at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:585)
	at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537)
	at learn.WebServiceTemplateTest.test(WebServiceTemplateTest.java:36)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)