我有以下路线DSL:
from("file:" + autoLoadBaseDir + "?move=.classified")
.loop(fileTypes.length)
.choice()
.when(header("CamelFileName").contains(fileTypes[Integer.valueOf("${CamelLoopIndex}")]))
.to("file:" + classesBaseDir + "/" + fileTypes[Integer.valueOf("${CamelLoopIndex}")]);
如图所示,我希望访问CamelLoopIndex
并将其用作数组中的索引。不评估表达式,因此不会创建路径。我究竟做错了什么?提前谢谢。
关于此的文档非常少,而且经过数小时的搜索后,我还没有成功获得解决方案。
更新:我已将相同的问题发布到Camel用户邮件列表。
答案 0 :(得分:4)
您应该使用$ {property.CamelLoopIndex}
答案 1 :(得分:1)
您可以使用processor或直接访问属性
${exchangeProperty.CamelLoopIndex}
...
.loop(4)
.log("${exchangeProperty.CamelLoopIndex}")
.process(exchange -> {
Integer index = (Integer) exchange.getProperty(Exchange.LOOP_INDEX);
})
.end()
...
https://camel.apache.org/components/latest/eips/loop-eip.html https://camel.apache.org/manual/latest/processor.html
希望这会有所帮助
答案 2 :(得分:0)
经过多次选择试验,以下内容适用于我:
from("file:" + autoLoadBaseDir + "?preMove=inprogress&move=.classified")
.routeId("Test-Route")
.loop(fileTypes.length)
.processRef("keFileTypeNameService")
.choice()
.when(header("CamelFileName").contains(header("MyFileType")))
.to("file:" + classesBaseDir + "/?autoCreate=true&fileName=${header[MyFileType]}/${header[CamelFileName]}");
keFileTypeNameService
从交换中检索CamelLoopIndex
属性。然后使用它来获取该索引处的文件类型。然后只需在标题中设置此文件类型名称即可。 keFileTypeNameService
bean如下所示:
@Service( value = "keFileTypeNameService" )
public class FileTypeNameService implements Processor {
private @Value("${ke.file.types}") String[] fileTypes;
public void process(Exchange exchange) throws Exception {
Integer count = exchange.getProperty("CamelLoopIndex", Integer.class);
String fileType = fileTypes[count];
exchange.getIn().setHeader("MyFileType", fileType);
}
}
我希望这可以帮助别人。
答案 3 :(得分:0)
我迟到了,但也许有人会从这个答案中得到帮助。在上面给出的示例中,这适用于我访问Java DSL中的循环索引。
property(Exchange.LOOP_INDEX)
因此,对于上面okello的第一篇文章中的示例,我想这会起作用
Integer.valueOf(property(Exchange.LOOP_INDEX).toString())