Author: radu Date: Mon Aug 10 11:23:53 2015 New Revision: 1695020 URL: http://svn.apache.org/r1695020 Log: SLING-4935 - Rhino scripts not based on a resource will not get cached correctly by the Sling Script Cache
* avoid caching scripts for which a name cannot be extracted from the bindings / script resource Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java?rev=1695020&r1=1695019&r2=1695020&view=diff ============================================================================== --- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java (original) +++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java Mon Aug 10 11:23:53 2015 @@ -117,7 +117,10 @@ public class RhinoJavaScriptEngine exten return slingCompiledScript; } }; - scriptCache.putScript(cachedScript); + // SLING-4935 avoid caching scripts for which we cannot determine a name + if (!scriptName.equals(NO_SCRIPT_NAME)) { + scriptCache.putScript(cachedScript); + } LOGGER.debug("Added {} script to Script Cache.", scriptName); return slingCompiledScript; } catch (IOException e) { @@ -226,13 +229,6 @@ public class RhinoJavaScriptEngine exten @Override public Object eval(ScriptContext scriptContext) throws ScriptException { Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE); - String scriptName = "NO_SCRIPT_NAME"; - { - SlingScriptHelper helper = (SlingScriptHelper) bindings.get(SlingBindings.SLING); - if (helper != null) { - scriptName = helper.getScript().getScriptResource().getPath(); - } - } // container for replaced properties Map<String, Object> replacedProperties = null; @@ -314,9 +310,8 @@ public class RhinoJavaScriptEngine exten // prevent variables to be pushed back in case of errors isTopLevelCall = false; - - final ScriptException se = new ScriptException( - "Failure running script " + scriptName + ": " + t.getMessage()); + String scriptName = getScriptName(scriptContext); + final ScriptException se = new ScriptException("Failure running script " + scriptName + ": " + t.getMessage()); se.initCause(t); throw se; @@ -362,4 +357,17 @@ public class RhinoJavaScriptEngine exten } return NO_SCRIPT_NAME; } + + private String getScriptName(ScriptContext scriptContext) { + Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE); + String scriptName = (String) bindings.get(ScriptEngine.FILENAME); + if (scriptName != null && !"".equals(scriptName)) { + return scriptName; + } + SlingScriptHelper sling = (SlingScriptHelper) bindings.get(SlingBindings.SLING); + if (sling != null) { + return sling.getScript().getScriptResource().getPath(); + } + return NO_SCRIPT_NAME; + } }