如何跨过运输障碍保留入境财产
How to retain inbound properties across transport barrier
我正在使用 mule 构建一个 restful 代理,我需要在单个流程中调用两个 Web 服务。对第一个 WS 的调用应该进行用户身份验证,如果身份验证成功,则 ORIGINAL HTTP 请求将通过第二个 WS 调用代理到正确的 REST 端点。我在第一次身份验证 Web 服务调用 returns 后遇到问题。当这个调用returns时,原来的HTTP请求就丢失了。
如何保留传入的原始 HTTP 请求,在第一次身份验证 Web 服务调用中保存它,然后在第二次 Web 服务调用之前设置原始 headers?
请向我建议实现此目标的正确方法。
在第一次网络服务调用之前将原始请求保存在流变量中。
在第一次网络服务调用后,将 set-payload 组件拖到流中,并从包含原始请求的流变量中为其赋值。
正如 Mohan 建议的那样,将入站属性保存在变量中..
Mule 中有两种类型的变量:- 1) 流变量 2) 会话变量
因此,根据您的要求,如果您想保留穿过运输屏障的入站属性,请使用 Session 变量,因为它是全局变量,可以在任何流程中使用
另一方面,流变量在定义它的流中是局部的..
您可以检查这个以了解如何保存在变量中:- http://www.mulesoft.org/documentation/display/current/Variable+Transformer+Reference
正如 Mohan 和 Anirban 所建议的,您可以使用流变量或会话变量来保持对 HTTP 请求的引用。我建议使用流变量,因为会话变量被序列化并作为消息的一部分发送出去。
您还可以使用 enricher 范围 "enrich" 您当前的 Mule 消息以及来自第一个 HTTP 请求的数据。
在这种情况下,我建议使用 enricher。
这里的场景看起来像第一次调用只是为了验证。所以使用 and enricher 调用第一个 WS 并将响应保存为流变量。
这样你仍然拥有你的有效负载和所有属性,因为它们来自原始请求。您可以通过 enriched flow 变量来决定是否调用第二个 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>
希望对您有所帮助。
我正在使用 mule 构建一个 restful 代理,我需要在单个流程中调用两个 Web 服务。对第一个 WS 的调用应该进行用户身份验证,如果身份验证成功,则 ORIGINAL HTTP 请求将通过第二个 WS 调用代理到正确的 REST 端点。我在第一次身份验证 Web 服务调用 returns 后遇到问题。当这个调用returns时,原来的HTTP请求就丢失了。
如何保留传入的原始 HTTP 请求,在第一次身份验证 Web 服务调用中保存它,然后在第二次 Web 服务调用之前设置原始 headers?
请向我建议实现此目标的正确方法。
在第一次网络服务调用之前将原始请求保存在流变量中。 在第一次网络服务调用后,将 set-payload 组件拖到流中,并从包含原始请求的流变量中为其赋值。
正如 Mohan 建议的那样,将入站属性保存在变量中.. Mule 中有两种类型的变量:- 1) 流变量 2) 会话变量
因此,根据您的要求,如果您想保留穿过运输屏障的入站属性,请使用 Session 变量,因为它是全局变量,可以在任何流程中使用
另一方面,流变量在定义它的流中是局部的..
您可以检查这个以了解如何保存在变量中:- http://www.mulesoft.org/documentation/display/current/Variable+Transformer+Reference
正如 Mohan 和 Anirban 所建议的,您可以使用流变量或会话变量来保持对 HTTP 请求的引用。我建议使用流变量,因为会话变量被序列化并作为消息的一部分发送出去。
您还可以使用 enricher 范围 "enrich" 您当前的 Mule 消息以及来自第一个 HTTP 请求的数据。
在这种情况下,我建议使用 enricher。
这里的场景看起来像第一次调用只是为了验证。所以使用 and enricher 调用第一个 WS 并将响应保存为流变量。
这样你仍然拥有你的有效负载和所有属性,因为它们来自原始请求。您可以通过 enriched flow 变量来决定是否调用第二个 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>
希望对您有所帮助。