2017-10-02 2 views
0

J'appelle des scripts groovy d'apache camel. Quand j'appelle le script groovy, je reçois l'erreur ci-dessous en disant No such property: INPUTS for class: Script1. Comment puis-je surmonter cela? J'ai essayé setProperty(). setHeader mais pas de chance.Définir les propriétés pour écrire un composant groovy dans apache camel

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

Erreur:

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 

J'ai essayé de setProperties comme ci-dessous, mais je me fais la même erreur

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

Je sais que je peux le faire comme ci-dessous. Mais je veux le faire avec apache camel groovy composant.

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'; 

Répondre

1

il y a des liaisons prédéfinies: contexte, propriétés, ...

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

dans votre cas pour accéder à la propriété devrait être comme ça (chameau 2.9+):

property.resolve("INPUTS") 
+0

Merci daggett pour la réponse. Mais comment définir cela à la java DSL tout en utilisant les ressources groovy existantes? – namalfernandolk

+0

voulez-vous dire que vous avez des scripts comme 'def inputVal = INPUTS ['param']' et vous ne voulez pas les changer? Si oui, vous devez implémenter un processeur personnalisé. http://camel.apache.org/processor.html – daggett

+0

Une petite clarification daggett. Vous parlez de créer un processeur personnalisé pour définir la propriété ou invoquer des scripts groovy ou les deux? – namalfernandolk