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