次のようなラクダルートがあります。
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 その他のメッセージ
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」と表示されます。さらに悪いことに、myprocess(...)
を justに置き換えるlog("Cool")
と、フィルターが false に一致したことを示すメッセージがログに記録され、どこにも "Cool" が表示されません... わかりません。
誰が何が起こっているのか教えてもらえますか?