Hi,
This generally means
com.sun.script.javascript.RhinoScriptEngineFactory and
ScriptEngineFactory are loaded by different classloader.
You need elaborate how you package your customer bundle, such as how
is the OSGi metadata header looks like? you're using JBI package or
OSGi package? Did you embed jar into your bundle? A test project(with
pom.xml which we can build and deploy) would be more helpful here.
Freeman
On 2011-9-1, at 下午8:39, metatech 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.
---------------------------------------------
Freeman Fang
FuseSource
Email:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com