我有一个Mule流程,我在其中配置了Scatter Gather范围,如下所示:
<flow name="simpleScatterGather">
<http:listener config-ref="HTTP_Listener_Configuration" path="/scatter-gather-test" doc:name="HTTP" />
<scatter-gather doc:name="Scatter-Gather">
<flow-ref name="subFlow1" doc:name="callSubFlow1"/>
<flow-ref name="subFlow2" doc:name="callSubFlow2"/>
</scatter-gather>
<logger message="Payload is #[payload]" level="INFO" doc:name="logPayload"/>
<foreach doc:name="forEach">
<logger message="Payload #[flowVars.counter] is : #[payload]" level="INFO" doc:name="logEachPayload"/>
</foreach>
<set-payload value="{"message": "success"}" mimeType="application/json" doc:name="setResponse"/>
</flow>
<sub-flow name="subFlow1">
<set-payload value="Payload1" doc:name="setPayload" />
</sub-flow>
<sub-flow name="subFlow2">
<set-payload value="Payload2" doc:name="setPayload" />
</sub-flow>
Scatter之后的记录器收集如下所示的日志。
Payload is [Payload1, Payload2]
很明显,上述有效载荷是一个列表。
foreach日志中的两个记录器如下所示。
Payload null is : Payload1
Payload null is : Payload2
因此,它意味着foreach内部记录器中的MEL表达式#[flowVars.counter]
返回null。
当我更改foreach范围以明确包含collection
属性时,如下所示:
<foreach doc:name="forEach" collection="#[payload]">
<logger message="Payload #[flowVars.counter] is : #[payload]" level="INFO" doc:name="logEachPayload"/>
</foreach>
下面的foreach日志中的两个记录器。
Payload 1 is : Payload1
Payload 2 is : Payload2
现在MEL表达式#[flowVars.counter]
按预期工作
任何人都可以解决这个问题吗?
答案 0 :(得分:1)
为什么我还不确定,但是分散 - 聚集会返回一个org.mule.DefaultMessageCollection,它似乎弄乱了计数器。但是,如果您明确将collection
设置为payload
,则可以正常工作。
<foreach doc:name="forEach" collection="#[payload]">
<logger message="Payload #[flowVars.counter] is : #[payload]"
level="INFO" doc:name="logEachPayload" />
</foreach>