Call/Send ForEach 调解器内部的调解器

Call/Send mediator inside ForEach mediator

根据documentation

ForEach does not allow using Call , Send and Callout mediators in the sequence.

但是如果将 ForEach 调解器放在序列中并在其中调用该序列,则可以在 ForEach 调解器中使用 Call/Send/Callout 调解器,如本例所示:

<!-- myProxy.xml -->
<for-each expression="//foo" >
    <sequence>
      <sequence key="myCallSequence"/>
    </sequence>
</for-each>


<!-- myCallSequence.xml -->
<call>
    <endpoint>
        <address format="soap11" uri="http://my.uri.com"/>
    </endpoint>
</call>

我观察到的结果可能会导致一些非常意外的结果,尤其是在 for each 与标注的 return 混合之后的聚合有效负载方面。

我在处理我必须拆分原始消息并使用外部服务验证来自拆分部分的一些数据的情况时偶然发现了这个问题,但如果验证在哪里,我仍然需要对原始消息进行更多处理成功。

这种配置被认为是一种不好的做法吗?如果是,为什么?

仅当您需要以迭代方式转换负载(例如,数组)时才应使用 ForEach 中介。 ForEach 调解器未实现以支持调用后端。如果您需要实现此用例,请使用允许您调用后端的 Iterate 调解器。详情请参考https://docs.wso2.com/display/EI611/Iterate+Mediator