我想使用MTOM和Spring WS将大文件从服务器发送到客户端。我意识到这不是这类事情的最佳方法,但这是一项要求。我有MTOM设置,它适用于50mb左右的小文件。我遇到较大文件的内存不足错误,并通过更改不同的堆空间大小,我可以发送稍大的文件,但没有接近1GB。 1GB是我的测试用例。如何将MTOM服务从服务器流式传输或分块到客户端?我正在使用Java 6更新17,Tomcat 6和Spring WS 1.5.7以及SaajSoapMessageFactory。
我找到了一个使用jax-ws进行流式传输的示例,但我不确定如何将其合并到Spring WS端点中。
答案 0 :(得分:5)
昨天,我在上传大文件方面遇到了同样的问题。最后,我能够找到解决方案。 Spring WS有一个名为org.springframework.ws.soap.axiom.AxiomSoapMessageFactory
的自定义Axiom消息工厂,它可以在上传大文件时使用文件而不是内存。您的配置中唯一要做的更改是使用您的自定义属性定义bean。
<bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory">
<property name="payloadCaching" value="false" />
<property name="attachmentCaching" value="true" />
<property name="attachmentCacheThreshold" value="1024"/>
</bean>
一旦你在classpath中有了这个配置和Axiom类,Spring-ws就会自动使用临时文件来备份大文档上传。