Как работает MTOM + пример кода - PullRequest
7 голосов
/ 12 апреля 2010

Я пытаюсь сделать очень простой веб-сервис, который делает следующее:

  1. Клиент обращается к веб-службе, запрашивая файл.
  2. Класс обслуживания веб-службы запрашивает хеш-таблицу, которая имеет ключ (поисковый запрос) и значение в качестве значения base64encoded файла (скажем, в формате PDF)
  3. Теперь мне нужно использовать MTOM, чтобы вернуть значение base64encoded, сохраненное в хеш-таблице клиенту.

Клиент должен декодировать его и преобразовать в pdf.

Итак, вот мои вопросы:

  1. Я понимаю, что мы кодируем файлы в base64 для передачи через веб-сервис, но где и как MTOM появляется на снимке?

  2. Может кто-нибудь предоставить мне простой метод, который использует MTOM и отправляет данные обратно. Нужно ли указывать что-то в WSDL? или достаточно простого возвращаемого типа String? Почему / почему нет?

Спасибо

Я видел этот код . Он использует много аннотаций, мне просто нужен простой код Java с использованием MTOM. Новичок в J2EE ЗДЕСЬ:)

ОБНОВЛЕНИЕ 1

Достаточно приличное объяснение здесь , теперь мне нужно понять это с уровня реализации. Хорошая информация здесь , но для .Net

ОБНОВЛЕНИЕ 2

Каким должен быть тип возврата метода "createMTOM (int id)" ??

Ответы [ 3 ]

7 голосов
/ 12 апреля 2010

Вы, кажется, смешиваете реализацию и протокол.

Спецификация для MTOM здесь . Эта страница содержит примеры сообщений.

Если вы используете среду JAX-WS, вы наверняка используете Annotations для ее включения. Если вы катите мыльные сообщения вручную, вы пишете любой код Java, который вам нужно написать для его создания. По сути, MTOM означает, что содержимое данных перемещается во вложение, которое является отдельной частью MIME сообщения и на которое ссылается через элемент xop: Include с href в часть MIME.

Схема должна указывать base64Binary в качестве типа элемента, но дополнительные атрибуты дают подсказки относительно интерпретации байтов: xmime: contentType и xmime :pectedContentType. По моему опыту, эталонная реализация JAX-B имеет некоторые ограничения на их использование. Вы не можете, например, заставить его автоматически преобразовывать текст в байты. В типичном наборе, таком как CXF или Glassfish, вы помещаете данные в DataHandler, а набор превращает их в приложение.

0 голосов
/ 21 июня 2017

Есть полезная статья здесь , которая описывает MTOM и как включить его с помощью CXF. Статья также включает исходный код для рабочего примера.

0 голосов
/ 30 декабря 2012

Хороший подробный пример / обсуждение приведен в Redbook IBM: Разработка приложений веб-сервисов, см. Стр. 64-74

http://www.redbooks.ibm.com/redpapers/pdfs/redp4884.pdf

...