我有一条看起来像这样的骆驼路线:
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,我在任何地方都看不到“酷”......我不知道得到那个。
有人能说出发生了什么吗?
答案 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");