Последовательность 2 или более вызовов SOAP для Apache NiFi? - PullRequest
0 голосов
/ 15 мая 2018

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

Хорошо.

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

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

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

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

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

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

GenerateFlowfile -> InvokeHTTP -> EvaluateXPath -> ReplaceText -> InvokeHTTP -> (YOUR_LOGIC)
0 голосов
/ 16 мая 2018

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

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

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

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

...