You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2015/02/20 20:28:09 UTC

svn commit: r1661199 - /sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java

Author: radu
Date: Fri Feb 20 19:28:09 2015
New Revision: 1661199

URL: http://svn.apache.org/r1661199
Log:
SLING-4448 - Make the RenderUnitProvider fail loudly if the provided identifier does not resolve to a script

* explicitly return a failure cause if the identifier does not resolve to a script

Modified:
    sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java

Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java?rev=1661199&r1=1661198&r2=1661199&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java (original)
+++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java Fri Feb 20 19:28:09 2015
@@ -21,6 +21,7 @@ package org.apache.sling.scripting.sight
 
 import javax.script.Bindings;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
@@ -28,9 +29,9 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.scripting.sightly.ResourceResolution;
+import org.apache.sling.scripting.sightly.SightlyException;
 import org.apache.sling.scripting.sightly.impl.engine.SightlyScriptEngineFactory;
 import org.apache.sling.scripting.sightly.impl.engine.UnitLoader;
 import org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl;
@@ -68,16 +69,22 @@ public class RenderUnitProvider implemen
     public ProviderOutcome provide(String identifier, RenderContext renderContext, Bindings arguments) {
         if (identifier.endsWith("." + SightlyScriptEngineFactory.EXTENSION)) {
             Bindings globalBindings = renderContext.getBindings();
-            Resource renderUnitResource = locateResource(globalBindings, identifier, renderContext);
+            SlingHttpServletRequest request = (SlingHttpServletRequest) globalBindings.get(SlingBindings.REQUEST);
+            Resource resource = ResourceResolution.getResourceForRequest(renderContext.getScriptResourceResolver(), request);
+            Resource renderUnitResource = ResourceResolution.getResourceFromSearchPath(resource, identifier);
+            if (renderUnitResource == null) {
+                String resourceSuperType = resource.getResourceSuperType();
+                StringBuilder errorMessage = new StringBuilder("Cannot find resource ");
+                errorMessage.append(identifier).append(" for base path ").append(resource.getPath());
+                if (StringUtils.isNotEmpty(resourceSuperType)) {
+                    errorMessage.append(" with resource super type ").append(resourceSuperType);
+                }
+                errorMessage.append(".");
+                return ProviderOutcome.failure(new SightlyException(errorMessage.toString()));
+            }
             RenderUnit renderUnit = unitLoader.createUnit(renderUnitResource, globalBindings, (RenderContextImpl) renderContext);
             return ProviderOutcome.success(renderUnit);
         }
         return ProviderOutcome.failure();
     }
-
-    private Resource locateResource(Bindings bindings, String script, RenderContext renderContext) {
-        SlingHttpServletRequest request = (SlingHttpServletRequest) bindings.get(SlingBindings.REQUEST);
-        Resource resource = ResourceResolution.getResourceForRequest(renderContext.getScriptResourceResolver(), request);
-        return ResourceResolution.getResourceFromSearchPath(resource, script);
-    }
 }