【问题标题】:Stream MTOM Web Services in Spring Web Services FrameworkSpring Web 服务框架中的流式传输 MTOM Web 服务
【发布时间】:2009-12-03 20:52:31
【问题描述】:

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

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

Optimizing Binary Data Transmission Using MTOM/XOP

【问题讨论】:

  • 这个好运吗?我还在为这个苦苦挣扎……

标签: java soap spring-ws mtom


【解决方案1】:

昨天,我在上传大文件时遇到了同样的问题。最后,我能够找到解决方案。 Spring WS 有一个定制的 Axiom 消息工厂,名为org.springframework.ws.soap.axiom.AxiomSoapMessageFactory,它可以在上传大文件时使用文件而不是内存。您的配置中要做的唯一更改是使用您的自定义属性定义 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>

一旦您在类路径中获得了此配置和 Axiom 类,Spring-ws 会自动使用临时文件来搭载大型文档上传。

【讨论】:

  • 我使用 Axis2 1.5.1 在客户端解决了我的问题。我相信它也使用公理。
  • 使用 MTOM 和 spring 和 websphere 上传大文件的最佳组合/方法是什么? SAAJ 或 AXIOM 或 JAX-WS 或 CXF 或 http 客户端?或者还有其他更好的吗?更好的是性能,内存使用,上传时间。 @DanPolites
  • 请对此进行扩展,您能否提供一个客户端上传的示例