camel配置时用到simple expression ,摘自camel in action ,作为一个笔记,也给不爱看书的孩纸们一个学习中文的机会。
simple 用${}或者$simple{}取变量的值,不能嵌套。simple一般用来创建逻辑表达式或者一般表达式
有一些内置变量${in.body} ,${out .body},${in.header},${exchangeId}
以及一些内置函数:
1,${date:header.myDate:yyyy-MM-dd HH:mm:ss}将header里面key为myDate的java.util.Date对象进行转换
2,${bean:uuidBean?method=generate}将使用Registry里注册的Id为uuidBean的bean的generate方法执行后的返回值
还有一些file和ftp component的内置变量${file:name},${file:name.ext}
还有内置操作符== ,>=,<,!=,contains,in,range,regex,is
操作符的使用方法 ${leftValue} <OP> rightValue
注意:操作符左边一定是个变量,操作符两侧要有空格,左右两侧的类型可以不一致,因为camel会自动转型
例子:
${in.header.bar} < 200 比较一个String和一个numeric
${in.header.bar} range 100..199 比较是否在范围内
这里有更多例子:http://camel.apache.org/simple.html.
可以用and和or来连接表达式,勿忘and和or两侧要加空格。
simple支持OGNL的特性,它可以用来连续调用方法,(那个struts啥的也是用OGNL这个东东的哦)比如:
如果body是一个Cusomer类型的,就可以这样调用方法 ${body.getAddress().getZip()}
可以简写为 ${body.address.zip}
如果getAddress方法返回一个null,就会报错,所以可以用上?操作符,它叫做"保护null“操作符
写成:${body?.address.zip} (不过我觉得还是让他抛exception比较好,不然闷声不响多可怕。)
如果有一个sayHello方法,那么使用${body.sayHello}就可以啦
OGNL支持对Map和List的快速访问,比如对List 有
${body.address?.lines[2]} , ${body.address?.lines[last]}
getLines返回一个List,取哪个返回List中的第二个元素就加上[2]就可以了,前面的?操作符用来防止
抛出越界exception . last关键字用来访问数组的最后一个值。
对Map 有
${body.type[gold] } getType方法返回一个Map类型 ,取里面的"gold” key就这样取 [gold]
可以再看看OGNL的文档
simple expression 也可以用在Process的java 代码里哦!
逻辑表达式:
SimpleBuilder simple = new SimpleBuilder("${body} contains 'Camel'");
if (simple.matches(exchange) {
System.out.println("This is a Camel message");
} else {
System.out.println("This is NOT a Camel message");
}
一般表达式:
SimpleBuilder simple = new SimpleBuilder("Hello ${header.name}");
String s = simple.evaluate(exchange, String.class);
System.out.println(s);
把一个exchange传进去,让simple分析出header里面的name,String.class参数表示evaluate的结果是一个String。
不过没有了exchange,这个simpleBuilder也没啥用,所以simple就是camel弄出来自己用的。
O了,再有其他的去官网看文档去吧。