Последовательность 2 или более вызовов SOAP для Apache NiFi?

Благодаря NiFi Как использовать процессор InvokeHTTP с SOAP, я смог совершить вызов по протоколу SOAP. Используемая стратегия заключалась в использовании процессора GenerateFlowFile и вставке моего контента в пользовательский контент. Для вызова требовались имя пользователя и пароль, а также еще одна или две переменные, и язык выражений аккуратно заполнял ее.

Хороший.

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

Загвоздка: GenerateFlowFile просто работает по таймеру. Я не смог понять, как я могу использовать результат первого потока SOAP, чтобы затем запустить соответствующим образом построенный FlowFile для второго вызова.

Мысли? Вещи, над которыми я ломал голову, но еще не нашел решения, включают RouteOnAttribute, RouteOnContent, MergeContent, Wait, ...


person TinaC    schedule 15.05.2018    source источник


Ответы (2)


Вы можете использовать ReplaceText, чтобы принять входящий потоковый файл с правильным атрибутом sequenceNumber и заполнить содержимое потокового файла новым телом SOAP, которое вам нужно. Свойство Replacement Value поддерживает язык выражений, поэтому вы можете указать такое значение, как:

  • Значение поиска: (?s)(^.*$)
  • Значение замены: <xml><sequenceNumber>${sequence_number}</sequenceNumber></xml>

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

Выходные данные процессора ReplaceText затем будут перенаправлены на второй процессор InvokeHTTP для выполнения второго вызова SOAP.

person Andy    schedule 15.05.2018
comment
Спасибо! Я зациклился на GenerateFlowFile для SOAP и упустил возможность иначе генерировать текст запроса. Это было ключом к решению: генерировать файл GenerateFlowFile на периодической основе, чтобы делать запросы (ежедневно, в моем случае), а затем передавать в ReplaceText. - person TinaC; 17.05.2018

Просто чтобы добавить к тому, что сказал @Andy. Полученный вами ответ, содержащий sequenceNumber, будет в XML, верно? Таким образом, вы можете использовать EvaluateXPath процессор для анализа и получения порядкового номера, а затем использовать подход, упомянутый Энди. т.е. использовать процессор ReplaceText для генерации тела запроса SOAP, который будет отправлен второму InvokeHTTP

Итак, общий поток будет выглядеть так:

GenerateFlowfile -> InvokeHTTP -> EvaluateXPath -> ReplaceText -> InvokeHTTP -> (YOUR_LOGIC)
person Sivaprasanna Sethuraman    schedule 16.05.2018
comment
Спасибо! У меня был EvaluateXPath, работающий над порядковым номером. Так я установил изначально упомянутый атрибут потока. Однако ваше описание здесь делает его более понятным для следующего человека, который последует за вами. - person TinaC; 17.05.2018