为什么在 Camel 3.7.3 中无法正确评估属性?

问题描述

我有路线

String XYZ = "xyz";

from(URL_A)
  .bean(PropertiesSetterBean.class)
  .to("${property." + XYZ + "}")

其中 PropertiesSetterBean 是:

@Component
class PropertiesSetterBean {
  public void copyProperties(@Headers Map<String,Object> headers,@ExchangeProperties Map<String,Object> properties) {
    properties.put("xyz","direct:test")
  }
}

我得到的错误

未能在以下位置创建路由 route1:>>> DynamicTo[${property.xyz}]

看起来 bean 没有被执行。

我使用camel:3.7.3、spring-boot:2.4.3、java:11

我做的步骤:

  • 我阅读了迁移指南
  • 查看 GitHub 上可用的代码片段
  • 搜索 StackOverflow
  • 与同事交谈

我研究了一个类似的 issue

而且,我仍然无法对问题进行分类

我做错了什么?

更新 1

添加了处理器:

.process(exchange -> {
  System.out.println("This is my property: " + exchange.getProperty("xyz"));
})

它有效。与此同时,我仍然无法在 Camel 中使用 simple DSL 检索此属性

解决方法

经过几个小时的搜索没有结果,我遇到了一个old post

要访问该属性,我需要使用 "${exchangeProperty." + XYZ + "}"

注意:

  • 它适用于 Camel 2.X.X,因此请注意此更改。
  • 如果 Spring 和 Camel 占位符之间发生冲突,请使用 $simple 而不是 $
  • 在 Camel 3.X.X 中,您需要检查您的属性所在的位置并将它们重新指向 exchangeProperty

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...