camel java dsl传递bean方法返回值为header

时间:2017-06-05 17:00:30

标签: java apache-camel dsl

Java - Apache Camel 2.17 JAVA DSL

我的路由处理数据并返回它处理的日期,我想将从List<LocalDate>返回的myBean.processData传递给日志并设置在标题中。

以下是我的代码

from("route1")
.bean("myBean","processData")
.log("how do i log the response of processData return")
. setHeader("processDataReturnValue") // how can pass processData return 

标题值?

1 个答案:

答案 0 :(得分:2)

您正在寻找以下代码:

from("route1")
   .bean("myBean","processData")
   .log("***** processData return value: ${body.toString()} *****")
   .setHeader("myHeader", body());

From&#34; Camel in Action&#34; CH。 4.将bean与Camel一起使用:

&#34;在运行时,路由Camel交换,并且在路由中的给定点,它到达BeanProcessor。然后,BeanProcessor处理交换,执行以下一般步骤:

  1. 在注册表中查找bean
  2. 选择要在bean上调用的方法
  3. 绑定到所选方法的参数(例如,使用输入消息的正文作为参数;这将在4.5节中详细介绍)
  4. 调用方法
  5. 处理发生的任何调用错误(将在Camel交换机上设置从bean抛出的任何异常以进一步处理错误)
  6. 将方法的回复(如果有的话)设置为Camel交易所输出消息的正文
  7. 我使用MyBean测试了路线,类似于:

    @Component
    public class MyBean {
    
        public List<LocalDate> processData(Exchange exchange) {
            return Lists.newArrayList(LocalDate.now(),
                       LocalDate.now().minusYears(1L));
       }
    }
    

    P.S。我会考虑在处理器中隐藏日志记录,设置标头和实际的bean调用。