如何在Groovy脚本中正确访问Camel的CamelLoopIndex属性?
错误原因
CamelLoopIndex是Apache Camel Loop组件循环执行时生成的Exchange内置属性,不能直接作为变量在Groovy脚本中裸引用。你之前的写法会让Groovy优先在脚本自身的作用域查找该变量,找不到就会抛出MissingPropertyException异常。
正确访问方式
以下两种写法均可正常获取索引值,按需选择即可:
方式1:通过内置exchange对象获取(更推荐)
Groovy脚本在Camel运行环境中默认可以直接访问exchange对象,调用属性获取方法即可,还可指定返回类型避免隐式类型转换问题:
<setHeader headerName="time_to"> <groovy>1625761488 - 3600*(exchange.getProperty("CamelLoopIndex", Integer.class) - 1)</groovy> </setHeader> <setHeader headerName="time_from"> <groovy>1625761488 - 3600*exchange.getProperty("CamelLoopIndex", Integer.class)</groovy> </setHeader>
方式2:保留properties.resolve写法
如果要继续使用properties.resolve方法,只需要给CamelLoopIndex加上引号,作为字符串参数传入即可:
<setHeader headerName="time_to"> <groovy>1625761488 - 3600*(properties.resolve("CamelLoopIndex") - 1)</groovy> </setHeader> <setHeader headerName="time_from"> <groovy>1625761488 - 3600*properties.resolve("CamelLoopIndex")</groovy> </setHeader>
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

