如何跨运输障碍保留入站物业

时间:2015-03-10 00:38:34

标签: properties mule inbound

我正在使用mule构建一个restful代理,我需要在一个流程中调用两个Web服务。对第一个WS的调用应该进行用户身份验证,如果身份验证成功,则 ORIGINAL HTTP请求将通过第二个WS调用代理到正确的REST端点。第一次身份验证Web服务调用返回后出现问题。当此调用返回时,原始HTTP请求将丢失。

如何保留原始HTTP请求,将其保存在第一个身份验证Web服务调用中,然后在第二次Web服务调用之前设置原始标头?

请向我建议实现这一目标的正确方法。

4 个答案:

答案 0 :(得分:1)

我建议在这种情况下更加丰富。

这里的场景看起来第一次调用只是进行身份验证。因此,使用和更丰富地调用第一个WS并将响应保存为流量可变。

这样,您仍然拥有自己的有效负载和所有属性,这些属性与原始请求中的属性相同。你可以通过丰富的流量来决定是否调用第二个WS。

以下是一个示例流程。

<flow>
    <http:inbound  ... />
    ...
    <enricher target="#[variable:authenticationSuccessful]" source="#[payload]" >
        <processor-chain>
            <!--  YOu call to first WS and then the status whether authentication is succesful or not.
        </processor-chain>
    </enricher>

    <choice>
        <when expression="#[flowVars['authenticationSuccessful']]" />
            <http:outbound  to second WS />
        </when>
        <otherwise>
            <logger level="INFO" message="Authentication Failed" />
        </otherwise>
    </choice>
</flow>

希望这有帮助。

答案 1 :(得分:0)

在第一次Web服务调用之前将原始请求保存在流变量中。 在第一次web服务调用之后,将set-payload组件拖动到flow,并从包含原始请求的flow变量中为其赋值。

答案 2 :(得分:0)

正如Mohan建议在变量中保存入站属性。 Mule中有两种类型的变量: - 1)流变量2)会话变量

根据您的要求,如果您希望在传输障碍中保留入站属性,请使用Session变量,因为它是全局的,可以在任何流中使用

流量变量另一方面局限于定义它的流程。

您可以查看此内容,了解如何保存变量: - http://www.mulesoft.org/documentation/display/current/Variable+Transformer+Reference

答案 3 :(得分:0)

正如Mohan和Anirban建议的那样,您可以使用流变量或会话变量来保持对HTTP请求的引用。我建议使用流变量,因为会话变量是序列化的,并作为消息的一部分发送。

您还可以利用更丰富的范围来丰富&#34;您当前的Mule消息与第一个HTTP请求中的数据。