使用带有pollEnrich模式的apache camel csv处理器?

时间:2013-12-17 17:34:25

标签: apache-camel

Apache Camel 2.12.1

是否可以将Camel CSV组件与pollEnrich一起使用?我看到的每个例子都是:

from("file:somefile.csv").marshal...

我正在使用pollEnrich,例如:

pollEnrich("file:somefile.csv", new CSVAggregator())

所以在CSVAggregator中我没有csv ...我只有一个文件,我必须自己做csv处理。那么有没有办法以某种方式将编组连接到丰富的位......?

修改

使这更通用......例如:

from("direct:start")
.to("http:www.blah")
.enrich("file:someFile.csv", new CSVAggregationStrategy) <--how can I call marshal() on this?

...

public class CSVAggregator implements AggregationStrategy {
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { 
/*  Here I have:
oldExchange = results of http blah endpoint
newExchange = the someFile.csv GenericFile object */

}

有什么方法可以避免这种情况并使用marshal()。csv对路线本身进行调用吗?

谢谢,

茶先生

2 个答案:

答案 0 :(得分:2)

您可以在充实中使用任何端点。这包括指向其他​​路由的直接端点。你的榜样......

替换它:

from("direct:start")
  .to("http:www.blah")
  .enrich("file:someFile.csv", new CSVAggregationStrategy)

有了这个:

from("direct:start")
  .to("http:www.blah")
  .enrich("direct:readSomeFile", new CSVAggregationStrategy);

from("direct:readSomeFile")
  .to("file:someFile.csv")
  .unmarshal(myDataFormat);

答案 1 :(得分:1)

我遇到了同样的问题并设法使用以下代码解决它(注意,我使用scala dsl)。我的用例略有不同,我想加载一个CSV文件,并用其他静态CSV文件中的数据来丰富它。

from("direct:start") pollEnrich("file:c:/data/inbox?fileName=vipleaderboard.inclusions.csv&noop=true") unmarshal(csv)
from("file:c:/data/inbox?fileName=vipleaderboard.${date:now:yyyyMMdd}.csv") unmarshal(csv) enrich("direct:start", (current:Exchange, myStatic:Exchange) => {
    // both exchange in bodies will contain lists instead of the file handles
})

这里第二条路线是在特定目录中查找文件的路线。它从找到的任何匹配文件中解组CSV数据,并使用前一行中定义的直接路由对其进行丰富。该路由是pollEnriching我的静态文件,因为我没有定义聚合策略,它只是用静态文件数据替换正文的内容。然后我可以从CSV解组并返回数据。

然后第二条路线中的聚合功能可以访问这两个文件&#39; CSV数据为List<List<String>>,而不仅仅是文件。