我知道Splitter
是骡子中的异步循环。
我想在某些条件下打破它。有没有办法做到这一点?
OR
可以使用For Each
组件来完成吗?我应该拖动什么组件来打破循环?
我正在使用xpath
拆分xml进行循环。
答案 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<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继续处理。