Как работает MTOM + пример кода
Я пытаюсь сделать очень простой веб-сервис, который делает следующее:
- Клиент обращается к веб-службе, запрашивая файл.
- Класс обслуживания веб-службы запрашивает хеш-таблицу, которая имеет ключ (поисковый запрос) и значение в качестве значения base64encoded файла (например, PDF)
- Теперь мне нужно использовать MTOM, чтобы вернуть клиенту значение base64encoded, сохраненное в хеш-таблице.
Клиент должен декодировать его и конвертировать в pdf.
Итак, вот мои вопросы:
Я понимаю, что мы кодируем файлы в base64 для передачи через веб-сервис, но где и как MTOM входит в картину?
Может ли кто-нибудь предоставить мне простой метод, который использует MTOM и отправляет данные обратно. Нужно ли указывать что-то в WSDL? или достаточно простого возвращаемого типа String? Почему, почему нет?
Спасибо
Я видел этот код. Он использует много аннотаций, мне просто нужен простой код Java с использованием MTOM. Новичок в J2EE ЗДЕСЬ:)
ОБНОВЛЕНИЕ 1
Достаточно приличное объяснение здесь, теперь мне нужно понять его с уровня реализации. Хорошая информация здесь, но для.Net
ОБНОВЛЕНИЕ 2
Каким должен быть тип возврата метода "createMTOM(int id)"??
3 ответа
Вы, кажется, смешиваете реализацию и протокол.
Спецификация для MTOM здесь. На этой странице есть примеры сообщений.
Если вы используете среду JAX-WS, вы наверняка используете Annotations
включить это. Если вы катите мыльные сообщения вручную, вы пишете любой код Java, который вам нужно написать для его создания. По сути, MTOM означает, что содержимое данных перемещается во вложение, которое является отдельной частью MIME сообщения, и на которое ссылается через элемент xop:Include с href в часть MIME.
Схема должна указывать base64Binary в качестве типа элемента, но дополнительные атрибуты дают подсказки относительно интерпретации байтов: xmime:contentType и xmime:pectedContentType. По моему опыту, эталонная реализация JAX-B имеет некоторые ограничения на их использование. Вы не можете, например, заставить его автоматически преобразовывать текст в байты. В типичном наборе, таком как CXF или Glassfish, вы помещаете данные в DataHandler, а набор превращает их во вложение.
Здесь есть полезная статья, которая описывает MTOM и как включить его с помощью CXF. Статья также включает исходный код для рабочего примера.
Хороший подробный пример / обсуждение приведен в Красной книге IBM: Разработка приложений веб-сервисов, см. Стр. 64-74.