Camel bean binding: set parameter from variable

时间:2018-05-15 11:26:07

标签: apache-camel

Given a bean method that takes a String parameter:

public void emptyDirectory(String directory) {
   // code to empty give directory if it exists
}

how do i pass this parameter? The method is called here:

String to = configuration.getTo();

from(configuration.getFrom())
     .to("bean:splitFileByProductType?method=emptyDirectory(to)")
     ....

This doesn't work as 'to' evaluates to "to", and not the value of configuration.getTo().

The documentation没有提到这样的情况,所以我不知道我是什么&#39 ; m尝试做甚至是可能的,例如用Simple语言。

我知道如果将其添加到交换标头或者我对其进行硬编码,则该值可以访问。

4 个答案:

答案 0 :(得分:1)

您可以使用$ {body},$ {body.NAME},$ {property.NAME}和$ {header.NAME}传递值作为方法参数。

示例http://camel.apache.org/bean-binding.html

首先,你必须把你的变量放在Camel交换中。

答案 1 :(得分:1)

要将信息从Camel Exchange传递到bean方法,您不得添加或更改路径中的任何内容。

如果你有这条路线(来自你的问题)。请注意,如果bean只有一个方法,则可以省略方法名称。

from(whatever)
    .to("bean:splitFileByProductType?methodName=emptyDirectory")

或替代

from(whatever)
    .bean(splitFileByProductType, "emptyDirectory")

您可以注释bean方法以自动获取所需的Exchange信息:

public void emptyDirectory(
    @Header("directory") String directory, 
    @Body String body
    ... [other stuff to be injected] ) {

// your method impl
}

有关此功能的详情,请参阅Camel docs

答案 2 :(得分:0)

您可以将参数分配给交换标头或属性,然后使用简单语言将bean方法传递给它

   String to = configuration.getTo();

    from(configuration.getFrom())
            .setHeader("foo", constant(to))
            .to("bean:splitFileByProductType?method=emptyDirectory(${header.foo})")
            ...

答案 3 :(得分:0)

来自documentation: 唯一可以传递给bean的东西是Simple tokens,String值,数值,布尔值或null。

无法使用Simple表示示例中的变量。可以表达的是交换的各种属性,最值得注意的是交换头,还有一些随机的东西,如字面随机数,当前日期等。查看文档以获取更多信息。

我决定将整个事件视为代码气味,并将方法移动到我在初始化路径之前调用的实用程序类。