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