我正在使用Camel Rest DSL创建休息服务。在服务中,我需要列出文件夹下的所有文件并对它们进行一些处理。 PFB代码 -
from("direct:postDocument")
.to("file:/home/s469457/service/content-util/composite?noop=true")
.setBody(constant(null))
.log("Scanning file ${file:name.noext}.${file:name.ext}...");
请建议。
~Arunava
答案 0 :(得分:0)
我建议写一个处理器或bean来列出目录中的文件。我认为这样会更有效,更简单。使用Camel的文件组件,您将不得不处理您可能不期望的复杂性。
不管。您需要进行pollEnrich,然后汇总整个结果。我也认为你会遇到麻烦而且无法多次读取文件,以解决你可能需要创建幂等存储库的问题,但是当读取文件时可能会出现并发/文件锁定问题......
如果你想这样做,这里有一些伪代码可以让你开始:
from("direct:listFiles")
.pollEnrich("file:"+getFullPath()+"?noop=true")
.aggregate(new AggregationStrategy {
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
String filename = newExchange.getIn().getHeader("CamelFileName", String.class)
if (oldExchange == null) {
newExchange.getIn().setBody(new ArrayList<String>(Arrays.asList(filename)));
return newExchange;
} else {
...
}
})
答案 1 :(得分:0)
//Camel Rest Api to list files
rest().path("/my-api/")
.get()
.produces("text/plain")
.to("direct:listFiles");
//Camel Route to list files
List<String> fileList = new ArrayList<String>();
from("direct:listFiles")
.loopDoWhile(body().isNotNull())
.pollEnrich("file:/home/s469457/service/content-util/composite?noop=true&recursive=true&idempotent=false&include=.*.csv")
.choice()
.when(body().isNotNull())
.process( new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
File file = exchange.getIn().getBody(File.class);
fileList.add(file.getName());
}
})
.otherwise()
.process( new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
if (fileList.size() != 0)
exchange.getOut().setBody(String.join("\n", fileList));
fileList.clear();
}
})
.end();