Java 如何为apache camel groovy脚本组件设置属性
我正在使用ApacheCamel脚本组件调用外部groovy文件Java 如何为apache camel groovy脚本组件设置属性,java,groovy,apache-camel,Java,Groovy,Apache Camel,我正在使用ApacheCamel脚本组件调用外部groovy文件 from("activemq:queue:test.ChooseIManger") .script().groovy("resource:classpath:tests/port/test.gsh") 我想在调用此脚本时传递一些属性。 我可以用如下简单的java代码来实现这一点 Binding binding = new Binding(); binding.setProper
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"));
但是,我们如何像这样在camel路由器中绑定属性
Thanx根据本文,您似乎应该能够通过使用自定义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添加到您的上下文中。这在Camel中可能是不可能的。在类
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);
}
public T评估(交换,类类型){
脚本脚本=实例化脚本(交换);
setBinding(createBinding(exchange));
对象值=script.run();
返回exchange.getContext().getTypeConverter().convertTo(类型,值);
}
因此,所有绑定都将丢失。如果不改变骆驼本身,我想这是无法解决的
但是,如果有人对此有解决方案,我真的很想知道。我已经这样定义了camelConext。@Inject@ContextName(“camelcdi上下文”)私有CamelContext camelctx;如何将此自定义工厂绑定到此上下文。有没有办法将其绑定到路由器。感谢您的回复。由于我们正在使用XMLDSL(OSGiBlueprint)开发路由,我无法100%确定您将如何将bean添加到上下文中。它可能是使用Spring依赖项注入完成的,就像使用XMLDSL一样。