NiFi Как использовать процессор InvokeHTTP с SOAP

Я вижу, что другим удалось заставить это работать, однако я не могу найти достаточно подробностей, объясняющих, как они это сделали, чтобы я мог заставить это работать.

Этот парень на эту ссылку утверждает, что он смог это сделать. Хотя есть краткое описание того, как это сделать, я не полностью его понимаю.

Представленное решение было:

С помощью InvokeHTTP вы можете добавлять динамические свойства, которые будут отправляться в запросе в виде заголовков. Вы можете использовать динамические свойства для установки значений для заголовков Content-Type и SOAPAction, просто используйте имена заголовков для имен динамических свойств. InvokeHTTP позволяет вам управлять методом HTTP, поэтому вы можете установить для него значение POST. Остающийся шаг - получить содержимое request.xml для отправки в InvokeHTTP в виде потокового файла. Один из способов сделать это - использовать процессор GetFile для извлечения Requeset.xml из некоторого места в файловой системе и передачи отношения успеха GetFile в InvokeHTTP.

--Джефф.

Я использую SOAPUI, чтобы убедиться, что все работает и работает, поскольку я получаю соответствующий ответ XML. Однако я не могу этого сделать в NiFi. Полагаю, я не знаю, как назвать свои динамические свойства. Я также не совсем понимаю, какие данные я бы добавил в Value своих динамических свойств.

Снимок экрана свойств процессора InvokeHTTP:

Снимок экрана свойств процессора InvokeHTTP


person Code Novice    schedule 23.03.2018    source источник
comment
поместите запрос мыла как тело файла потока перед использованием invokehttp   -  person daggett    schedule 24.03.2018
comment
@daggett Мои извинения, я не уверен, что понимаю. Вы предлагаете мне использовать другой процессор для получения запроса SOAP перед его отправкой в ​​процессор InvokeHTTP? Я сомневаюсь, что это именно то, что вы предлагаете, однако я не уверен. Дайте мне знать и спасибо за ваше время.   -  person Code Novice    schedule 24.03.2018
comment
вы пытаетесь поместить мыльный конверт в динамическое свойство, но вы должны поместить конверт в тело. процессор InvokeHTTP отправляет содержимое файла потока как тело HTTP-запроса. самый простой процесс: GenerateFlowFile с мыльным телом, а затем InvokeHTTP.   -  person daggett    schedule 24.03.2018
comment
Я обязательно попробую тот первый шанс, который у меня получится. Спасибо.   -  person Code Novice    schedule 24.03.2018
comment
@daggett Наконец-то заработал. Я добавил ответ на этот вопрос, подробно описав, как это сделать. Спасибо еще раз.   -  person Code Novice    schedule 30.03.2018


Ответы (1)


Ключевым моментом, которого мне здесь не хватало, была необходимость отправлять XML-запрос SOAP как содержимое файла потока, а не как атрибут файла потока. Прошло некоторое время, прежде чем я понял, как создать файл потока с настраиваемым содержимым.

Ключом к использованию процессора InvokeHTTP для выполнения запроса SOAP было требование к процессору InvokeHTTP для получения XML-запроса SOAP в виде файла потока из-за того, что, когда процессор отправляет запрос http POST, он отправляет его атрибуты в виде заголовков запрос SOAP и содержимое входящего файла потока в качестве тела SOAP. Это заняло некоторое время, чтобы понять, а затем выяснить, как настроить содержимое файла потока.

Моя первоначальная ошибка заключалась в том, что я пытался использовать GenerateFlowFile процессор сам по себе и отправлять его непосредственно процессору InvokeHTTP. Это не сработало для меня, поскольку я понятия не имел, как преобразовать «текст», который я поместил в динамический атрибут GenerateFlowFile в качестве содержимого.

Наконец, человек ЗДЕСЬ рассказал мне, как мог создать файл потока с пользовательским содержимым, используя процессор ReplaceText для преобразования атрибута, который я создал в процессоре GenerateFlowFile, в качестве содержимого файла потока.

Наконец, у меня был файл потока в правильном формате, который требовался процессору InvokeHTTP для отправки / POST запроса SOAP.

Скриншот потока:

введите описание изображения здесь

Свойства процессоров GenerateFlowFile и ReplaceText:

введите описание изображения здесь

Наконец, нам просто нужно добавить некоторые динамические атрибуты в процессор InvokeHTTP и отправить их вместе с входящим файлом потока в виде запроса HTTP POST. Атрибуты снова отправляются как заголовки, а содержимое входящего файла потока отправляется как ТЕЛО. Это заняло немного времени, чтобы понять, но это довольно просто, если вы соберете все вместе и правильно настроите.

введите описание изображения здесь

person Code Novice    schedule 29.03.2018
comment
Я обнаружил, что вы можете просто поместить ТЕЛО прямо в GenerateFlowFile процессор прямо в поле «Пользовательский текст» и полностью избавиться от необходимости использовать ReplaceText процессор. - person Code Novice; 31.03.2018