12

假设我有一条看起来像这样的骆驼路线:

from("direct:myRoute")
        .setHeader("someHeader", simple("some header value"))
        .beanRef("myBean", "beanMethod");

我有一个cannot change看起来像这样的豆子:

public class MyBean {
    public void beanMethod(String headerExpected) {
        // do something with the value here.
    }
}

基本上,我想将 myRoute 中的 someHeader 的传递MyBean中beanMethod

知道 beanMethod 可以接受 a String,我如何从路由中传递标头someHeader的值,以便在beanMethod 中将其作为 String 接受?

4

2 回答 2

25

您可以按照您描述的方式传递参数,如下所示:

from("direct:myRoute")
.setHeader("someHeader", simple("some header value"))
.to("bean:myBean?method=beanMethod(${header.someHeader})")

更多信息,包括 bean 绑定的其他方法,可以在这里找到http://camel.apache.org/bean-binding.html

于 2014-05-28T12:39:44.870 回答
0

答案似乎有点过时了。这就是我的做法,现代的骆驼方式。您可以使用注解检索 bean 中的标头值@Headers,并且可以通过传递类和方法名称来调用 bean 方法;

路线类

public class MyRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("direct:myRoute")
            .setHeader("myHeader", simple("my header value"))
            .bean(MyBean.class, "handle");
    }

}

豆类

public class MyBean {
    
    public static void handle(@Header("myHeader") String headerVal) {
        // do something with header
        System.out.println("myHeader: " + headerVal);
    }

}
于 2021-08-03T00:13:39.167 回答