You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2017/09/19 14:15:50 UTC

svn commit: r1808882 - in /sling/whiteboard/pauls: api/ api/src/main/java/org/apache/sling/api/ api/src/main/java/org/apache/sling/api/request/ engine/ engine/src/main/java/org/apache/sling/engine/impl/ engine/src/main/java/org/apache/sling/engine/impl...

Author: pauls
Date: Tue Sep 19 14:15:50 2017
New Revision: 1808882

URL: http://svn.apache.org/viewvc?rev=1808882&view=rev
Log:
Add a fork of the api and the engine to prototype using the default servlet 3.1 support for multipart requests

Added:
    sling/whiteboard/pauls/api/
      - copied from r1808880, sling/trunk/bundles/api/
    sling/whiteboard/pauls/engine/
      - copied from r1808880, sling/trunk/bundles/engine/
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportFilter.java
Removed:
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportConfigurer.java
Modified:
    sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/SlingHttpServletRequest.java
    sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameter.java
    sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameterMap.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupportHttpServletRequestWrapper.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java
    sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java

Modified: sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/SlingHttpServletRequest.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/SlingHttpServletRequest.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/SlingHttpServletRequest.java (original)
+++ sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/SlingHttpServletRequest.java Tue Sep 19 14:15:50 2017
@@ -109,6 +109,7 @@ public interface SlingHttpServletRequest
      * @see RequestParameterMap#getValue(String)
      * @throws IllegalArgumentException if name is <code>null</code>.
      */
+    @Deprecated
     @CheckForNull RequestParameter getRequestParameter(@Nonnull String name);
 
     /**
@@ -129,6 +130,7 @@ public interface SlingHttpServletRequest
      * @see RequestParameterMap#getValues(String)
      * @throws IllegalArgumentException if name is <code>null</code>.
      */
+    @Deprecated
     @CheckForNull RequestParameter[] getRequestParameters(@Nonnull String name);
 
     /**
@@ -145,6 +147,7 @@ public interface SlingHttpServletRequest
      *         parameter map are of type String. The values in the parameter map
      *         are of type {@link RequestParameter} array (<code>RequestParameter[]</code>).
      */
+    @Deprecated
    @Nonnull RequestParameterMap getRequestParameterMap();
 
     /**
@@ -157,6 +160,7 @@ public interface SlingHttpServletRequest
      *         order.
      * @since 2.3  (Sling API Bundle 2.6.0)
      */
+    @Deprecated
     @Nonnull List<RequestParameter> getRequestParameterList();
 
     /**

Modified: sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameter.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameter.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameter.java (original)
+++ sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameter.java Tue Sep 19 14:15:50 2017
@@ -39,6 +39,7 @@ import org.osgi.annotation.versioning.Pr
  * @see org.apache.sling.api.SlingHttpServletRequest#getRequestParameterMap()
  */
 @ProviderType
