1

次のようなラクダルートがあります。

        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");

ログを確認すると、メッセージが 1 つだけ表示されます

[example.com/feed/] route1 INFO その他のメッセージ

choicefilterディレクティブに置き換えて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」と表示されます。さらに悪いことに、myprocess(...)を justに置き換えるlog("Cool")と、フィルターが false に一致したことを示すメッセージがログに記録され、どこにも "Cool" が表示されません... わかりません。

誰が何が起こっているのか教えてもらえますか?

4

1 に答える 1

1

どのバージョンのキャメルを使用していますか? endChoice() DSL を使用して Choice のブロックをマークしようとしましたか?

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");
于 2013-07-16T08:24:07.907 に答える