Camel路由中缺少参数的默认值

时间:2015-10-09 07:33:49

标签: apache-camel activemq

我有一个使用Apache Camel和Active MQ的应用程序。在我配置路由的RouteBuilder类中,in正文中可能缺少参数。在这种情况下,我想给它一个默认值。

以下是我现在所拥有的:

@Override
public void configure() throws Exception {

    ...

    String invocation = "aMethod( ${body[context]},  ${body[aParam]}, ${body[param2]} )";

    from(url).routeId(url).bean(bean, invocation);
}

在我的情况下,param2是一个布尔值,如果它不存在,我想将aMethod作为false发送给它。我怎么能这样做?

我在这里看到了一些内容:http://camel.apache.org/simple.html#Simple-OGNLexpressionsupport其中显示“你还可以使用null安全操作符(?。)来避免NPE,例如,如果正文没有地址” ,但我无法弄清楚如何编写调用,所以在指定的情况下我没有错误。

1 个答案:

答案 0 :(得分:1)

我相信您希望使用类似的条件:

from("")
   .choice()
       .when(header("myHeader").isNull())
           .setHeader("myHeader").simple("false")
    .end()  //This might be endChoice can't remember syntax exactly
    .bean(myBean, myMethod);

..在Body中修改了Object

from("")
    .processor( new Processor(Exchange exchange) {
        MyObject obj = exchange.getIn().getBody(MyObject.class);
        Boolean b = obj.getParam2();
        if(b == null)
             obj.setParam2(Boolean.FALSE);
    }
    .bean(myBean, myMethod);

注意:如果您的实际java类使用' boolean'而不是布尔' class wrapper,然后在初始化时所有布尔值默认设置为false。因此,如果你的身体中有一个物体并且没有人拥有布尔值,那么它将默认为假。