Перехват SOAP-ответа в SOAP-интерфейсе
Веб-сервис возвращается
<SOAP: Envelope>
<SOAP: Header>
<SOAP: Body>
<RootElement>
<![CDATA[Base64 encoded string]]>
</RootElement>
</SOAP : Body>
</SOAP: Header>
Строка в кодировке Base64 на самом деле является XML в кодировке EXI. Я знаю, как декодировать базу 64, а затем конвертировать EXI в XML. Давайте назовем это MyEXIEncoder.class (класс Java)
Однако в настоящее время у нас есть много тестовых случаев SOAP UI, основанных на ответах XML.
На данный момент кажется, что единственным способом является добавление скрипта groovy, который может вызывать мой класс java-классов, но это дополнительный шаг теста, а это значит, что мне пришлось бы написать какой-нибудь скрипт для обновления моих тестовых примеров SOAP UI. Более того, я не уверен, как мои утверждения будут работать и сколько изменений будет в моих тестовых случаях (у меня есть несколько сотен тестовых случаев)
Мне нужно средство
Перехватите ответ SOAP от моего шага тестирования, используйте мой пользовательский класс, который выполняет декодирование, и верните ответ обратно в пользовательский интерфейс SOAP, чтобы могли работать существующие утверждения.
Любая помощь будет принята с благодарностью!
Заранее спасибо.
1 ответ
Добавьте прослушиватель монитора, как показано здесь
например
Event Handler:
//MonitorListener.afterProxy
// get the raw response as a string
def str = new String( messageExchange.getResponseContent() )
// Decode
</ConversionRateResult", "Result>1.0</ConversionRateResult");
// save the response back
messageExchange.rawResponseBody = str
Изменить: на основе комментария ОП, обновление со ссылкой для использования контекста.
В соответствии с советами и рекомендациями SOAPUI, пункт 6. Использование RequestFilter.afterRequest
можно установить ответ обратно.
// write it back
context.httpResponse.responseContent = content
MonitorListener.afterProxy
не дает объект контекста.
RequestFilter.afterRequest
+ использование context
оказалось лучшим решением.