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语言。
我知道如果将其添加到交换标头或者我对其进行硬编码,则该值可以访问。
答案 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表示示例中的变量。可以表达的是交换的各种属性,最值得注意的是交换头,还有一些随机的东西,如字面随机数,当前日期等。查看文档以获取更多信息。
我决定将整个事件视为代码气味,并将方法移动到我在初始化路径之前调用的实用程序类。