Потоковая передача веб-служб MTOM в Spring Web Services Framework
Вопрос
Я хотел бы отправить большие файлы с сервера клиенту с помощью MTOM и Spring WS.Я понимаю, что это не лучший подход для подобных вещей, но это требование.У меня настроен MTOM, и он отлично работает с небольшими файлами размером около 50 МБ.У меня возникают ошибки нехватки памяти для файлов большего размера, и, изменяя разные размеры кучи, я могу отправлять файлы немного большего размера, но не близко к 1 ГБ.1 ГБ — мой тестовый пример.Как я могу передать или разбить службу MTOM с сервера на клиент?Я использую обновление 17 для Java 6, Tomcat 6 и Spring WS 1.5.7 с SaajSoapMessageFactory.
Я нашел пример потоковой передачи с помощью jax-ws, но не знаю, как включить его в конечную точку Spring WS.
Оптимизация передачи двоичных данных с использованием MTOM/XOP
Решение
Вчера у меня возникла та же проблема с загрузкой больших файлов.Наконец я смог найти решение этой проблемы.Spring WS имеет настроенную фабрику сообщений Axiom под названием org.springframework.ws.soap.axiom.AxiomSoapMessageFactory
который может использовать файл вместо памяти при загрузке больших файлов.Единственное изменение, которое необходимо внести в вашу конфигурацию, — это определить компонент с вашими пользовательскими свойствами.
<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 автоматически использует временные файлы для загрузки больших документов.