我有一个Order
POJO,在我的Camel路线上,我想通过这样的过滤器传递每个Order
实例(消息):
ExpensiveOrderFilter eof = new ExpensiveOrderFilter();
from("direct:whatever")
.filter().method(eof)
.to("direct:wherever");
如果Order
的{{1}}超过$ 100.00,过滤器应该只允许Order#getPrice()
。
public class ExpensiveOrderFilter {
public void filterCheapOrders(Order order) {
if(order.getPrice() < 100.00)
???
else
???
}
}
filterCheapOrders
方法需要什么样才能正确过滤掉“便宜”(&lt; $ 100)订单,防止它们被路由到direct:wherever
?提前谢谢!
答案 0 :(得分:6)
这有两个部分。首先,method(..)
是一种称为谓词的Camel expression。你将调用的任何实际方法都需要返回一个布尔值,所以:
public class ExpensiveOrderFilter {
public boolean isCheapOrder(Order order) {
return order.getPrice() < 100.00;
}
}
Order参数将通过名为bean binding的Camel机制进行最佳尝试,该机制将尝试将消息正文转换为Order。如果失败,该路由将抛出异常。
您可以在method(..)
块中命名要在bean上调用的方法:
.filter().method(eof, "isCheapOrder")
只有便宜的订单才会继续。对于简单的表达式,您可能还会考虑Camel中内置的simple表达式语言,并跳过编写bean:
.filter().simple("${body.price} < 100")