ЦБ Верблюда и осмотр имущества 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");