[英]How to set properties to apache camel groovy script component
我正在使用apache骆驼脚本组件来调用外部groovy文件。
from("activemq:queue:test.ChooseIManger")
.script().groovy("resource:classpath:tests/port/test.gsh")
我想在调用此脚本时传递一些属性。 我可以使用以下简单的Java代码来做到这一点。
Binding binding = new Binding();
binding.setProperty("INPUTS", inputs);
binding.setProperty("RESULT", results);
GroovyShell shell = new GroovyShell(binding);
Object script = shell.evaluate(getScript("tests/port/test.gsh"));
但是我们如何像这样绑定骆驼路由器中的属性。
感谢名单
根据文档 ,您似乎应该可以通过使用自定义GroovyShellFactory重载默认Groovy实例。
根据您提供的信息,类似这样的内容:
public class CustomGroovyShellFactory implements GroovyShellFactory {
public GroovyShell createGroovyShell(Exchange exchange) {
Binding binding = new Binding();
binding.setProperty("INPUTS", inputs);
binding.setProperty("RESULT", results);
return new GroovyShell(binding);
}
}
然后将该bean添加到您的上下文中。
在骆驼中这可能是不可能的。 在类org.apache.camel.language.groovy.GroovyExpression
方法evaluate
中,所有先前设置的绑定都只会被Camel绑定(例如camelContext
)覆盖,而不是被合并。
public <T> T evaluate(Exchange exchange, Class<T> type) {
Script script = instantiateScript(exchange);
script.setBinding(createBinding(exchange));
Object value = script.run();
return exchange.getContext().getTypeConverter().convertTo(type, value);
}
因此,您所有的绑定都丢失了。 我猜想如果不更改骆驼本身就无法解决。
但是,如果有人对此有解决方案,我真的很想知道。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.