Axis2 / Axiom обрабатывает SOAP MTOM / не MTOM приложения - PullRequest
2 голосов
/ 05 октября 2010

Посмотрев вокруг и попробовав различные предлагаемые решения, я пишу это. 2 наиболее распространенных решения, предложенных для извлечения двоичных данных из сообщения SOAP MTOM / non-MTOM:

  1. Извлечение узла OMText и использование имеющегося в нем экземпляра dataHandler
  2. Найдите узел OMElement, который содержит атрибут «href». Получите значение «cid: xxxxx» и используйте часть «xxxxx» для получения вложения из карты вложений, присутствующей в экземпляре контекста сообщения.

Проблема, с которой я сталкиваюсь, заключается в том, что мой клиент указывает, что ответное сообщение SOAP имеет значение MTOM [я определил это с помощью метода isDoingMTOM () экземпляра контекста сообщения]. Однако нет узлов OMElement, которые содержат атрибут «href». При печати конверта SOAP я обнаружил, что двоичные данные находятся внутри тела. Поэтому я попробовал подход узла OMText для получения данных, но всякий раз, когда я пытаюсь привести OMElement к соответствующему узлу OMText, я продолжаю получать исключение classCastException.

Может кто-нибудь указать, что я пропускаю?

1 Ответ

1 голос
/ 13 декабря 2010

Как вы распечатываете объект SOAPEnvelope Axiom?Если вы вызываете метод toString (), это приводит к нежелательным побочным эффектам.В частности, метод toString () заставит Axiom проанализировать базовое сообщение SOAP и построить граф объектов Axiom (узлы OMElement и т. Д.), Которые представляют необработанный XML.При построении графа объектов Axiom может слегка изменить представление XML:

Вот ссылка с сайта Axiom, в которой говорится о поведении toString (): http://ws.apache.org/axiom/userguide/ch05.html#d0e1111

ДляВ частности, сообщения MTOM, так как Axiom строит граф объектов, он заменит элементы, которые указывают на необработанные двоичные вложения MTOM, на текстовое представление исходного двоичного кода в кодировке Base64 - эффективно уничтожая любые преимущества использования MTOM (MTOM позволяетотказаться от процесса кодирования Base64, который увеличивает размер двоичного файла).Замена элементов также будет иметь место, если вы посмотрите на граф Axiom Object в отладчике (потому что при этом также вызывается метод toString ()).

Используете ли вы ADB в качестве структуры привязки XML?

...