Hi Freeman, I found the cause of my exception :
My ServiceMix installation was not really "vanilla" : I anticipated the future "light" packaging (SMX4-883) and removed all "servicemix-*" features, including "servicemix-scripting", because I use only OSGI components and no JBI components (they are planned to be removed in ServiceMix 5.x anyway). After reinstalling the JavaScript engine with the following commands, it worked ! osgi:install mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.rhino/1.7R1_3 osgi:install mvn:com.google.code.scriptengines/scriptengines-javascript/1.1 osgi:start 147 osgi:start 148 By debugging step-by-step, I see that the implementation used is "com.google.code.scriptengines.js.javascript.RhinoScriptEngineFactory". I find it strange however that the "camel-script" relies on the presence of the "servicemix-scripting" to work properly. Is it really intended to work this way ? Maybe the enhancements in Camel 2.8 will make this prerequisite unnecessary anymore. It is nevertheless worth checking that it works with Service 4.4 (or 4.5) without JBI. Next time I will certainly try to reproduce on a "full vanilla installation" :-) Thanks again for your help ! metatech On 2 September 2011 12:38, Freeman-2 [via ServiceMix] <[email protected]> wrote: > Hi, > > I'm testing it with Apache Servicemix 4.3, exactly same version as you > use. > When I try to access URL :http://localhost:8888/javascriptClassCast > > From the $SMX_HOME/etc/servicemix.log I see log like > > 18:25:24,880 | INFO | Thread-37 | > Tracer | 68 - org.apache.camel.camel-core - > 2.6.0 | ID-Freeman-Mac-55497-1314959007814-0-6 >>> (route1) > from(http://0.0.0.0:8888/javascriptClassCast > ) --> choice <<< Pattern:InOut, Headers: > {org.restlet.startTime=1314959124878, org.restlet.http.version=HTTP/ > 1.1, org.restlet.http.headers=[Host: localhost:8888, User-Agent: > Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.21) > Gecko/20110830 Firefox/3.6.21, Accept: text/html,application/xhtml > +xml,application/xml;q=0.9,*/*;q=0.8, Accept-Language: en-us,en;q=0.5, > Accept-Encoding: gzip,deflate, Accept-Charset: > ISO-8859-1,utf-8;q=0.7,*;q=0.7, Keep-Alive: 115, Connection: keep- > alive], CamelHttpMethod=GET, > CamelHttpUri=http://localhost:8888/javascriptClassCast > }, BodyType:null, Body:null > 18:25:24,887 | INFO | Thread-37 | > Tracer | 68 - org.apache.camel.camel-core - > 2.6.0 | ID-Freeman-Mac-55497-1314959007814-0-6 >>> (route1) choice --> > log://output <<< Pattern:InOut, Headers: > {org.restlet.startTime=1314959124878, org.restlet.http.version=HTTP/ > 1.1, org.restlet.http.headers=[Host: localhost:8888, User-Agent: > Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.21) > Gecko/20110830 Firefox/3.6.21, Accept: text/html,application/xhtml > +xml,application/xml;q=0.9,*/*;q=0.8, Accept-Language: en-us,en;q=0.5, > Accept-Encoding: gzip,deflate, Accept-Charset: > ISO-8859-1,utf-8;q=0.7,*;q=0.7, Keep-Alive: 115, Connection: keep- > alive], CamelHttpMethod=GET, > CamelHttpUri=http://localhost:8888/javascriptClassCast > }, BodyType:null, Body:null > 18:25:24,888 | INFO | Thread-37 | > output | 68 - org.apache.camel.camel-core - > 2.6.0 | Exchange[ExchangePattern:InOut, BodyType:null, Body:null] > 18:25:24,889 | INFO | Thread-37 | > LogService | - - | 2011-09-02 18:25:24 > 0:0:0:0:0:0:0:1%0 8888 GET /javascriptClassCast - 200 - - 10 > http://localhost:8888 > Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.21) > > Gecko/20110830 Firefox/3.6.21 - > > > So I assume for this simple camel router it should also work in SMX4.3. > > Of course you can expect SMX 4.4(which will be release soon) which > will use Camel 2.8.x for better camel-script support in OSGi container. > > Btw, you may need check if you install camel-restlet and camel-script > feature successfully. > > Freeman > On 2011-9-2, at 下午3:24, metatech wrote: > >> Hi Freeman, >> >> I DID install camel-restlet and camel-script. >> >> The bundle is deployed successfully, but I see the exception in my web >> browser when I try to access its URL : >> http://localhost:8888/javascriptClassCast >> >> I also tried to add the file >> /META-INF/services/javax.script.ScriptEngineFactory in my bundle, but >> Camel fails in a different code path : ClassCastException in >> ScriptEngineManager:131: >> ScriptEngineFactory f = factoryClass.newInstance(); >> >> Following to Claus' answer, I found the following bug : >> https://issues.apache.org/jira/browse/CAMEL-3481 >> >> When I uninstall camel-script, I see a different exception during >> deployment (see below). >> I have a "vanilla" ServiceMix 4.3, which contains Camel 2.6 >> components. >> Which version do you have ? >> >> Thanks, >> >> metatech >> ============= >> Caused by: org.apache.camel.FailedToCreateRouteException: Failed to >> create route route3 at: >>> >> Choice[[When[js{request.headers.get('CamelHttpQuery') == '_wadl2'} -> >> [To[log:output]]]] Otherwise[[To[log:output]]]] <<< in route: >> Route[[From[restlet:http://0.0.0.0:8888/javascriptClassCast?... >> because of No language could be found for: js >> at >> org >> .apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java: >> 759)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java: >> 160)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java: >> 701)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel >> .impl >> .DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java: >> 1623)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel >> .impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1412) >> [72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java: >> 1321)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:164) >> [79:org.apache.camel.camel-spring:2.6.0] >> at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java: >> 65)[72:org.apache.camel.camel-core:2.6.0] >> at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java: >> 52)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1299) >> [72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java: >> 203)[79:org.apache.camel.camel-spring:2.6.0] >> at >> org >> .apache >> .camel >> .spring >> .SpringCamelContext.onApplicationEvent(SpringCamelContext.java:101) >> [79:org.apache.camel.camel-spring:2.6.0] >> ... 10 more >> Caused by: org.apache.camel.NoSuchLanguageException: No language could >> be found for: js >> at >> org >> .apache >> .camel >> .core >> .osgi.OsgiLanguageResolver.resolveLanguage(OsgiLanguageResolver.java: >> 62)[79:org.apache.camel.camel-spring:2.6.0] >> at >> org >> .apache >> .camel >> .impl.DefaultCamelContext.resolveLanguage(DefaultCamelContext.java: >> 922)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel >> .model >> .language >> .ExpressionDefinition.createPredicate(ExpressionDefinition.java:152) >> [72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel >> .model >> .language >> .ExpressionDefinition.createPredicate(ExpressionDefinition.java:141) >> [72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel >> .model.ExpressionNode.createFilterProcessor(ExpressionNode.java:97) >> [72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel.model.WhenDefinition.createProcessor(WhenDefinition.java:69) >> [72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel.model.ChoiceDefinition.createProcessor(ChoiceDefinition.java: >> 69)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel >> .model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java: >> 403)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache >> .camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java: >> 174)[72:org.apache.camel.camel-core:2.6.0] >> at >> org >> .apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java: >> 756)[72:org.apache.camel.camel-core:2.6.0] >> ... 21 more >> >> >> On 2 September 2011 02:53, Freeman-2 [via ServiceMix] >> <[hidden email]> wrote: >>> Hi, >>> >>> After install install camel-restlet and camel-script, I can deploy >>> this test bundle successfully with Apache Servicemix 4.3. >>> But without the camel-script feature, I can see exactly same >>> exception >>> you encounter. >>> You need ensure your machine have internet connection and ensure >>> there's no exception when you install camel features. >>> >>> Freeman >>> On 2011-9-1, at 下午11:25, metatech wrote: >>> >>>> Freeman, >>>> >>>> I did install camel-restlet and camel-script. >>>> You can see classes from both bundles in my stack trace. >>>> Does the sample projet work for you on SMX 4.3 ? >>>> >>>> Thanks, >>>> >>>> metatech >>>> >>>> On 1 September 2011 17:19, Freeman-2 [via ServiceMix] >>>> <[hidden email]> wrote: >>>>> Hi, >>>>> >>>>> Ensure you already install camel-restlet and camel-script feature, >>>>> then you can deploy your bundle in SMX4.3. >>>>> >>>>> Freeman >>>>> On 2011-9-1, at 下午11:03, metatech wrote: >>>>> >>>>>> Freeman, >>>>>> >>>>>> Here is a sample project. >>>>>> It is really a basic OSGI-based project with only 2 files : >>>>>> pom.xml >>>>>> and camel-config.xml >>>>>> Can I make it work with ServiceMix 4.3 or do have I have to wait >>>>>> for >>>>>> the release of 4.4 ? >>>>>> >>>>>> Thanks, >>>>>> Regards, >>>>>> >>>>>> metatech >>>>>> >>>>>> >>>>>> On 1 September 2011 14:54, Freeman-2 [via ServiceMix] >>>>>> <[hidden email]> wrote: >>>>>>> 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 >>>> >>>> >>>> -- >> >> >> -- >> View this message in context: >> http://servicemix.396122.n5.nabble.com/Exception-when-using-JavaScript-expression-in-Camel-routes-tp4758137p4761355.html >> Sent from the ServiceMix - User mailing list archive at Nabble.com. > --------------------------------------------- > Freeman Fang > > FuseSource > Email:[hidden email] > Web: fusesource.com > Twitter: freemanfang > Blog: http://freemanfang.blogspot.com > > > > > > > > > > > > ________________________________ > If you reply to this email, your message will be added to the discussion > below: > http://servicemix.396122.n5.nabble.com/Exception-when-using-JavaScript-expression-in-Camel-routes-tp4758137p4761878.html > To unsubscribe from Exception when using JavaScript expression in Camel > routes, click here. -- View this message in context: http://servicemix.396122.n5.nabble.com/Exception-when-using-JavaScript-expression-in-Camel-routes-tp4758137p4762080.html Sent from the ServiceMix - User mailing list archive at Nabble.com.
