Hello,
With ServiceMix 4.3, I am trying to use a JavaScript expression in a
Camel
route as described here :
http://camel.apache.org/javascript.html
<choice>
<when>
<javaScript>request.headers.get('myheader') == 'myvalue'</
javaScript>
<to uri="log:output"/>
</when>
</choice>
The routed worked fine with a "Simple" expression, but raises an
exception
when using the JavaScript expression, at the moment that a message
is sent
through the route :
java.lang.IllegalArgumentException: No script engine could be
created for:
js
at
org
.apache
.camel
.builder.script.ScriptBuilder.createScriptEngine(ScriptBuilder.java:
474)
at
org
.apache
.camel
.builder.script.ScriptBuilder.checkInitialised(ScriptBuilder.java:
451)
at
org
.apache
.camel.builder.script.ScriptBuilder.getEngine(ScriptBuilder.java:
383)
at
org
.apache
.camel
.builder.script.ScriptBuilder.getScriptContext(ScriptBuilder.java:
426)
at
org
.apache
.camel
.builder.script.ScriptBuilder.evaluateScript(ScriptBuilder.java:502)
at
org
.apache
.camel.builder.script.ScriptBuilder.matches(ScriptBuilder.java:86)
at
org
.apache
.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:
65)
at
org
.apache
.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:
70)
at
org
.apache
.camel
.processor
.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
at
org
.apache
.camel
.processor
.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
at
org
.apache
.camel
.management
.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
at
org
.apache
.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:
70)
at
org
.apache
.camel
.processor
.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
at
org
.apache
.camel
.processor
.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
at
org
.apache
.camel
.processor
.interceptor.TraceInterceptor.process(TraceInterceptor.java:174)
at
org
.apache
.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:
70)
at
org
.apache
.camel
.processor
.RedeliveryErrorHandler
.processErrorHandler(RedeliveryErrorHandler.java:299)
at
org
.apache
.camel
.processor
.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:208)
at
org
.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:
269)
at
org
.apache
.camel
.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:102)
at
org
.apache
.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:
70)
at
org
.apache
.camel
.processor
.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
at
org
.apache
.camel
.processor
.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
at
org
.apache
.camel
.management
.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
at
org
.apache
.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:
91)
at
org
.apache
.camel
.processor
.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
at
org.apache.camel.component.restlet.RestletConsumer
$1.handle(RestletConsumer.java:54)
at
org
.apache
.camel
.component.restlet.MethodBasedRouter.handle(MethodBasedRouter.java:
56)
at org.restlet.Filter.doHandle(Filter.java:150)
at org.restlet.Filter.handle(Filter.java:195)
at org.restlet.Router.handle(Router.java:504)
at org.restlet.Filter.doHandle(Filter.java:150)
at org.restlet.Filter.handle(Filter.java:195)
at org.restlet.Router.handle(Router.java:504)
at org.restlet.Filter.doHandle(Filter.java:150)
at com.noelios.restlet.StatusFilter.doHandle(StatusFilter.java:130)
at org.restlet.Filter.handle(Filter.java:195)
at org.restlet.Filter.doHandle(Filter.java:150)
at org.restlet.Filter.handle(Filter.java:195)
at com.noelios.restlet.ChainHelper.handle(ChainHelper.java:124)
at org.restlet.Component.handle(Component.java:673)
at org.restlet.Server.handle(Server.java:331)
at com.noelios.restlet.ServerHelper.handle(ServerHelper.java:68)
at
com
.noelios.restlet.http.HttpServerHelper.handle(HttpServerHelper.java:
147)
at
com.noelios.restlet.http.StreamServerHelper
$ConnectionHandler.run(StreamServerHelper.java:86)
at java.util.concurrent.Executors
$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:
303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor
$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor
$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
With step-by-step debugging in the class
"javax.script.ScriptEngineManager"
from "org.apache.servicemix.specs.scripting-api-1.0-1.7.0.jar", I
see that
the "instanceof" at line 49 returns false :
if (object instanceof ScriptEngineFactory)
which means that com.sun.script.javascript.RhinoScriptEngineFactory
is not
an instance of ScriptEngineFactory.
Maybe it is due to class visibility due to OSGi bundle
classloading ?
Any idea how to fix it ?
Thanks,
metatech
--
View this message in context:
http://servicemix.396122.n5.nabble.com/Exception-when-using-JavaScript-expression-in-Camel-routes-tp4758137p4758137.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.