如何在Camel中拆分现有集合

时间:2014-06-14 03:33:24

标签: apache-camel

我有一个发送Set<Status>的制作人。我想拆分Set,以便下游组件必须处理单个Status对象。我的路线看起来像这样:

public Set<Status> loadStatus() { ... }

from("direct:start").
    split().
    to("mock:end");

ProducerTemplate template = context.createProducerTemplate();
template.sendBody("direct:start", loadStatuses());

这是如何实现的?

2 个答案:

答案 0 :(得分:2)

Camel Splitter文档描述了如何使用Collection,Iterator或Array ...

  

一个常见的用例是从中分割Collection,Iterator或Array   信息。在下面的示例中,我们只使用表达式来识别   分裂的价值。

from("direct:splitUsingBody").split(body()).to("mock:result");

from("direct:splitUsingHeader").split(header("foo")).to("mock:result"); 
  

在Spring XML中,您可以使用Simple语言来标识值   分裂。

<split>
   <simple>${body}</simple>
   <to uri="mock:result"/>
</split>

<split>
   <simple>${header.foo}</simple>
   <to uri="mock:result"/>
</split>  

答案 1 :(得分:1)

事实证明文档有点不清楚:没有一个例子明确提到有一个Java集合体。解决方案是在没有任何表达的情况下分裂身体。在这种情况下,Camel将使用它的内部转换引擎从Iterator返回Set。最后的路线是:

from("direct:start").
   split(body()).
   to("mock:end");

Camel JDBC samples文档中找到了一个参考:

from("direct:hello")
    // here we split the data from the testdb into new messages one by one
    // so the mock endpoint will receive a message per row in the table
    .to("jdbc:testdb").split(body()).to("mock:result");