From 28acb568489f78cee4278059d7f9ab8f1cca1d21 Mon Sep 17 00:00:00 2001 From: Thomas Diesler Date: Thu, 12 Feb 2015 10:20:16 +0100 Subject: [PATCH] [CAMEL-8338] ScriptBuilder relies on TCCL to discover engines --- .../camel/builder/script/ScriptBuilder.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) 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 eda38b0d072c8..a4abde90dba2d 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.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 @@ * 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 @@ protected static ScriptEngineFactory lookupScriptEngineFactory(String language) } 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 @@ protected static ScriptEngine createScriptEngine(String language) { 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 @@ protected Object evaluateScript(Exchange exchange) { } catch (ScriptException e) { if (LOG.isDebugEnabled()) { LOG.debug("Script evaluation failed: " + e.getMessage(), e); - } + } if (e.getCause() != null) { throw createScriptEvaluationException(e.getCause()); } else {