我有一个发送Set<Status>
的制作人。我想拆分Set
,以便下游组件必须处理单个Status
对象。我的路线看起来像这样:
public Set<Status> loadStatus() { ... }
from("direct:start").
split().
to("mock:end");
ProducerTemplate template = context.createProducerTemplate();
template.sendBody("direct:start", loadStatuses());
这是如何实现的?
答案 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");