使用Apache Camel CSV处理器与PollEnrich模式?

4

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的调用方式?

谢谢,

Mr Tea

2个回答

2
您可以在enrich中使用任何端点,包括指向其他路由的直接端点。以下是您的示例:

替换为:


您可以在enrich中使用任何端点,包括直接指向其他路由的端点。下面是一个示例:
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
我遇到了同样的问题,并使用以下代码解决了它(注意,我使用的是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中取消编组并返回数据。
第二个路由中的聚合函数可以访问两个文件的CSV数据,而不仅仅是一个文件,类型为List<List<String>>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接