我正在尝试使用simple expression language设置标头参数(param2
):
from("timer://foo?repeatCount=1")
.setBody(constant("on,off"))
.split()
.tokenize(",")
.setHeader("param1", simple("${body}"))
.setHeader("param2", simple("${header.param1} == 'on'"))
.log("param1 = [${header.param1}], param2 = [${header.param2}]");
但结果我得到一个字符串集而不是布尔值,以下内容被记录:
param1 = [on], param2 = [on == 'on']
param1 = [off], param2 = [off == 'on']
我希望它能记录下来:
param1 = [on], param2 = [true]
param1 = [off], param2 = [false]
文档写道,可以使用simple
进行比较,我可以在做出选择时使其正常工作:
from("timer://foo?repeatCount=1")
.setBody(constant("on,off"))
.split()
.tokenize(",")
.setHeader("param1", simple("${body}"))
.choice()
.when(simple("${header.param1} == 'on'"))
.setHeader("param2", constant(true))
.otherwise()
.setHeader("param2", constant(false))
.end()
.log("param1 = [${header.param1}], param2 = [${header.param2}]");
输出是:
param1 = [on], param2 = [true]
param1 = [off], param2 = [false]
但为什么它不能直接分配呢?
答案 0 :(得分:1)
您可以定义àsimpleexpression的结果类型,如此
.setHeader("param2", simple("${header.param1} == 'on'", Boolean.class))
答案 1 :(得分:1)
另一种方法是使用像MVEL这样的表达式语言。使用camel mvel组件并将路径写为
from("timer://foo?repeatCount=1")
.setBody(constant("on,off"))
.split()
.tokenize(",")
.setHeader("param1", simple("${body}"))
.setHeader("param2").mvel("request.headers.param1 == 'on'")
.log("param1 = [${header.param1}], param2 = [${header.param2}]");
答案 2 :(得分:1)
这是一个错误。我测试了2.12.3,2.13.0,2.12-SNAPSHOT和2.13-SNAPSHOT并且操作员处理不正确。即使设置输出类型也无济于事。
顺便说一句,您也可以使用Groovy来解决您的问题:
.setHeader("param2").groovy("request.headers.param1.equals('on')")
修改强> 此错误已在2.12.4,2.13.1和2.14.0中修复,请参阅CAMEL-7298