Apache Camel Simple语言中<=比较运算符失效问题求助
Apache Camel Simple语言规则修复方案
你的规则失效大概率是头参数类型不匹配或缺少非空判断导致的,以下是修复后的规则及原因说明:
修复后的规则
优先推荐带类型转换和非空校验的版本:
${in.header.name} == null && ${in.header.id} != null && ${in.header.id.asInt()} <= 50
如果能确保id头一定存在且是数值类型,可简化为:
${in.header.name} == null && ${in.header.id.asInt()} <= 50
核心问题解析
类型转换缺失
若in.header.id是字符串类型(比如从HTTP请求、消息队列传入的头参数常为字符串),直接用<=做数值比较会导致Simple语言无法正确解析,必须通过asInt()方法显式转换为整数类型后再比较。空指针风险
如果id头不存在或为null,调用asInt()会抛出异常,因此需要先判断${in.header.id} != null,避免路由执行报错。逻辑运算符写法
Simple语言中&&和and都支持逻辑与,但&&是短路运算符,性能更优,推荐使用。
路由示例(Java DSL)
from("direct:validate") .filter().simple("${in.header.name} == null && ${in.header.id} != null && ${in.header.id.asInt()} <= 50") .log("符合规则,继续执行") .to("direct:next");
内容的提问来源于stack exchange,提问作者user3860728
相关产品推荐
相关产品推荐

