4

私はPOJOを持っており、Camelルートで、各インスタンス(メッセージ)を次のようなフィルターOrderに通したいと思います。Order

ExpensiveOrderFilter eof = new ExpensiveOrderFilter();

from("direct:whatever")
    .filter().method(eof)
    .to("direct:wherever");

ただし、フィルターは$100.00を超えるOrder場合にのみsを許可する必要があります。Order#getPrice()

public class ExpensiveOrderFilter {
    public void filterCheapOrders(Order order) {
        if(order.getPrice() < 100.00)
            ???
        else
            ???
    }
}

filterCheapOrders「安い」(<$ 100)注文を正しく除外し、それらがにルーティングされないようにするために、メソッドはどのように見える必要がありdirect:whereverますか?前もって感謝します!

4

1 に答える 1

6

これには2つの部分があります。1つ目は、述語と呼ばれるmethod(..)一種のラクダ式です。これが呼び出す実際のメソッドはブール値を返す必要があるため、次のようになります。

public class ExpensiveOrderFilter {
    public boolean isCheapOrder(Order order) {
        return order.getPrice() < 100.00;
    }
}

Orderパラメーターは、メッセージの本文をOrderに変換しようとする、Beanバインディングと呼ばれるCamelメカニズムによって最善の試みで注入されます。失敗した場合、ルートは例外をスローします。

method(..)ブロック内のBeanで呼び出されるメソッドに名前を付けます。

.filter().method(eof, "isCheapOrder")

安い注文のみが継続されます。単純な式の場合は、Camelに組み込まれている単純な式言語を検討し、Beanの記述をスキップすることもできます。

.filter().simple("${body.price} < 100")
于 2013-01-25T14:29:15.203 に答える