Apache Camel 在 Exchange 中设置路由异常 Header

Apache Camel Set route Exception in Exchange Header

我正在使用 Camel sql 组件,并希望在事务失败时使用 onConsumeFailed 来更新记录,但堆栈跟踪异常。

Table 结构: 创建 TABLE 如果不存在库存 ( itemnbr 整数 NOT NULL DEFAULT nextval('inventory_itemnbr_seq'::regclass), 位置整数, 位置类型字符 varying(2) , 颜色字符变化(5) , 品牌特征不同(5), 双精度, camel_is_read 整数默认 0, 异常字符 varying(500) , 约束 inventory_pkey 主键 (itemnbr) )

在我的骆驼路线中,我使用了如下的 onConsumeFailed 选项

sql://<select statement>?dataSource=#dataSource&onConsumeFailed=update inventory set camel_is_read = 0, exception=:#exception where itemNbr= :#itemNbr

我在路由上创建了 onException,如下所示,并将根本原因设置为 header 属性 "exception" as .

     onException(Exception.class).process(new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
            Throwable ex = exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
                    Throwable.class);
                    exchange.getIn().setHeader("exception", ex.getCause());
        }
    });

当事务发生异常时,更新行时抛出以下错误

org.apache.camel.RuntimeExchangeException:Cannot find key [exception] in message body or headers to use when setting named parameter in query

我们如何在路由执行期间从路由访问 header 属性?

您可以使用简单的表达式语言来获取异常

异常=:#${异常}

https://camel.apache.org/components/next/languages/simple-language.html