java - "Simple"表达式语言 - 算术运算符?

标签 java apache-camel simple-el

我在 Camel route 使用这个表达式:

.when(simple("${body.updateSeq} > ${property.PrevUpdateSeq} + 1"))
    .to("direct:someError")

然而,它对 + 符号感到害怕。
org.apache.camel.language.simple.types.SimpleIllegalSyntaxException: Unexpected token + at location 46
${body.updateSeq} > ${property.PrevUpdateSeq} + 1
                                              *

我如何构造这个表达式,假设它从消息正文上 POJO 的 getter getUpdateSeq 获取一个值,并将其压缩为 Exchange 上的一个属性(加 1)。

最佳答案

Simple Languate 中包含的 Apache Camel 本身不支持 + 操作。然而,它提供了一个 ++ 增量运算符,它要求左侧是一个函数。

最简单的解决方案是将操作重构为 bean

public class NextValueService
{
    @Handler
    public Integer nextValue(Integer value)
    {
        return new Integer(value.intValue() + 1);
    }
}

并在您的 route 使用它,如下所示:
.when(simple("${body.updateSeq} > ${bean:nextValueService?method=nextValue(property.PrevUpdateSeq)"}))
.to("direct:someError")

使用 f.e. 切换简单语言JavaScript 或 Groovy 也应该有助于处理这个问题。

关于java - "Simple"表达式语言 - 算术运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20973511/

相关文章:

java - 如何在 Eclipse 中复制大 SOAP 请求以进行单元测试

java - 不明确的结果日期java

java - 将此 Camel 路由片段从 Java DSL 转换为 Blueprint xml

java - apachecamel简单表达式不给出字符串值

java - 字母数字拨号盘搜索 - Java/Android

java - 由 com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#5 产生的 NullPointerException

java - Camel 没有捕捉到异常

ssis - Camel 与 ETL 工具

java - 如何将 'simple' 中的 Exchange 属性转换为大写?