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对路线本身进行调用吗?
谢谢,
茶先生答案 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>>
,而不仅仅是文件。