在Spring Web Services Framework中流式传输MTOM Web服务

时间:2009-12-03 20:52:32

标签: java soap spring-ws mtom

我想使用MTOM和Spring WS将大文件从服务器发送到客户端。我意识到这不是这类事情的最佳方法,但这是一项要求。我有MTOM设置,它适用于50mb左右的小文件。我遇到较大文件的内存不足错误,并通过更改不同的堆空间大小,我可以发送稍大的文件,但没有接近1GB。 1GB是我的测试用例。如何将MTOM服务从服务器流式传输或分块到客户端?我正在使用Java 6更新17,Tomcat 6和Spring WS 1.5.7以及SaajSoapMessageFactory。

我找到了一个使用jax-ws进行流式传输的示例,但我不确定如何将其合并到Spring WS端点中。

Optimizing Binary Data Transmission Using MTOM/XOP

1 个答案:

答案 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就会自动使用临时文件来备份大文档上传。