如何打破mule'Splitter'组件的循环?

时间:2014-09-17 19:16:32

标签: mule

我知道Splitter是骡子中的异步循环。

我想在某些条件下打破它。有没有办法做到这一点?

OR

可以使用For Each组件来完成吗?我应该拖动什么组件来打破循环?

我正在使用xpath拆分xml进行循环。

2 个答案:

答案 0 :(得分:0)

Splitter为您指定的集合中的每个项目创建单独的消息。如果您想阻止某些项目被处理,请在分割器后使用Filter

或者,您可以创建更复杂的xpath以仅返回要处理的项目。例如,/order/item[position() < 4]将仅返回文档中的前三个项目节点。

如果您确实想要“破解”并确保不处理集合中的其他项目,则可以在ForEach的正文中生成例外。您的流程的异常策略将立即被调用,不再处理任何项目。

答案 1 :(得分:0)

我有同样的问题。一个for-each循环,当条件为真时我想要打破(流程要复杂得多,但用几句话来说......)

我不认为生成异常是个好主意。我达到的最佳方法是for-each和在循环开始时过滤表达式。

示例:

 <flow name="break-foreach" processingStrategy="Queued_Asynchronous_Processing_Strategy">
        <http:listener config-ref="HTTP_Sat" path="/loop " allowedMethods="GET" doc:name="HTTP"/>
        <set-payload value="#[[0,1,2,3,4]]" doc:name="Set Payload"/>
        <foreach collection="payload" doc:name="For Each">
            <logger message="Iteration before filter: #[payload]" level="INFO" doc:name="Logger"/>
            <expression-filter expression="#[payload&lt;3]" doc:name="Expression"/>
            <logger message="Iteration after filter: #[payload]" level="INFO" doc:name="Logger"/>
        </foreach>
    </flow>

控制台显示:

Iteration before filter: 0
 Iteration after filter: 0
 Iteration before filter: 1
 Iteration after filter: 1
 Iteration before filter: 2
 Iteration after filter: 2
 Iteration before filter: 3
 Iteration before filter: 4

当然,这不是休息,因为for-each继续处理。