NiFi如何将InvokeHTTP处理器与SOAP一起使用

NiFi如何将InvokeHTTP处理器与SOAP一起使用,soap,soapui,apache-nifi,Soap,Soapui,Apache Nifi,我看到其他人已经能够做到这一点,但我无法找到足够的细节来解释他们是如何做到这一点的,以便我能够做到这一点 据说他能做到这一点。虽然有一个关于如何做到这一点的简短描述,但我并不完全理解 提出的解决办法是: 使用InvokeHTTP,您可以添加动态属性,这些属性将作为头发送到请求中。您可以使用动态属性设置内容类型和SOAPAction头的值,只需使用头名称作为动态属性的名称。InvokeHTTP允许您控制HTTP方法,因此可以将其设置为POST。剩下的步骤是获取request.xml的内容,将其作为

我看到其他人已经能够做到这一点,但我无法找到足够的细节来解释他们是如何做到这一点的,以便我能够做到这一点

据说他能做到这一点。虽然有一个关于如何做到这一点的简短描述,但我并不完全理解

提出的解决办法是:

使用InvokeHTTP,您可以添加动态属性,这些属性将作为头发送到请求中。您可以使用动态属性设置内容类型和SOAPAction头的值,只需使用头名称作为动态属性的名称。InvokeHTTP允许您控制HTTP方法,因此可以将其设置为POST。剩下的步骤是获取request.xml的内容,将其作为流文件发送到InvokeHTTP。一种方法是使用GetFile处理器从文件系统的某个位置获取requeset.xml,并将GetFile的成功关系传递给InvokeHTTP

--杰夫

我正在使用SOAPUI来验证一切都正常工作,并且当我得到适当的XML响应时,它也正常工作。然而,我无法在NiFi中实现这一点。我的猜测是,我不知道如何称呼我的动态属性。我也不完全理解我要在动态属性的
值中添加哪些数据

InvokeHTTP处理器属性屏幕截图:

这里我缺少的关键是需要将xml SOAP请求作为流文件内容而不是流文件属性发送。我花了一段时间才弄明白如何用自定义内容创建流文件

使用
InvokeHTTP
处理器发出SOAP请求的关键是InvokeHTTP处理器需要将xml SOAP请求作为流文件接收,因为当处理器发送http POST请求时,它将其属性作为SOAP请求的头发送,将传入的流文件内容作为流文件发送皂体。这需要一段时间来理解,然后再弄明白如何自定义流文件的内容

我最初的错误是试图单独使用
GenerateFlowFile
处理器,并将其直接发送到InvokeHTTP处理器。这对我不起作用,因为我不知道如何将放置在GenerateFlowFile动态属性中的“文本”转换为内容

最后,一个人告诉我如何使用
ReplaceText
处理器将我在
GenerateFlowFile
处理器中创建的属性转换为流文件内容,从而创建具有自定义内容的流文件

最后,我得到了InvokeHTTP处理器发送/发布SOAP请求所需的正确格式的流文件

流程的屏幕截图:

GenerateFlowFile和ReplaceText处理器的属性:

最后,我们只需要向
InvokeHTTP
处理器添加一些动态属性,并将其与传入的流文件一起作为HTTP POST请求提交。属性再次作为标题发送,传入的流文件内容作为正文发送。这需要一点时间来理解,但一旦你把这些部分放在一起并正确设置,这就相当容易了


这里我缺少的关键是需要将xml SOAP请求作为流文件内容而不是流文件属性发送。我花了一段时间才弄明白如何用自定义内容创建流文件

使用
InvokeHTTP
处理器发出SOAP请求的关键是InvokeHTTP处理器需要将xml SOAP请求作为流文件接收,因为当处理器发送http POST请求时,它将其属性作为SOAP请求的头发送,将传入的流文件内容作为流文件发送皂体。这需要一段时间来理解,然后再弄明白如何自定义流文件的内容

我最初的错误是试图单独使用
GenerateFlowFile
处理器,并将其直接发送到InvokeHTTP处理器。这对我不起作用,因为我不知道如何将放置在GenerateFlowFile动态属性中的“文本”转换为内容

最后,一个人告诉我如何使用
ReplaceText
处理器将我在
GenerateFlowFile
处理器中创建的属性转换为流文件内容,从而创建具有自定义内容的流文件

最后,我得到了InvokeHTTP处理器发送/发布SOAP请求所需的正确格式的流文件

流程的屏幕截图:

GenerateFlowFile和ReplaceText处理器的属性:

最后,我们只需要向
InvokeHTTP
处理器添加一些动态属性,并将其与传入的流文件一起作为HTTP POST请求提交。属性再次作为标题发送,传入的流文件内容作为正文发送。这需要一点时间来理解,但一旦你把这些部分放在一起并正确设置,这就相当容易了


在使用前将soap请求作为流文件体invokehttp@daggett我很抱歉,因为我不太明白。您是否建议我在将SOAP请求发送到InvokeHTTP处理器之前使用另一个处理器来获取该请求?我怀疑这是你的建议,但我不确定。让我知道并感谢您的时间。您尝试将soap信封放入dynamic属性,但您必须将信封放入正文。
InvokeHTTP
处理器将流文件内容作为http请求主体发送。最简单的流程:
GenerateFlowFile
使用soap主体,然后
InvokeHTTP
。我一定会第一次尝试这个机会。“谢谢你!”达格特终于让它起作用了。我补充了这个问题的答案,详细说明了如何解决这个问题。再次感谢。将soap请求作为流文件体