Repository: camel Updated Branches: refs/heads/camel-2.14.x e5487e36e -> 28acb5684
[CAMEL-8338] ScriptBuilder relies on TCCL to discover engines Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/28acb568 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/28acb568 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/28acb568 Branch: refs/heads/camel-2.14.x Commit: 28acb568489f78cee4278059d7f9ab8f1cca1d21 Parents: e5487e3 Author: Thomas Diesler <thomas.dies...@jboss.com> Authored: Thu Feb 12 10:20:16 2015 +0100 Committer: Thomas Diesler <thomas.dies...@jboss.com> Committed: Thu Feb 12 10:20:16 2015 +0100 ---------------------------------------------------------------------- .../camel/builder/script/ScriptBuilder.java | 23 ++++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/28acb568/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java ---------------------------------------------------------------------- diff --git a/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java b/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java index eda38b0..a4abde9 100644 --- a/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java +++ b/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java @@ -24,6 +24,7 @@ import java.io.StringReader; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; + import javax.script.Compilable; import javax.script.CompiledScript; import javax.script.ScriptContext; @@ -49,7 +50,7 @@ import org.slf4j.LoggerFactory; * A builder class for creating {@link Processor}, {@link Expression} and * {@link Predicate} objects using the JSR 223 scripting engine. * - * @version + * @version */ public class ScriptBuilder implements Expression, Predicate, Processor { @@ -324,7 +325,18 @@ public class ScriptBuilder implements Expression, Predicate, Processor { } protected static ScriptEngine createScriptEngine(String language) { - ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = createScriptEngine(language, ScriptBuilder.class.getClassLoader()); + if (engine == null) { + engine = createScriptEngine(language, Thread.currentThread().getContextClassLoader()); + } + if (engine == null) { + throw new IllegalArgumentException("No script engine could be created for: " + language); + } + return engine; + } + + private static ScriptEngine createScriptEngine(String language, ClassLoader classLoader) { + ScriptEngineManager manager = new ScriptEngineManager(classLoader); ScriptEngine engine = null; // some script names has alias @@ -343,10 +355,7 @@ public class ScriptBuilder implements Expression, Predicate, Processor { if (engine == null) { engine = checkForOSGiEngine(language); } - if (engine == null) { - throw new IllegalArgumentException("No script engine could be created for: " + language); - } - if (isPython(language)) { + if (engine != null && isPython(language)) { ScriptContext context = engine.getContext(); context.setAttribute("com.sun.script.jython.comp.mode", "eval", ScriptContext.ENGINE_SCOPE); } @@ -383,7 +392,7 @@ public class ScriptBuilder implements Expression, Predicate, Processor { } catch (ScriptException e) { if (LOG.isDebugEnabled()) { LOG.debug("Script evaluation failed: " + e.getMessage(), e); - } + } if (e.getCause() != null) { throw createScriptEvaluationException(e.getCause()); } else {