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;
+    }
 }


Reply via email to