From commits-return-43645-apmail-camel-commits-archive=camel.apache.org@camel.apache.org Sat Sep 26 08:35:00 2015 Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id EB71E1785F for ; Sat, 26 Sep 2015 08:34:59 +0000 (UTC) Received: (qmail 81922 invoked by uid 500); 26 Sep 2015 08:34:59 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 81787 invoked by uid 500); 26 Sep 2015 08:34:59 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 81585 invoked by uid 99); 26 Sep 2015 08:34:59 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 26 Sep 2015 08:34:59 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 6299BE095E; Sat, 26 Sep 2015 08:34:59 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: davsclaus@apache.org To: commits@camel.apache.org Date: Sat, 26 Sep 2015 08:35:04 -0000 Message-Id: <1ab1cde1bb124abf846ec74c67bc0559@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [6/6] camel git commit: CAMEL-9112: camel-script should not fail if script engine problem in OSGi. camel-script feature should not load groovy/jruby by default, use the camel-script-groovy / camel-script-jruby if you want to use them. Fixed the itest. CAMEL-9112: camel-script should not fail if script engine problem in OSGi. camel-script feature should not load groovy/jruby by default, use the camel-script-groovy / camel-script-jruby if you want to use them. Fixed the itest. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8e8f7aa4 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8e8f7aa4 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8e8f7aa4 Branch: refs/heads/master Commit: 8e8f7aa4c4468f50715c97b02c209cc61995aa38 Parents: 415b41b Author: Claus Ibsen Authored: Sat Sep 26 10:36:31 2015 +0200 Committer: Claus Ibsen Committed: Sat Sep 26 10:36:31 2015 +0200 ---------------------------------------------------------------------- .../builder/script/ScriptLanguageResolver.java | 2 +- .../org/apache/camel/script/osgi/Activator.java | 46 +++++++++++--------- .../features/src/main/resources/features.xml | 6 +-- .../camel/itest/karaf/AbstractFeatureTest.java | 16 ++++++- .../camel/itest/karaf/CamelScriptTest.java | 4 +- 5 files changed, 45 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java ---------------------------------------------------------------------- diff --git a/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java b/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java index a258243..a6c04c7 100644 --- a/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java +++ b/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java @@ -26,7 +26,7 @@ import org.apache.camel.spi.LanguageResolver; public class ScriptLanguageResolver implements LanguageResolver { public Language resolveLanguage(String name, CamelContext context) { - // only return if we can suppor the language + // only return if we can support the language if (ScriptBuilder.supportScriptLanguage(name)) { return new ScriptLanguage(name); } else { http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java ---------------------------------------------------------------------- diff --git a/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java b/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java index 33365b2..0e6bd66 100644 --- a/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java +++ b/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java @@ -21,13 +21,13 @@ import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Dictionary; import java.util.Enumeration; import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; - import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; @@ -210,13 +210,14 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer, Serv return getScriptNames(getFactory()); } + @SuppressWarnings("unchecked") private List getScriptNames(ScriptEngineFactory factory) { - List names = null; + List names; if (factory != null) { names = factory.getNames(); } else { // return an empty script name list - names = new ArrayList(0); + names = Collections.EMPTY_LIST; } return names; } @@ -224,7 +225,7 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer, Serv private ScriptEngineFactory getFactory() { try { BufferedReader in = IOHelper.buffered(new InputStreamReader(configFile.openStream())); - String className = null; + String className; while ((className = in.readLine()) != null) { if ("".equals(className.trim()) || className.trim().startsWith("#")) { continue; @@ -238,8 +239,9 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer, Serv } in.close(); Class cls = bundle.loadClass(className); + // OSGi classloading trouble (with jruby) if (!ScriptEngineFactory.class.isAssignableFrom(cls)) { - throw new IllegalStateException("Invalid ScriptEngineFactory: " + cls.getName()); + return null; } return (ScriptEngineFactory) cls.newInstance(); } catch (Exception e) { @@ -251,28 +253,32 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer, Serv public ScriptEngine resolveScriptEngine(String name) { try { ScriptEngineFactory factory = getFactory(); - List names = getScriptNames(factory); - for (String test : names) { - if (test.equals(name)) { - ClassLoader old = Thread.currentThread().getContextClassLoader(); - ScriptEngine engine; - try { - // JRuby seems to require the correct TCCL to call getScriptEngine - Thread.currentThread().setContextClassLoader(factory.getClass().getClassLoader()); - engine = factory.getScriptEngine(); - } finally { - Thread.currentThread().setContextClassLoader(old); + if (factory != null) { + List names = getScriptNames(factory); + for (String test : names) { + if (test.equals(name)) { + ClassLoader old = Thread.currentThread().getContextClassLoader(); + ScriptEngine engine; + try { + // JRuby seems to require the correct TCCL to call getScriptEngine + Thread.currentThread().setContextClassLoader(factory.getClass().getClassLoader()); + engine = factory.getScriptEngine(); + } finally { + Thread.currentThread().setContextClassLoader(old); + } + LOG.trace("Resolved ScriptEngineFactory: {} for expected name: {}", engine, name); + return engine; } - LOG.trace("Resolved ScriptEngineFactory: {} for expected name: {}", engine, name); - return engine; } + LOG.debug("ScriptEngineFactory: {} does not match expected name: {}", factory.getEngineName(), name); + return null; } - LOG.debug("ScriptEngineFactory: {} does not match expected name: {}", factory.getEngineName(), name); - return null; } catch (Exception e) { LOG.warn("Cannot create ScriptEngineFactory: " + e.getClass().getName(), e); return null; } + + return null; } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/platforms/karaf/features/src/main/resources/features.xml ---------------------------------------------------------------------- diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml index 16aa8d1..36e8ca8 100644 --- a/platforms/karaf/features/src/main/resources/features.xml +++ b/platforms/karaf/features/src/main/resources/features.xml @@ -1308,20 +1308,18 @@ mvn:com.google.code.scriptengines/scriptengines-javascript/${scriptengines-version} mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.scripting-api-1.0/${servicemix-specs-version} - mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.rhino/${rhino-bundle-version} + mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.rhino/${rhino-bundle-version} mvn:com.google.code.scriptengines/scriptengines-groovy/${scriptengines-version} mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.scripting-api-1.0/${servicemix-specs-version} - mvn:org.codehaus.groovy/groovy-all/${groovy-version} + mvn:org.codehaus.groovy/groovy-all/${groovy-version} camel-core mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.scripting-api-1.0/${servicemix-specs-version} mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.antlr/${antlr-bundle-version} mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.rhino/${rhino-bundle-version} - mvn:org.codehaus.groovy/groovy-all/${groovy-version} - mvn:org.jruby/jruby-complete/${jruby-version} mvn:org.apache.camel/camel-script/${project.version} http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java index 2e7272d..524198b 100644 --- a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java +++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java @@ -20,6 +20,8 @@ import java.io.File; import java.io.InputStream; import java.lang.reflect.Field; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; import javax.inject.Inject; @@ -206,11 +208,21 @@ public abstract class AbstractFeatureTest { return mavenOption; } - public static Option[] configure(String feature) { + public static Option[] configure(String mainFeature, String... extraFeatures) { switchPlatformEncodingToUTF8(); String karafVersion = getKarafVersion(); LOG.info("*** The karaf version is " + karafVersion + " ***"); + List list = new ArrayList(); + list.add("cxf-jaxb"); + list.add("camel-core"); + list.add("camel-spring"); + list.add("camel-" + mainFeature); + for (String extra : extraFeatures) { + list.add("camel-" + extra); + } + String[] features = list.toArray(new String[list.size()]); + Option[] options = new Option[] { // for remote debugging //org.ops4j.pax.exam.CoreOptions.vmOption("-Xdebug"), @@ -239,7 +251,7 @@ public abstract class AbstractFeatureTest { // install the cxf jaxb spec as the karaf doesn't provide it by default - KarafDistributionOption.features(getCamelKarafFeatureUrl(), "cxf-jaxb", "camel-core", "camel-spring", "camel-" + feature) + KarafDistributionOption.features(getCamelKarafFeatureUrl(), features) }; return options; http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java index 6348567..3e43264 100644 --- a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java +++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java @@ -29,12 +29,12 @@ public class CamelScriptTest extends AbstractFeatureTest { @Test public void test() throws Exception { - testLanguage(COMPONENT); + testLanguage("Groovy"); } @Configuration public static Option[] configure() { - return configure(COMPONENT); + return configure(COMPONENT, "script-groovy"); } } \ No newline at end of file