Я написал простой сервис загрузки с JAX-WS RI. Классы создаются с помощью DataHandler
типа XJC. При кодировании в реализацию услуги добавляются @MTOM
и @StreamingAttachment
. Теперь, когда клиент, клиент .NET, отправляет загруженные данные с помощью MTOM multipart/related
и данные принимаются, но источником данных в обработчике данных является com.sun.istack.ByteArrayDataSource
и java.io.ByteArrayInputStream
. Это означает, что поток от клиента полностью потребляется в памяти. С большими файлами память взрывается.JAX-WS RI не передает данные от клиента
После нескольких исследований по поиску в Google я не нашел ничего, кроме некоторых вопросов, касающихся SOAP-обработчиков, которых у меня нет. Пока нет успеха.
Я начал сеанс отладки и выяснил, что данные внутри содержатся в StreamingDataHandler
, который является рекомендуемым способом, но MtomCodec
queries длины насадки и вызывает основной объект данных к fully consume the input stream into memory. Конец истории.
Это кажется мне очень мозгом, потому что вся оптимизация от MTOM полностью исчезла.
Кто-нибудь знает об этом? В противном случае весь подход в JAX-WS RI кажется бесполезным, я должен прибегнуть к REST.
Это может быть дубликат MTOM not working when using SOAPHandler. Результат тот же.
Для чего это стоит, я на:
- Tomcat 6.0.41
- Java 7
- JAXB 2.2.11
- JAX-WS 2.2.10
У меня есть ряд вопросов о 1), какие библиотеки вы используете, 2) среды клиента и сервера, 3) конкретные ошибки клиента и/или сервера, которые вы получаете. Но ... ПРЕДЛОЖЕНИЕ: Посмотрите, есть ли в этой ссылке полезные советы: [Оптимизация передачи двоичных данных с использованием MTOM/XOP] (http://docs.oracle.com/cd/E14571_01/web.1111/e13734/mtom.htm# WSADV130). В частности, может быть применимо нечто вроде '@StreamingAttachment (parseEagerly = true, memoryThreshold = 40000L). – FoggyDay
@FoggyDay, 1) версии указаны в вопросе. 3) окна клиента, оконные окна dev. 3) Я получаю знаменитый «OutOfMemoryError». Я прочитал статью Oracle сразу после моих открытий и применил как аннотацию класса реализации службы. Никаких изменений не произошло. Я добавил '@StreamingAttachment (parseEagerly = true, memoryThreshold = 100_000L)'. Уложенный файл имеет 10 МБ. –