Hi SMX 4.4 which is to be shipped with Camel 2.8.x ought to work better with scripting engines in OSGi environments. As the Camel team have improved this in camel-script, and in the osgi pieces in camel-core-osgi.
On Thu, Sep 1, 2011 at 2:39 PM, metatech <[email protected]> wrote: > 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. > -- Claus Ibsen ----------------- FuseSource Email: [email protected] Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/
