Я хотел бы отправить большие файлы от сервера до клиента, использующего MTOM и Spring WS. Я понимаю, что это не лучший подход для этого типа вещи, но это - требование. У меня есть настроенный MTOM, и он работает отлично для маленьких файлов приблизительно 50 МБ. Я испытываю из ошибок памяти для больших файлов и путем изменения различных размеров пространства "кучи", я могу отправить немного большие файлы, но ничто близко к 1 ГБ. 1 ГБ является моим тестовым сценарием для этого. Как я могу передать потоком или разделить сервис MTOM на блоки от сервера до клиента? Я использую обновление Java 6 17, Tomcat 6 и Spring WS 1.5.7 с SaajSoapMessageFactory.
Я нашел пример потоковой передачи с jax-ws, но я не уверен, как включить это в Spring конечная точка WS.
Вчера у меня возникла та же проблема с загрузкой больших файлов. Наконец я смог найти решение для этого. 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 автоматически использует временные файлы для копирования больших загрузок документов.