+@Deprecated
 public interface RequestParameter {
 
     /**

Modified: sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameterMap.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameterMap.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameterMap.java (original)
+++ sling/whiteboard/pauls/api/src/main/java/org/apache/sling/api/request/RequestParameterMap.java Tue Sep 19 14:15:50 2017
@@ -31,6 +31,7 @@ import org.osgi.annotation.versioning.Pr
  * a request.
  */
 @ProviderType
+@Deprecated
 public interface RequestParameterMap extends Map<String, RequestParameter[]> {
 
     /**

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java Tue Sep 19 14:15:50 2017
@@ -24,6 +24,7 @@ import java.net.URL;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.sling.api.request.RequestParameter;
 import org.apache.sling.api.request.RequestProgressTracker;
 import org.apache.sling.auth.core.AuthenticationSupport;
 import org.apache.sling.commons.mime.MimeTypeService;
@@ -125,8 +126,10 @@ class SlingHttpContext extends ServletCo
         if (authenticator != null) {
 
             // SLING-559: ensure correct parameter handling according to
-            // ParameterSupport
-            request = ParameterSupport.getParameterSupportRequestWrapper(request);
+            // ParameterSupport if path is configured to match
+            if (ParameterSupport.matches(request.getRequestURI())) {
+                request = ParameterSupport.getParameterSupportRequestWrapper(request);
+            }
 
             final boolean result = authenticator.handleSecurity(request, response);
             t.logTimer(timerName, "authenticator {0} returns {1}", authenticator, result);

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java Tue Sep 19 14:15:50 2017
@@ -18,27 +18,6 @@
  */
 package org.apache.sling.engine.impl;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.Part;
-
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestDispatcherOptions;
 import org.apache.sling.api.request.RequestParameter;
@@ -48,12 +27,41 @@ import org.apache.sling.api.request.Requ
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.engine.impl.helper.NullResourceBundle;
-import org.apache.sling.engine.impl.parameters.ParameterSupport;
 import org.apache.sling.engine.impl.request.ContentData;
 import org.apache.sling.engine.impl.request.RequestData;
 import org.apache.sling.engine.impl.request.SlingRequestDispatcher;
 import org.osgi.service.http.HttpContext;
 import org.osgi.service.useradmin.Authorization;
+import sun.misc.IOUtils;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.Part;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
 
 public class SlingHttpServletRequestImpl extends HttpServletRequestWrapper implements
         SlingHttpServletRequest {
@@ -91,10 +99,6 @@ public class SlingHttpServletRequestImpl
 
     //---------- SlingHttpServletRequest interface
 
-    ParameterSupport getParameterSupport() {
-        return this.getRequestData().getParameterSupport();
-    }
-
     @Override
     public Resource getResource() {
         final ContentData cd = getRequestData().getContentData();
@@ -146,51 +150,42 @@ public class SlingHttpServletRequestImpl
     }
 
     /**
-     * @see javax.servlet.ServletRequestWrapper#getParameter(java.lang.String)
-     */
-    @Override
-    public String getParameter(String name) {
-        return this.getParameterSupport().getParameter(name);
-    }
-
-    /**
-     * @see javax.servlet.ServletRequestWrapper#getParameterMap()
-     */
-    @Override
-    public Map<String, String[]> getParameterMap() {
-        return this.getParameterSupport().getParameterMap();
-    }
-
-    /**
-     * @see javax.servlet.ServletRequestWrapper#getParameterNames()
-     */
-    @Override
-    public Enumeration<String> getParameterNames() {
-        return this.getParameterSupport().getParameterNames();
-    }
-
-    /**
-     * @see javax.servlet.ServletRequestWrapper#getParameterValues(java.lang.String)
-     */
-    @Override
-    public String[] getParameterValues(String name) {
-        return this.getParameterSupport().getParameterValues(name);
-    }
-
-    /**
-     * @see org.apache.sling.api.SlingHttpServletRequest#getRequestParameter(java.lang.String)
-     */
-    @Override
-    public RequestParameter getRequestParameter(String name) {
-        return this.getParameterSupport().getRequestParameter(name);
-    }
-
-    /**
      * @see org.apache.sling.api.SlingHttpServletRequest#getRequestParameters(java.lang.String)
      */
     @Override
     public RequestParameter[] getRequestParameters(String name) {
-        return this.getParameterSupport().getRequestParameters(name);
+        if (getContentType() != null && getContentType().startsWith("multipart/form-data")) {
+            try {
+                List<RequestParameter> result = new ArrayList<>();
+                for (Part part : getParts()) {
+                    if (part.getName().equals(name)) {
+                        result.add(new PartRequestParameterImpl(name, part));
+                    }
+                }
+                if (!result.isEmpty()) {
+                    return result.toArray(new RequestParameter[0]);
+                } else {
+                    return null;
+                }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        } else {
+            String[] values = getRequest().getParameterValues(name);
+            if (values != null) {
+                RequestParameter[] result = new RequestParameter[values.length];
+                for (int i = 0; i < values.length; i++) {
+                    try {
+                        result[i] = new StringRequestParameterImpl(name, values[i], values[i].getBytes(getEncoding()));
+                    } catch (UnsupportedEncodingException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+                return result;
+            } else {
+                return null;
+            }
+        }
     }
 
     /**
@@ -198,7 +193,7 @@ public class SlingHttpServletRequestImpl
      */
     @Override
     public RequestParameterMap getRequestParameterMap() {
-        return this.getParameterSupport().getRequestParameterMap();
+        return new RequestParametersMapImpl();
     }
 
     /**
@@ -206,7 +201,28 @@ public class SlingHttpServletRequestImpl
      */
     @Override
     public List<RequestParameter> getRequestParameterList() {
-        return this.getParameterSupport().getRequestParameterList();
+        List<RequestParameter> result = new ArrayList<>();
+        if (getContentType().startsWith("multipart/form-data")) {
+            try {
+                for (Part part : getParts()) {
+                    RequestParameter[] params = getRequestParameters(part.getName());
+                    if (params != null) {
+                        result.addAll(Arrays.asList(params));
+                    }
+                }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+        else {
+            for (Enumeration<String> names = getParameterNames(); names.hasMoreElements(); ) {
+                RequestParameter[] params = getRequestParameters(names.nextElement());
+                if (params != null) {
+                    result.addAll(Arrays.asList(params));
+                }
+            }
+        }
+        return result;
     }
 
     /**
@@ -236,6 +252,15 @@ public class SlingHttpServletRequestImpl
         return (cd == null) ? null : cd.getRequestPathInfo();
     }
 
+    @Override
+    public RequestParameter getRequestParameter(String name) {
+        RequestParameter[] params = getRequestParameters(name);
+        if (params != null && params.length > 0) {
+            return params[0];
+        }
+        return null;
+    }
+
     /**
      * @see org.apache.sling.api.SlingHttpServletRequest#getResourceBundle(java.util.Locale)
      */
@@ -345,15 +370,6 @@ public class SlingHttpServletRequestImpl
         return pathInfo;
     }
 
-    public Part getPart(String name) {
-        return (Part) this.getParameterSupport().getPart(name);
-    }
-
-    @SuppressWarnings("unchecked")
-    public Collection<Part> getParts() {
-        return (Collection<Part>) this.getParameterSupport().getParts();
-    }
-
     /**
      * A <code>UserPrincipal</code> ...
      */
@@ -406,4 +422,206 @@ public class SlingHttpServletRequestImpl
         }
     }
 
+    private String getEncoding(Part target) {
+        try {
+            Part part = getPart("_charset_");
+            if (part != null) {
+                return new String(org.apache.commons.io.IOUtils.toByteArray(part.getInputStream()), getCharacterEncoding() != null ? getCharacterEncoding() : "UTF-8");
+            }
+        } catch (Exception e) {
+            // Don't care
+        }
+        if (getCharacterEncoding() != null) {
+            return getCharacterEncoding();
+        }
+
+        return "UTF-8";
+    }
+
+    private String getEncoding() {
+        String part = getParameter("_charset_");
+        if (part != null) {
+            return part;
+        }
+        if (getCharacterEncoding() != null) {
+            return getCharacterEncoding();
+        }
+
+        return "UTF-8";
+    }
+
+    private static final class StringRequestParameterImpl implements RequestParameter {
+        private final String name;
+        private final String value;
+        private final byte[] bytes;
+
+        StringRequestParameterImpl(String name, String value, byte[] bytes) {
+            this.name = name;
+            this.value = value;
+            this.bytes = bytes;
+        }
+
+        @Override
+        public String getName() {
+            return this.name;
+        }
+
+        @Override
+        public boolean isFormField() {
+            return true;
+        }
+
+        @Override
+        public String getContentType() {
+            return null;
+        }
+
+        @Override
+        public long getSize() {
+            return this.bytes.length;
+        }
+
+        @Override
+        public byte[] get() {
+            return this.bytes.clone();
+        }
+
+        @Override
+        public InputStream getInputStream() throws IOException {
+            return new ByteArrayInputStream(this.bytes);
+        }
+
+        @Override
+        public String getFileName() {
+            return null;
+        }
+
+        @Override
+        public String getString() {
+            return this.value;
+        }
+
+        @Override
+        public String getString(String encoding) throws UnsupportedEncodingException {
+            return new String(this.bytes, encoding);
+        }
+    }
+
+    private final class PartRequestParameterImpl implements RequestParameter {
+        private final String name;
+        private final Part part;
+
+        PartRequestParameterImpl(String name, Part part) {
+            this.name = name;
+            this.part = part;
+        }
+
+        @Override
+        public String getName() {
+            return this.name;
+        }
+
+        @Override
+        public boolean isFormField() {
+            String contentDisposition = this.part.getHeader("content-disposition");
+            return contentDisposition != null && contentDisposition.contains("form-data") && ! contentDisposition.contains("filename");
+        }
+
+        @Override
+        public String getContentType() {
+            return this.part.getContentType();
+        }
+
+        @Override
+        public long getSize() {
+            return this.part.getSize();
+        }
+
+        @Override
+        public byte[] get() {
+            ByteArrayOutputStream tmp = new ByteArrayOutputStream();
+
+            byte[] buffer = new byte[8 * 1024];
+
+            try (InputStream input = this.part.getInputStream()) {
+
+                for (int i = input.read(buffer); i != -1; i = input.read(buffer)) {
+                    tmp.write(buffer, 0, i);
+                }
+            } catch (IOException e) {
+                throw new RuntimeException();
+            }
+            return tmp.toByteArray();
+        }
+
+        @Override
+        public InputStream getInputStream() throws IOException {
+            return this.part.getInputStream();
+        }
+
+        @Override
+        public String getFileName() {
+            return this.part.getSubmittedFileName();
+        }
+
+        @Override
+        public String getString() {
+            try {
+                return getString(getEncoding(this.part));
+            } catch (UnsupportedEncodingException e) {
+                return new String(get());
+            }
+        }
+
+        @Override
+        public String getString(String encoding) throws UnsupportedEncodingException {
+            return new String(get(), encoding);
+        }
+    }
+
+    private final class RequestParametersMapImpl extends AbstractMap<String, RequestParameter[]> implements RequestParameterMap {
+        @Override
+        public RequestParameter[] put(String key, RequestParameter[] value) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public Set<Entry<String, RequestParameter[]>> entrySet() {
+            Map<String, Entry<String, RequestParameter[]>> result = new LinkedHashMap<>();
+            if (getContentType() != null && getContentType().startsWith("multipart/form-data")) {
+                try {
+                    for (Part part : getParts()) {
+                        if (!result.containsKey(part.getName())) {
+                            result.put(part.getName(), new AbstractMap.SimpleImmutableEntry<>(part.getName(), getRequestParameters(part.getName())));
+                        }
+                    }
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            else {
+                for (Enumeration<String> params = getParameterNames(); params.hasMoreElements(); ) {
+                    String name = params.nextElement();
+                    result.put(name, new AbstractMap.SimpleImmutableEntry<>(name, getRequestParameters(name)));
+                }
+            }
+            return new HashSet<>(result.values());
+        }
+
+        @Override
+        public RequestParameter[] getValues(String name) {
+
+            return getRequestParameters(name);
+        }
+
+        @Override
+        public RequestParameter getValue(String name) {
+            RequestParameter[] params = getRequestParameters(name);
+            if (params != null && params.length > 0) {
+                return params[0];
+            }
+            return null;
+        }
+    }
+
 }

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java Tue Sep 19 14:15:50 2017
@@ -31,6 +31,7 @@ import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
+import javax.servlet.annotation.MultipartConfig;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -76,6 +77,7 @@ import org.slf4j.LoggerFactory;
         Constants.SERVICE_DESCRIPTION + "=Sling Servlet"
 })
 @Designate(ocd=SlingMainServlet.Config.class)
+@MultipartConfig
 public class SlingMainServlet extends GenericServlet {
 
     @ObjectClassDefinition(name ="Apache Sling Main Servlet",

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java Tue Sep 19 14:15:50 2017
@@ -53,7 +53,6 @@ import org.apache.sling.engine.impl.filt
 import org.apache.sling.engine.impl.filter.ServletFilterManager;
 import org.apache.sling.engine.impl.filter.ServletFilterManager.FilterChainType;
 import org.apache.sling.engine.impl.filter.SlingComponentFilterChain;
-import org.apache.sling.engine.impl.parameters.ParameterSupport;
 import org.apache.sling.engine.impl.request.ContentData;
 import org.apache.sling.engine.impl.request.RequestData;
 import org.apache.sling.engine.impl.request.RequestHistoryConsolePlugin;
@@ -240,19 +239,7 @@ public class SlingRequestProcessorImpl i
     public void processRequest(final HttpServletRequest servletRequest,
             final HttpServletResponse servletResponse,
             final ResourceResolver resourceResolver) throws IOException {
-        // set the marker for the parameter support
-        final Object oldValue = servletRequest.getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING);
-        servletRequest.setAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING, Boolean.TRUE);
-        try {
-            this.doProcessRequest(servletRequest, servletResponse, resourceResolver);
-        } finally {
-            // restore the old value
-            if ( oldValue != null ) {
-                servletRequest.setAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING, oldValue);
-            } else {
-                servletRequest.removeAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING);
-            }
-        }
+       this.doProcessRequest(servletRequest, servletResponse, resourceResolver);
     }
 
     /**

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java Tue Sep 19 14:15:50 2017
@@ -103,7 +103,7 @@ public class ContainerRequestParameter e
     }
 
     /**
-     * @see org.apache.sling.api.request.RequestParameter#getString(java.lang.String)
+     * @see org.apache.sling.api.request.RequestParameter#getString(String)
      */
     public String getString(String encoding)
             throws UnsupportedEncodingException {

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java Tue Sep 19 14:15:50 2017
@@ -18,12 +18,12 @@
  */
 package org.apache.sling.engine.impl.parameters;
 
+import org.apache.commons.fileupload.FileItem;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 
-import org.apache.commons.fileupload.FileItem;
-
 /**
  * The <code>MultipartRequestParameter</code> represents a request parameter
  * from a multipart/form-data POST request.

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java Tue Sep 19 14:15:50 2017
@@ -18,6 +18,11 @@
  */
 package org.apache.sling.engine.impl.parameters;
 
+import org.apache.sling.api.request.RequestParameter;
+import org.apache.sling.api.request.RequestParameterMap;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.Part;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -25,12 +30,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.http.Part;
-
-import org.apache.sling.api.request.RequestParameter;
-import org.apache.sling.api.request.RequestParameterMap;
-import org.slf4j.LoggerFactory;
-
 /**
  * The <code>ParameterMap</code> TODO
  */
@@ -136,9 +135,11 @@ public class ParameterMap extends Linked
 
     public Collection<?> getParts() {
         final ArrayList<Part> parts = new ArrayList<Part>(this.size());
-        for (RequestParameter[] param : this.values()) {
-            if (param.length >= 1 && param[0] instanceof MultipartRequestParameter) {
-                parts.add(new SlingPart((MultipartRequestParameter) param[0]));
+        for (RequestParameter[] params : this.values()) {
+            for (RequestParameter param : params) {
+                if (param instanceof MultipartRequestParameter) {
+                    parts.add(new SlingPart((MultipartRequestParameter) param));
+                }
             }
         }
         return parts;

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java Tue Sep 19 14:15:50 2017
@@ -18,21 +18,6 @@
  */
 package org.apache.sling.engine.impl.parameters;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.RequestContext;
@@ -45,6 +30,21 @@ import org.apache.sling.api.resource.Res
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.regex.Pattern;
+
 public class ParameterSupport {
 
     /**
@@ -79,6 +79,8 @@ public class ParameterSupport {
     /** value of upload mode header/parameter indicating streaming is requested */
     public static final String STREAM_UPLOAD = "stream";
 
+    private static String[] patterns = null;
+
     /** default log */
     private final Logger log = LoggerFactory.getLogger(getClass());
 
@@ -155,12 +157,14 @@ public class ParameterSupport {
 
     static void configure(final long maxRequestSize, final String location, final long maxFileSize,
             final int fileSizeThreshold,
-            final boolean checkForAdditionalParameters) {
+            final boolean checkForAdditionalParameters,
+            final String[] patterns) {
         ParameterSupport.maxRequestSize = (maxRequestSize > 0) ? maxRequestSize : -1;
         ParameterSupport.location = (location != null) ? new File(location) : null;
         ParameterSupport.maxFileSize = (maxFileSize > 0) ? maxFileSize : -1;
         ParameterSupport.fileSizeThreshold = (fileSizeThreshold > 0) ? fileSizeThreshold : 256000;
         ParameterSupport.checkForAdditionalParameters = checkForAdditionalParameters;
+        ParameterSupport.patterns = patterns;
     }
 
     private ParameterSupport(HttpServletRequest servletRequest) {
@@ -175,6 +179,17 @@ public class ParameterSupport {
         return this.requestDataUsed;
     }
 
+    public static boolean matches(String path) {
+        if (ParameterSupport.patterns != null) {
+            for (String pattern : ParameterSupport.patterns) {
+                if (path.startsWith(pattern)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     public String getParameter(String name) {
         return getRequestParameterMapInternal().getStringValue(name);
     }

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupportHttpServletRequestWrapper.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupportHttpServletRequestWrapper.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupportHttpServletRequestWrapper.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupportHttpServletRequestWrapper.java Tue Sep 19 14:15:50 2017
@@ -18,13 +18,12 @@
  */
 package org.apache.sling.engine.impl.parameters;
 
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Map;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
 import javax.servlet.http.Part;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Map;
 
 public class ParameterSupportHttpServletRequestWrapper extends HttpServletRequestWrapper {
     public ParameterSupportHttpServletRequestWrapper(HttpServletRequest request) {

Added: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportFilter.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportFilter.java?rev=1808882&view=auto
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportFilter.java (added)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportFilter.java Tue Sep 19 14:15:50 2017
@@ -0,0 +1,192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.engine.impl.parameters;
+
+import org.apache.sling.settings.SlingSettingsService;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.regex.Pattern;
+
+@Component(
+        name = RequestParameterSupportFilter.PID,
+        property = {
+                Constants.SERVICE_RANKING + ":Integer=" + Integer.MAX_VALUE,
+                "osgi.http.whiteboard.context.select=(osgi.http.whiteboard.context.name=org.apache.sling)"
+        },
+        service = Filter.class)
+@Designate(ocd=RequestParameterSupportFilter.Config.class)
+public class RequestParameterSupportFilter implements Filter {
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        if (request instanceof HttpServletRequest) {
+            log.info("Request: " + ((HttpServletRequest) request).getRequestURI());
+
+            chain.doFilter(ParameterSupport.getParameterSupportRequestWrapper((HttpServletRequest) request), response);
+        }
+        else {
+            chain.doFilter(request, response);
+        }
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+
+    @ObjectClassDefinition(name = "Apache Sling Request Parameter Handling",
+        description = "Configures Sling's request parameter handling.")
+    public @interface Config {
+        @AttributeDefinition(
+                name = "Default Parameter Encoding",
+                description = "The default request parameter encoding used to decode request "
+                    + "parameters into strings. If this property is not set the default encoding "
+                    + "is 'ISO-8859-1' as mandated by the Servlet API spec. This default encoding "
+                    + "is used if the '_charset_' request parameter is not set to another "
+                    + "(supported) character encoding. Applications being sure to always use the "
+                    + "same encoding (e.g. UTF-8) can set this default here and may omit the "
+                    + "'_charset_' request parameter")
+        String sling_default_parameter_encoding() default Util.ENCODING_DIRECT;
+
+        @AttributeDefinition(
+                name = "Maximum POST Parameters",
+                description = "The maximum number of parameters supported. To prevent a DOS-style attack with an "
+                    + "overrunning number of parameters the number of parameters supported can be limited. This "
+                    + "includes all of the query string as well as application/x-www-form-urlencoded and "
+                    + "multipart/form-data parameters. The default value is " + ParameterMap.DEFAULT_MAX_PARAMS + ".")
+       int sling_default_max_parameters() default ParameterMap.DEFAULT_MAX_PARAMS;
+
+        @AttributeDefinition(
+                name = "Temporary File Location",
+                description = "The temporary directory where uploaded files are written to disk. The default is "
+                    + "null, which means the directory given by the 'java.io.tmpdir' system property.")
+        String file_location();
+
+        @AttributeDefinition(
+                name = "File Save Threshold",
+                description = "The size threshold after which the file will be written to disk. The default is 256KB.")
+        int file_threshold() default 256000;
+
+        @AttributeDefinition(
+                name = "Maximum File Size",
+                description = "The maximum size allowed for uploaded files. The default is -1, which means unlimited.")
+        long file_max() default -1;
+
+        @AttributeDefinition(
+                name = "Maximum Request Size",
+                description = "The maximum size allowed for multipart/form-data requests. The default is -1, which means unlimited.")
+        long request_max() default -1;
+
+        @AttributeDefinition(
+                name = "Check Additional Parameters",
+                description = "Enable this if you want to include request parameters added through the container, e.g through a valve.")
+        boolean sling_default_parameter_checkForAdditionalContainerParameters() default false;
+
+        @AttributeDefinition(
+                name = "Path patterns",
+                description = "Requests with a path matching the pattern will get parameter support - default is null (i.e., none)"
+        )
+        String[] osgi_http_whiteboard_filter_pattern();
+    }
+
+    static final String PID = "org.apache.sling.engine.parameters";
+
+    /** default log */
+    private final Logger log = LoggerFactory.getLogger(PID);
+
+
+
+    @Reference
+    private SlingSettingsService settignsService;
+
+    @Activate
+    private void configure(final Config config) {
+        final String fixEncoding = config.sling_default_parameter_encoding();
+        final int maxParams = config.sling_default_max_parameters();
+        final long maxRequestSize = config.request_max();
+        final String fileLocation = getFileLocation(config.file_location());
+        final long maxFileSize = config.file_max();
+        final int fileSizeThreshold = config.file_threshold();
+        final boolean checkAddParameters = config.sling_default_parameter_checkForAdditionalContainerParameters();
+        String[] pattern = config.osgi_http_whiteboard_filter_pattern();
+
+        if (log.isInfoEnabled()) {
+            log.info("Default Character Encoding: {}", fixEncoding);
+            log.info("Parameter Number Limit: {}", (maxParams < 0) ? "unlimited" : maxParams);
+            log.info("Maximum Request Size: {}", (maxParams < 0) ? "unlimited" : maxRequestSize);
+            log.info("Temporary File Location: {}", fileLocation);
+            log.info("Maximum File Size: {}", maxFileSize);
+            log.info("Tempory File Creation Threshold: {}", fileSizeThreshold);
+            log.info("Check for additional container parameters: {}", checkAddParameters);
+            log.info("Patterns: {}", pattern != null ? Arrays.asList(pattern) : null);
+        }
+
+        Util.setDefaultFixEncoding(fixEncoding);
+        ParameterMap.setMaxParameters(maxParams);
+        ParameterSupport.configure(maxRequestSize, fileLocation, maxFileSize,
+                fileSizeThreshold, checkAddParameters, pattern);
+    }
+
+    private String getFileLocation(String fileLocation) {
+        if (fileLocation != null) {
+            File file = new File(fileLocation);
+            if (!file.isAbsolute()) {
+                file = new File(this.settignsService.getSlingHomePath(), fileLocation);
+                fileLocation = file.getAbsolutePath();
+            }
+            if (file.exists()) {
+                if (!file.isDirectory()) {
+                    log.error(
+                        "Configured temporary file location {} exists but is not a directory; using java.io.tmpdir instead",
+                        fileLocation);
+                    fileLocation = null;
+                }
+            } else {
+                if (!file.mkdirs()) {
+                    log.error("Cannot create temporary file directory {}; using java.io.tmpdir instead", fileLocation);
+                    fileLocation = null;
+                }
+            }
+        }
+        return fileLocation;
+    }
+}

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java Tue Sep 19 14:15:50 2017
@@ -18,14 +18,13 @@
  */
 package org.apache.sling.engine.impl.parameters;
 
+import javax.servlet.http.Part;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 
-import javax.servlet.http.Part;
-
 public class SlingPart implements Part {
 
     private final MultipartRequestParameter param;

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java Tue Sep 19 14:15:50 2017
@@ -18,10 +18,10 @@
  */
 package org.apache.sling.engine.impl.parameters;
 
-import java.io.UnsupportedEncodingException;
-
 import org.apache.sling.api.SlingIOException;
 
+import java.io.UnsupportedEncodingException;
+
 public class SlingUnsupportedEncodingException extends SlingIOException {
 
     private static final long serialVersionUID = -4482276105859280247L;

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java Tue Sep 19 14:15:50 2017
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.engine.impl.parameters;
 
+import org.apache.sling.api.request.RequestParameter;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -26,8 +28,6 @@ import java.io.UnsupportedEncodingExcept
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import org.apache.sling.api.request.RequestParameter;
-
 public class Util {
 
     // ISO-8859-1 mapps all characters 0..255 to \u0000..\u00ff directly

Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java?rev=1808882&r1=1808880&r2=1808882&view=diff
==============================================================================
--- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java (original)
+++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java Tue Sep 19 14:15:50 2017
@@ -55,7 +55,6 @@ import org.apache.sling.engine.impl.Slin
 import org.apache.sling.engine.impl.StaticResponseHeader;
 import org.apache.sling.engine.impl.adapter.SlingServletRequestAdapter;
 import org.apache.sling.engine.impl.adapter.SlingServletResponseAdapter;
-import org.apache.sling.engine.impl.parameters.ParameterSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -140,9 +139,6 @@ public class RequestData {
     /** The original servlet Servlet Response object */
     private SlingHttpServletResponse slingResponse;
 
-    /** The parameter support class */
-    private ParameterSupport parameterSupport;
-
     private ResourceResolver resourceResolver;
 
     private RequestProgressTracker requestProgressTracker;
@@ -665,10 +661,6 @@ public class RequestData {
     // ---------- Parameter support -------------------------------------------
 
     public ServletInputStream getInputStream() throws IOException {
-        if (parameterSupport != null && parameterSupport.requestDataUsed()) {
-            throw new IllegalStateException(
-                "Request Data has already been read");
-        }
 
         // may throw IllegalStateException if the reader has already been
         // acquired
@@ -677,24 +669,12 @@ public class RequestData {
 
     public BufferedReader getReader() throws UnsupportedEncodingException,
             IOException {
-        if (parameterSupport != null && parameterSupport.requestDataUsed()) {
-            throw new IllegalStateException(
-                "Request Data has already been read");
-        }
 
         // may throw IllegalStateException if the input stream has already been
         // acquired
         return getServletRequest().getReader();
     }
 
-    public ParameterSupport getParameterSupport() {
-        if (parameterSupport == null) {
-            parameterSupport = ParameterSupport.getInstance(getServletRequest());
-        }
-
-        return parameterSupport;
-    }
-
     // SlingHttpServletRequest instance factory
 
     private static SlingHttpServletRequestFactory getSlingHttpServletRequestFactory() {