ЦБ Верблюда и осмотр имущества POJO

У меня есть верблюжий маршрут, который идет Order экземпляры:

from("direct:start")
    .choice()
        .when(order.getProduct() == Product.Widget)
            .to("direct:widgets")
        .when(order.getProduct() == Product.Fizz)
            .to("direct:fizzes")
        .otherwise()
            .to("direct:allOtherProducts");

Так что если конкретный Order это порядок Widget, он должен быть направлен на direct:widgets, так далее.

Я задыхаюсь от того, что положить внутрь каждого when(...) метод. То, что у меня есть, не является законным синтаксисом Camel DSL и используется для иллюстрации того, чего я хочу достичь.

Поэтому я спрашиваю: что я вкладываю в каждый when(...) способ выполнить тот вид маршрутизации, который я ищу? Заранее спасибо!

2 ответа

Решение

Вы должны поместить значение вашего order.getProduct() в заголовок и использовать его следующим образом:

from("direct:start")
        .choice()
            .when(header("product").isEqualTo(Product.Widget))
                .to("direct:widgets")
            .when(header("product").isEqualTo(Product.Fizz))
                .to("direct:fizzes")
            .otherwise()
                .to("direct:allOtherProducts");

РЕДАКТИРОВАТЬ:

Вы можете использовать процесс (то есть: в DSL):

<route id="foo">
    <from uri="direct:start"/>
    <process ref="beanProcessor" />
    <choice>
        <when>
            ...
        </when>
        <when>
            ...
        </when>
        <otherwise>
            ...
        </otherwise>
    </choice>

Объявление бина:

<bean id="beanProcessor" class="MyProcessor" />

Класс:

public class MyProcessorimplements Processor {

     @Override
     public void process(Exchange exchange) throws Exception {
         exchange.getIn().setHeader("headerName", yourOrderObject);
     }
}

Я думаю, что Тип заказа - это тело сообщения. Так что в Java DSL вы можете сделать

from("direct:start")
  .choice()
     .when(body().isInstanceOf(MyOrder.class)).to("direct:myOrder")
     .when(body().isInstanceOf(MyOtheOrder.class)).to("direct:myOtherOrder")
     .otherwise().to("direct:other");
Другие вопросы по тегам