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

无法更新骆驼交换属性

滕令雪
2023-03-14

我正在设置路由1中骆驼交换的属性。我正在尝试在拆分器内的第二条路由中更新该属性。但是在拆分器的第二次迭代中,我得到的是我在路由1中设置的原始值,而不是新的更新值。下面是我正在尝试的示例。。

<route handleFault="true" streamCache="true" id="route1">
<from uri="cxfrs://bean://test?synchronous=true"/>
        <bean ref="testBean" method="setMyProperty"/>// setting initial value for property
        <to uri="direct:directCall"/>
</route>

<route handleFault="true" streamCache="true" id="route2">
    <from uri="direct:directcall"/>
    <log message="Inside Second call..."/>
    <split>
     <jsonpath>some Json path</jsonpath>
      <bean ref="formatConvertor" method ="convertLHMToJSON(${body})"/>

    <split>
      <jsonpath>some json path</jsonpath>
    <bean ref="PropertySetter" method ="setProperty"/> //I am setting new value in this method
     </split>
   </split> 

豆子里面:

   public void setMyProperty(Exchange exchange) {
            exchange.setProperty("testProp", "hello");
        }

    public void setProperty(Exchange exchange) {
           sysout(exchange.getProperty("testProp").toString())//this always prints "hello"
           String x=exchange.getProperty("testProp")+some other value;// in all iterations of split I am getting 'hello' as the value of the property instead of new value
            exchange.setProperty("testProp", x);
            sysout(exchange.getProperty("testProp").toString())// this line prints the new value
        }

为什么不更新属性?甚至我也试着在标题中设置。同样的结果。非常感谢。

共有1个答案

窦成荫
2023-03-14

您必须使用拆分聚合模式,并在每次拆分迭代期间将属性值从旧交换复制到新交换,因为每次拆分迭代发生时,都会从源消息中创建一个新交换(仅包含属性

 类似资料:
  • 希望你有时间回答我的问题。在过去的几天里,我一直在阅读关于Camel的文章,并设法将一切都设置好并运行起来。现在,我碰到了一个棘手的部分:)。基本上,我在运行时使用Java定义一个路由,并将路由配置放在DB中。路线是可行的,信息从一边流向另一边。但是,当异常发生时,我想知道异常发生在哪里(在哪个路由endpoint之间),在DB中存储当前的交换主体(对进一步处理有用的进行中的消息),由用户更新消息

  • 问题内容: 我正在开发非OSGI应用程序,我需要更新骆驼路线中使用的某些属性的值(已加载BridgePropertyPlaceHolder)。所以我认为: 要使用酷炫的管理控制台Hawtio,以便使用JMX更新骆驼 创建一个将更新属性..的JMX MBean。 我成功创建了MBean操作并使用JMX对其进行了调用,但是我不知道如何更新依赖于这些属性的骆驼路线。 有没有一种方法可以从外部更新骆驼上下

  • 我需要在Exchange对象的属性上传递一些参数。据我所知和阅读,最好在交换属性上创建我的参数,因为消息的标头可以在路由期间更改。Camel正在从一个路由到另一个路由创建新的交换,但不保留我的任何参数的历史记录。 现在一些上下文:我正在使用部署在WebLogic 12C上的Camel(2.16.1) 相关的Maven部分: 骆驼上下文: 如您所见,我使用了一个名为TestProcess的类来影响E

  • 这里是Java 8和Camel 2.19.x。我有以下骆驼路线: 和处理器:

  • 我已经创建了一个服务代理。 代理(请求类型为)和实际服务(请求类型。)之间有一个处理器。 进入< code > process(Exchange Exchange)方法的交换体属于< code>TypeA。 我能够使用下面的代码行访问数据 现在,我想将此信息更改为。 我使用下面的代码添加主体。 我得到了 现在,我想使用调用真正的服务,它来自。 我尝试进入处理器,但出现以下异常 真正的Web服务没有

  • 脚本: CSV文件被发送到我的endpoint,Pojo将java数据和消息转换为我的一条路由,比如(“direct:consume”)路由,然后处理器处理该文件,处理消息并创建新的输出 问题: 文件只包含代码中断的一行 文件包含多行代码工作 尝试: 试图找到一种方法来确定交易记录的数量。getIn()。getBody() 阅读stackoverflow 阅读有关exchange的文档 在不知道记