当前位置: 首页 > 知识库问答 >
问题:

Apache Camel 在交换标头中设置路由异常

仲孙焱
2023-03-14

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

表结构: 如果不存在,则创建表 库存( itemnbr 整数 非空默认值 nextval('inventory_itemnbr_seq'::regclass), 位置整数, 位置类型字符变化 (2) , 颜色字符变化 (5) , 品牌字符变化 (5), soh 双精度, camel_is_read整数默认值 0, 异常字符变化 (500) , 约束inventory_pkey主键 (itemnbr) )

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

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

我已经在路由上创建了 onException,如下所示,并将标头属性“异常”的根本原因设置为 .

     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

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

共有1个答案

谭京
2023-03-14

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

异常=:#${异常}

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

 类似资料:
  • 我有一个骆驼路线,它有一个步骤,调用一个子程序将正文的文本部分转换为PDF。不幸的是,没有保留标题。有没有一种方法可以在不丢失当前兑换的情况下获取子例程的值? 子路线 主要路线

  • 问题内容: 我不太确定为什么会收到此错误。这是一个基于express.js的简单API,能够添加和删除帖子。当我触发删除路由器时发生错误。我读到错误通常在有两个回调的情况下发生,但是,我似乎找不到任何双重回调。 这是我的posts.js路由器: 问题答案: 您需要添加“返回”,这样您就不会再次回答。

  • 我有一个由Tomcat托管的静态网站。 如何为我的网站设置标头,例如: 它们都是静态文件,而不是任何servlet应用程序。

  • 说明: callback Gateway::$router 设置Gateway到BusinessWorker路由规则。默认规则是Gateway随机选择一个BusinessWorker进程,然后把当前client_id与这个BusinessWorker进程绑定,以后这个client_id的所有数据(onConnect/onMessage/onClose事件)都交给这个绑定的BusinessWorke

  • 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路由、正则路由、自动路由,接下来详细的讲解如何使用这三种路由。 基础路由 从 beego 1.2 版本开始支持了基本的 RESTful 函数式路由,应用中的大多数路由都会定义在 routers/router.go 文件中。最简单的 beego 路由由 URI 和闭包函数组成。 基本 GET 路由 beeg

  • 问题内容: 在使用XMLHttpRequest进行AJAX调用时,似乎无法从JavaScript更改大多数请求标头。请注意,必须在Gecko浏览器中调用when。设置_Referer时_ ,它没有设置(我查看了使用Firebug和Tamper Data发送的请求标头)。当我设置User-Agent时,它完全搞砸了AJAX调用。但是,设置接受和_内容类型_确实可以。我们是否无法在Firefox 3中