骆驼CBR和POJO财产检查

时间:2013-01-25 12:13:13

标签: java apache-camel enterprise-integration

我有一个路由Order实例的Camel路由:

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

因此,如果特定OrderWidget的订单,则需要将其路由到direct:widgets等。

我对每个when(...)方法中的内容感到窒息。我所拥有的不是合法的Camel DSL语法,而是用于说明我想要完成的任务。

所以我问:我在每个when(...)方法中放置了什么来完成我正在寻找的路由类型?提前致谢!

2 个答案:

答案 0 :(得分:4)

你应该将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声明:

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

班级:

public class MyProcessorimplements Processor {

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

答案 1 :(得分:3)

我认为订单类型是邮件正文。所以在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");