【问题标题】:Sequence 2 or more SOAP calls for Apache NiFi?Apache NiFi 的序列 2 或更多 SOAP 调用?
【发布时间】:2018-05-15 20:15:20
【问题描述】:

感谢NiFi How to use InvokeHTTP Processor with SOAP,我能够进行 SOAP 调用。使用的策略是使用 GenerateFlowFile 处理器,并将我的内容插入到自定义内容中。该调用需要一个用户名和密码,以及另一个或两个变量,并且表达式语言巧妙地填充了它。

很好。

现在,我真正需要的是两个 SOAP 调用,其中第一个 SOAP 调用返回一个序列号,我提供给第二个调用以获取我返回的特定数据文件。我为第一个 SOAP 交互设置了一个 ProcessorGroup,这导致为序列号设置了一个流属性。

问题:GenerateFlowFile 仅适用于计时器。我无法理解一种方法,我可以使用第一个 SOAP 流的结果然后为第二次调用触发适当构建的 FlowFile。

想法?我一直困惑但尚未找到解决方案的事情包括 RouteOnAttribute、RouteOnContent、MergeContent、Wait ......

【问题讨论】:

    标签: soap apache-nifi


    【解决方案1】:

    您可以使用ReplaceText 接受具有正确sequenceNumber 属性的传入流文件,并使用您需要的新SOAP 主体填充流文件内容。 替换值 属性支持表达式语言,因此您可以提供如下值:

    • 搜索值(?s)(^.*$)
    • 替换值<xml><sequenceNumber>${sequence_number}</sequenceNumber></xml>

    如果您只需要替换部分内容或维护一些现有的内容文本,您可以使用正则表达式匹配组和反向引用来识别它们。

    ReplaceText 处理器的输出随后将被路由到第二个InvokeHTTP 处理器以执行第二个 SOAP 调用。

    【讨论】:

    • 谢谢!我专注于 SOAP 的 GenerateFlowFile 并错过了以其他方式生成请求文本的可能性。这是解决方案的关键:GenerateFlowFile 定期发出请求(在我的例子中是每天),然后提供给 ReplaceText。
    【解决方案2】:

    只是补充@Andy 所说的内容。您收到的包含sequenceNumber 的响应将采用 XML 格式,对吗?因此,您可以使用EvaluateXPath 处理器解析并获取序列号,然后使用安迪提到的方法。即使用ReplaceText 处理器生成将发送到第二个InvokeHTTP 的SOAP 请求主体

    所以整体流程如下所示:

    GenerateFlowfile -> InvokeHTTP -> EvaluateXPath -> ReplaceText -> InvokeHTTP -> (YOUR_LOGIC)
    

    【讨论】:

    • 谢谢!我确实有 EvaluateXPath 工作以提取序列号。这就是我设置最初提到的流属性的方式。但是,您在此处的描述使下一个跟随的人更清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多