【问题标题】:Set properties to script groovy component in apache camel将属性设置为 apache camel 中的脚本 groovy 组件
【发布时间】:2017-10-02 08:32:36
【问题描述】:

我正在从 apache camel 调用 groovy 脚本。当我调用 groovy 脚本时,出现No such property: INPUTS for class: Script1 错误。 我该如何克服呢?我试过 setProperty()。 setHeader 但没有运气。

from("activemq:queue:test.ChooseIManger")
     .script().groovy("resource:classpath:tests/port/test.gsh")

错误:

2017-10-02 13:42:00 DEBUG ScriptBuilder:413 - Script evaluation failed: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: INPUTS for class: Script1
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: INPUTS for class: Script1
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:158)
    at org.apache.camel.builder.script.ScriptBuilder.runScript(ScriptBuilder.java:469)
    at org.apache.camel.builder.script.ScriptBuilder.doEvaluateScript(ScriptBuilder.java:428)
    at org.apache.camel.builder.script.ScriptBuilder.evaluateScript(ScriptBuilder.java:409)
    at org.apache.camel.builder.script.ScriptBuilder.evaluate(ScriptBuilder.java:160)
    at org.apache.camel.builder.script.ScriptBuilder.evaluate(ScriptBuilder.java:164)
    at org.apache.camel.processor.ScriptProcessor.process(ScriptProcessor.java:47)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
    at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:197)
    at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:79)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
Caused by: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: INPUTS for class: Script1
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320)
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:155)
    ... 16 more
Caused by: groovy.lang.MissingPropertyException: No such property: INPUTS for class: Script1
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
    at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
    at Script1.run(Script1.groovy:1)
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)
    ... 17 more

我尝试如下设置属性,但我得到了同样的错误

from("activemq:queue:test.ChooseIManger").setProperty("INPUTS",constant("123")).script().groovy("resource:classpath:tests/port/test.gsh");

我知道我可以按以下方式执行此操作。但我想用 apache camel groovy 组件来做到这一点。

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"));

test.gsh

def inputVal = INPUTS['param']

RESULT.outputVal = inputVal + 'output';

【问题讨论】:

    标签: java apache groovy apache-camel


    【解决方案1】:

    有一些预定义的绑定:上下文、属性、...

    http://camel.apache.org/scripting-languages.html

    在你的情况下访问属性应该是这样的(camel 2.9+):

    property.resolve("INPUTS")
    

    【讨论】:

    • 感谢 daggett 的回答。但是如何在使用现有 groovy 资源的同时将其设置为 java DSL?
    • 你的意思是你有像def inputVal = INPUTS['param'] 这样的脚本并且你不想改变它们吗?如果是,那么您需要实现自定义处理器。 camel.apache.org/processor.html
    • 一个小小的澄清小插曲。你是指创建一个自定义处理器来设置属性或调用 groovy 脚本或两者兼而有之?
    • 两者。您可以将所有可用属性作为绑定和调用脚本。您还可以缓存已编译的脚本 - 这样您就不会浪费时间重新编译。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多