3

我有以下路由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 用户邮件列表。

4

4 回答 4

6

你应该使用 ${property.CamelLoopIndex}

于 2013-04-11T15:49:04.870 回答
4

您可以使用处理器或直接访问该属性

${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

希望这可以帮助

于 2020-04-17T13:11:34.950 回答
3

我迟到了,但也许有人会从这个答案中得到帮助。在上面给出的示例中,这适用于我访问 Java DSL 中的循环索引。

property(Exchange.LOOP_INDEX)

因此,对于上面 okello 的第一篇文章中的示例,我想这会起作用

Integer.valueOf(property(Exchange.LOOP_INDEX).toString())
于 2015-02-17T07:04:46.950 回答
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所示:

@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);
    }




}

我希望这对其他人有帮助。

于 2013-04-12T06:38:42.670 回答