Camel RSS组件和Choice过滤

时间:2013-07-15 22:18:54

标签: apache-camel

我有一条看起来像这样的骆驼路线:

        from("rss:" + RSS_URL)
        .marshal().rss()
        .choice()
            .when(xpath("//item/guid/text()[contains(.,'4552')]"))
                .log("Cool")
                .to("seda:end")
            .otherwise()
                .log("Other message")
                .to("seda:end");

当我查看日志时,我只看到一条消息

  

[example.com/feed/] route1 INFO其他消息

如果我将choice替换为filter指令并在其中抛出process,我的过滤器确实有效:

        from("rss:" + RSS_URL)
        .marshal().rss()
        .filter().xpath("//item/guid/text()[contains(.,'4552')]")
        .process(new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
            System.out.println("Got Here");
        }
    })
        .to("seda:end");

果然,我在控制台看到“Got Here”。更糟糕的是,如果我用process(...)替换log("Cool"),我会在日志中收到消息,说明过滤器匹配为false,我在任何地方都看不到“酷”......我不知道得到那个。

有人能说出发生了什么吗?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的骆驼? 您是否尝试使用endChoice()DSL来标记选择块?

from("rss:" + RSS_URL)
    .marshal().rss()
    .choice()
        .when(xpath("//item/guid/text()[contains(.,'4552')]"))
            .log("Cool")
            .to("seda:end")
        .endChoice()
        .otherwise()
            .log("Other message")
        .endChoice()
        .to("seda:end");