骆驼过滤方法签名

时间:2013-01-25 12:03:04

标签: java apache-camel esb middleware

我有一个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?提前谢谢!

1 个答案:

答案 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")