You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/08/13 12:19:48 UTC

svn commit: r685500 - /incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java

Author: cziegeler
Date: Wed Aug 13 03:19:45 2008
New Revision: 685500

URL: http://svn.apache.org/viewvc?rev=685500&view=rev
Log:
SLING-610 : Decrement recursion counter after include.

Modified:
    incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java

Modified: incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java?rev=685500&r1=685499&r2=685500&view=diff
==============================================================================
--- incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java (original)
+++ incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java Wed Aug 13 03:19:45 2008
@@ -151,8 +151,8 @@
 
     private SlingAuthenticator slingAuthenticator;
 
-    public static final String INCLUDE_COUNTER = "Sling.ScriptHelper.include.counter";
-    public static final int MAX_INCLUDE_RECURSION_LEVEL = 50;
+    private static final String INCLUDE_COUNTER = "Sling.ScriptHelper.include.counter";
+    private static final int MAX_INCLUDE_RECURSION_LEVEL = 50;
 
     public static class InfiniteIncludeLoopException extends SlingException {
         InfiniteIncludeLoopException(String path) {
@@ -372,22 +372,26 @@
 
         checkRecursionLevel(request, resolvedURL.getResourcePath());
 
-        // we need a SlingHttpServletRequest/SlingHttpServletResponse tupel to continue
-        SlingHttpServletRequest cRequest = RequestData.toSlingHttpServletRequest(request);
-        SlingHttpServletResponse cResponse = RequestData.toSlingHttpServletResponse(response);
-
-        // get the request data (and btw check the correct type)
-        RequestData requestData = RequestData.getRequestData(cRequest);
-        ContentData contentData = requestData.pushContent(resource, resolvedURL);
-
         try {
-            // resolve the servlet
-            Servlet servlet = getServletResolver().resolveServlet(cRequest);
-            contentData.setServlet(servlet);
+            // we need a SlingHttpServletRequest/SlingHttpServletResponse tupel to continue
+            SlingHttpServletRequest cRequest = RequestData.toSlingHttpServletRequest(request);
+            SlingHttpServletResponse cResponse = RequestData.toSlingHttpServletResponse(response);
+
+            // get the request data (and btw check the correct type)
+            RequestData requestData = RequestData.getRequestData(cRequest);
+            ContentData contentData = requestData.pushContent(resource, resolvedURL);
 
-            processRequest(cRequest, cResponse);
+            try {
+                // resolve the servlet
+                Servlet servlet = getServletResolver().resolveServlet(cRequest);
+                contentData.setServlet(servlet);
+
+                processRequest(cRequest, cResponse);
+            } finally {
+                requestData.popContent();
+            }
         } finally {
-            requestData.popContent();
+            decreaseRecursionLevel(request);
         }
     }
 
@@ -405,6 +409,19 @@
         request.setAttribute(INCLUDE_COUNTER, recursionLevel);
     }
 
+    /** Decrease the recursion counter  */
+    protected void decreaseRecursionLevel(ServletRequest request) {
+        // this should never be null, but we better do a sanity check
+        final Integer recursionLevel = (Integer)request.getAttribute(INCLUDE_COUNTER);
+        if ( recursionLevel != null ) {
+            if ( recursionLevel == 1 ) {
+                request.removeAttribute(INCLUDE_COUNTER);
+            } else {
+                request.setAttribute(INCLUDE_COUNTER, new Integer(recursionLevel.intValue() -1));
+            }
+        }
+    }
+
     public void processRequest(SlingHttpServletRequest request,
             SlingHttpServletResponse response) throws IOException,
             ServletException {
@@ -797,7 +814,7 @@
                         return ParameterSupport.getInstance(getRequest());
                     }
                 };
-                
+
                 return authenticator.authenticate(request, response);
 
             } catch (MissingRepositoryException mre) {