Author: pauls Date: Wed Sep 20 21:05:14 2017 New Revision: 1809082 URL: http://svn.apache.org/viewvc?rev=1809082&view=rev Log: Support streaming of request body.
Removed: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportConfigurer.java Modified: 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/SlingHttpServletRequestImplBase.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/ParameterSupport.java sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportFilter.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 sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplTest.java sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/RequestDataTest.java 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=1809082&r1=1809081&r2=1809082&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 Wed Sep 20 21:05:14 2017 @@ -18,23 +18,19 @@ */ package org.apache.sling.engine.impl; -import java.io.IOException; -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; -import org.apache.sling.engine.impl.parameters.ParameterSupport; -import org.apache.sling.engine.impl.request.RequestData; import org.apache.sling.engine.impl.request.SlingRequestProgressTracker; import org.osgi.service.http.context.ServletContextHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URL; + /** * The <code>SlingHttpContext</code> implements the OSGi HttpContext used to * register the {@link SlingMainServlet} with the OSGi HttpService. @@ -126,14 +122,8 @@ class SlingHttpContext extends ServletCo final AuthenticationSupport authenticator = this.authenticationSupport; if (authenticator != null) { - // SLING-559: ensure correct parameter handling according to - // ParameterSupport if path is configured to match - if (ParameterSupport.matches(request.getRequestURI())) { - request = ParameterSupport.getParameterSupportRequestWrapper(request); - } - else { - request = new SlingHttpServletRequestImplBase(request); - } + // ensure correct parameter handling + request = SlingHttpServletRequestImplBase.wrap(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=1809082&r1=1809081&r2=1809082&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 Wed Sep 20 21:05:14 2017 @@ -20,51 +20,32 @@ package org.apache.sling.engine.impl; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.request.RequestDispatcherOptions; -import org.apache.sling.api.request.RequestParameter; -import org.apache.sling.api.request.RequestParameterMap; import org.apache.sling.api.request.RequestPathInfo; import org.apache.sling.api.request.RequestProgressTracker; 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.parameters.Util; 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.LinkedHashSet; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.ResourceBundle; -import java.util.Set; public class SlingHttpServletRequestImpl extends SlingHttpServletRequestImplBase implements SlingHttpServletRequest { Modified: sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplBase.java URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplBase.java?rev=1809082&r1=1809081&r2=1809082&view=diff ============================================================================== --- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplBase.java (original) +++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplBase.java Wed Sep 20 21:05:14 2017 @@ -18,9 +18,11 @@ */ package org.apache.sling.engine.impl; -import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.request.RequestParameter; import org.apache.sling.api.request.RequestParameterMap; +import org.apache.sling.engine.impl.parameters.ParameterMap; +import org.apache.sling.engine.impl.parameters.ParameterSupport; +import org.apache.sling.engine.impl.parameters.ParameterSupportHttpServletRequestWrapper; import org.apache.sling.engine.impl.parameters.Util; import javax.servlet.http.HttpServletRequest; @@ -31,20 +33,75 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; -import java.util.AbstractMap; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; + +import static org.apache.sling.engine.impl.parameters.ParameterSupport.SLING_UPLOADMODE_HEADER; +import static org.apache.sling.engine.impl.parameters.ParameterSupport.STREAM_UPLOAD; +import static org.apache.sling.engine.impl.parameters.ParameterSupport.UPLOADMODE_PARAM; public class SlingHttpServletRequestImplBase extends HttpServletRequestWrapper { + public static final String MARKER = SlingHttpServletRequestImplBase.class.getName(); + + private final Map<String, RequestParameter[]> postQueryMap; + + public static HttpServletRequest wrap(HttpServletRequest request) { + if (ParameterSupport.matches(request.getRequestURI()) || STREAM_UPLOAD.equals(request.getHeader(SLING_UPLOADMODE_HEADER))) { + request.setAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING, "true"); + return new ParameterSupportHttpServletRequestWrapper(request); + } + else { + SlingHttpServletRequestImplBase wrapper = new SlingHttpServletRequestImplBase(request); + RequestParameter[] rp = wrapper.postQueryMap.get(UPLOADMODE_PARAM); + if ( rp != null && rp.length == 1 && STREAM_UPLOAD.equals(rp[0].getString())) { + request.setAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING, "true"); + return new ParameterSupportHttpServletRequestWrapper(request); + } + else { + return wrapper; + } + } + } public SlingHttpServletRequestImplBase(HttpServletRequest request) { super(request); + Map<String, RequestParameter[]> cached = (Map<String, RequestParameter[]>) request.getAttribute(MARKER); + if (cached == null) { + if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) { + final String query = request.getQueryString(); + if (query != null && !query.isEmpty()) { + String encoding = request.getCharacterEncoding(); + if (encoding == null) { + encoding = Util.ENCODING_DIRECT; + } + ParameterMap parameters = new ParameterMap(); + InputStream input = Util.toInputStream(query); + try { + Util.parseQueryString(input, encoding, parameters, false); + } catch (IOException e) { + // TODO: log this or something + parameters.clear(); + } + cached = new LinkedHashMap<>(); + for (String name : parameters.keySet()) { + cached.put(name, parameters.getValues(name)); + } + } else { + cached = Collections.EMPTY_MAP; + } + } + else { + cached = Collections.EMPTY_MAP; + } + } + postQueryMap = cached; + request.setAttribute(MARKER, postQueryMap); } @Override @@ -109,6 +166,10 @@ public class SlingHttpServletRequestImpl if (getContentType() != null && getContentType().startsWith("multipart/form-data")) { try { List<RequestParameter> result = new ArrayList<>(); + RequestParameter[] queryParams = postQueryMap.get(name); + if (queryParams != null) { + result.addAll(Arrays.asList(queryParams)); + } for (Part part : getParts()) { if (part.getName().equals(name)) { result.add(new PartRequestParameterImpl(name, part)); @@ -149,6 +210,11 @@ public class SlingHttpServletRequestImpl if (getContentType() != null && getContentType().startsWith("multipart/form-data")) { try { + for (String name : postQueryMap.keySet()) { + if (!result.containsKey(name)) { + result.put(name, getRequestParameters(name)); + } + } for (Part part : getParts()) { if (!result.containsKey(part.getName())) { result.put(part.getName(), getRequestParameters(part.getName())); @@ -173,25 +239,8 @@ public class SlingHttpServletRequestImpl */ public List<RequestParameter> 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 = getRequest().getParameterNames(); names.hasMoreElements(); ) { - RequestParameter[] params = getRequestParameters(names.nextElement()); - if (params != null) { - result.addAll(Arrays.asList(params)); - } - } + for (RequestParameter[] params : getRequestParameterMap().values()) { + result.addAll(Arrays.asList(params)); } return result; } 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=1809082&r1=1809081&r2=1809082&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 Wed Sep 20 21:05:14 2017 @@ -18,23 +18,6 @@ */ package org.apache.sling.engine.impl; -import java.util.ArrayList; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; - -import javax.servlet.GenericServlet; -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; - import org.apache.sling.api.adapter.AdapterManager; import org.apache.sling.api.request.SlingRequestEvent; import org.apache.sling.api.resource.ResourceResolver; @@ -68,6 +51,22 @@ import org.osgi.service.metatype.annotat import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.GenericServlet; +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; +import java.util.ArrayList; +import java.util.Dictionary; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + /** * The <code>SlingMainServlet</code> */ 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=1809082&r1=1809081&r2=1809082&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 Wed Sep 20 21:05:14 2017 @@ -18,24 +18,6 @@ */ package org.apache.sling.engine.impl; -import static org.apache.sling.api.SlingConstants.ERROR_SERVLET_NAME; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.Writer; -import java.security.AccessControlException; - -import javax.servlet.FilterChain; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.UnavailableException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.sling.api.SlingException; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; @@ -60,6 +42,23 @@ import org.apache.sling.engine.servlets. import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.FilterChain; +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.UnavailableException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Writer; +import java.security.AccessControlException; + +import static org.apache.sling.api.SlingConstants.ERROR_SERVLET_NAME; + public class SlingRequestProcessorImpl implements SlingRequestProcessor { /** default log */ 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=1809082&r1=1809081&r2=1809082&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 Wed Sep 20 21:05:14 2017 @@ -43,7 +43,6 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.regex.Pattern; public class ParameterSupport { Modified: 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=1809082&r1=1809081&r2=1809082&view=diff ============================================================================== --- sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportFilter.java (original) +++ sling/whiteboard/pauls/engine/src/main/java/org/apache/sling/engine/impl/parameters/RequestParameterSupportFilter.java Wed Sep 20 21:05:14 2017 @@ -39,13 +39,13 @@ import javax.servlet.http.HttpServletReq 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)" + "osgi.http.whiteboard.context.select=(osgi.http.whiteboard.context.name=org.apache.sling)", + "osgi.http.whiteboard.filter.pattern=/" }, service = Filter.class) @Designate(ocd=RequestParameterSupportFilter.Config.class) @@ -58,9 +58,7 @@ public class RequestParameterSupportFilt @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - if (request instanceof HttpServletRequest) { - log.info("Request: " + ((HttpServletRequest) request).getRequestURI()); - + if ("true".equals(request.getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING))) { chain.doFilter(ParameterSupport.getParameterSupportRequestWrapper((HttpServletRequest) request), response); } else { @@ -123,9 +121,10 @@ public class RequestParameterSupportFilt @AttributeDefinition( name = "Path patterns", - description = "Requests with a path matching the pattern will get parameter support - default is null (i.e., none)" + description = "Requests with a path matching the pattern will get request parameter ordering and streaming via request parameter support " + + "- default is null (i.e., none)" ) - String[] osgi_http_whiteboard_filter_pattern(); + String[] patterns(); } static final String PID = "org.apache.sling.engine.parameters"; @@ -147,7 +146,7 @@ public class RequestParameterSupportFilt 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(); + String[] patterns = config.patterns(); if (log.isInfoEnabled()) { log.info("Default Character Encoding: {}", fixEncoding); @@ -157,13 +156,13 @@ public class RequestParameterSupportFilt 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); + log.info("Patterns: {}", patterns != null ? Arrays.asList(patterns) : null); } Util.setDefaultFixEncoding(fixEncoding); ParameterMap.setMaxParameters(maxParams); ParameterSupport.configure(maxRequestSize, fileLocation, maxFileSize, - fileSizeThreshold, checkAddParameters, pattern); + fileSizeThreshold, checkAddParameters, patterns); } private String getFileLocation(String fileLocation) { 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=1809082&r1=1809081&r2=1809082&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 Wed Sep 20 21:05:14 2017 @@ -103,7 +103,7 @@ public class Util { return data; } - static InputStream toInputStream(String source) { + public static InputStream toInputStream(String source) { byte[] data = fromIdentityEncodedString(source); return new ByteArrayInputStream(data); } 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=1809082&r1=1809081&r2=1809082&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 Wed Sep 20 21:05:14 2017 @@ -18,24 +18,6 @@ */ package org.apache.sling.engine.impl.request; -import static org.apache.sling.api.SlingConstants.SLING_CURRENT_SERVLET_NAME; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.ArrayList; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletRequest; -import javax.servlet.ServletRequestWrapper; -import javax.servlet.ServletResponse; -import javax.servlet.ServletResponseWrapper; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.request.RecursionTooDeepException; @@ -58,6 +40,23 @@ import org.apache.sling.engine.impl.adap import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletRequest; +import javax.servlet.ServletRequestWrapper; +import javax.servlet.ServletResponse; +import javax.servlet.ServletResponseWrapper; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.ArrayList; + +import static org.apache.sling.api.SlingConstants.SLING_CURRENT_SERVLET_NAME; + /** * The <code>RequestData</code> class provides access to objects which are set * on a Servlet Request wide basis such as the repository session, the Modified: sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplTest.java?rev=1809082&r1=1809081&r2=1809082&view=diff ============================================================================== --- sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplTest.java (original) +++ sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/SlingHttpServletRequestImplTest.java Wed Sep 20 21:05:14 2017 @@ -19,9 +19,11 @@ package org.apache.sling.engine.impl; import java.security.Principal; +import java.util.Collections; import javax.servlet.http.HttpServletRequest; import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.engine.impl.parameters.ParameterSupport; import org.apache.sling.engine.impl.request.RequestData; import org.jmock.Expectations; import org.jmock.Mockery; @@ -43,6 +45,15 @@ public class SlingHttpServletRequestImpl final HttpServletRequest servletRequest = context.mock(HttpServletRequest.class); context.checking(new Expectations() {{ + ignoring(servletRequest).getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING); + + ignoring(servletRequest).getAttribute(SlingHttpServletRequestImplBase.MARKER); + will(returnValue(null)); + ignoring(servletRequest).setAttribute(SlingHttpServletRequestImplBase.MARKER, Collections.EMPTY_MAP); + + ignoring(servletRequest).getContentType(); + will(returnValue(null)); + one(servletRequest).getServletPath(); will(returnValue("/path")); allowing(servletRequest).getPathInfo(); @@ -70,6 +81,15 @@ public class SlingHttpServletRequestImpl final HttpServletRequest servletRequest = context.mock(HttpServletRequest.class); context.checking(new Expectations() {{ + ignoring(servletRequest).getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING); + + ignoring(servletRequest).getAttribute(SlingHttpServletRequestImplBase.MARKER); + will(returnValue(null)); + ignoring(servletRequest).setAttribute(SlingHttpServletRequestImplBase.MARKER, Collections.EMPTY_MAP); + + ignoring(servletRequest).getContentType(); + will(returnValue(null)); + one(servletRequest).getServletPath(); will(returnValue("/path")); allowing(servletRequest).getPathInfo(); @@ -97,6 +117,15 @@ public class SlingHttpServletRequestImpl final HttpServletRequest servletRequest = context.mock(HttpServletRequest.class); context.checking(new Expectations() {{ + ignoring(servletRequest).getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING); + + ignoring(servletRequest).getAttribute(SlingHttpServletRequestImplBase.MARKER); + will(returnValue(null)); + ignoring(servletRequest).setAttribute(SlingHttpServletRequestImplBase.MARKER, Collections.EMPTY_MAP); + + ignoring(servletRequest).getContentType(); + will(returnValue(null)); + one(servletRequest).getServletPath(); will(returnValue("/path")); allowing(servletRequest).getPathInfo(); Modified: sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java?rev=1809082&r1=1809081&r2=1809082&view=diff ============================================================================== --- sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java (original) +++ sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java Wed Sep 20 21:05:14 2017 @@ -30,8 +30,10 @@ import javax.servlet.http.HttpServletRes import javax.servlet.http.HttpServletResponseWrapper; import org.apache.sling.engine.impl.SlingHttpServletRequestImpl; +import org.apache.sling.engine.impl.SlingHttpServletRequestImplBase; import org.apache.sling.engine.impl.SlingHttpServletResponseImpl; import org.apache.sling.engine.impl.helper.ExternalServletContextWrapper.RequestDispatcherWrapper; +import org.apache.sling.engine.impl.parameters.ParameterSupport; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JMock; @@ -39,6 +41,8 @@ import org.jmock.integration.junit4.JUni import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Collections; + @RunWith(JMock.class) public class ExternalServletContextWrapperTest { Mockery context = new JUnit4Mockery(); @@ -111,6 +115,15 @@ public class ExternalServletContextWrapp final HttpServletRequest req = context.mock(HttpServletRequest.class); context.checking(new Expectations(){{ + ignoring(req).getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING); + + ignoring(req).getAttribute(SlingHttpServletRequestImplBase.MARKER); + will(returnValue(null)); + ignoring(req).setAttribute(SlingHttpServletRequestImplBase.MARKER, Collections.EMPTY_MAP); + + ignoring(req).getContentType(); + will(returnValue(null)); + allowing(req).getServletPath(); will(returnValue("/")); allowing(req).getPathInfo(); @@ -136,6 +149,15 @@ public class ExternalServletContextWrapp final HttpServletRequest req = context.mock(HttpServletRequest.class); context.checking(new Expectations(){{ + ignoring(req).getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING); + + ignoring(req).getAttribute(SlingHttpServletRequestImplBase.MARKER); + will(returnValue(null)); + ignoring(req).setAttribute(SlingHttpServletRequestImplBase.MARKER, Collections.EMPTY_MAP); + + ignoring(req).getContentType(); + will(returnValue(null)); + allowing(req).getServletPath(); will(returnValue("/")); allowing(req).getPathInfo(); Modified: sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java?rev=1809082&r1=1809081&r2=1809082&view=diff ============================================================================== --- sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java (original) +++ sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java Wed Sep 20 21:05:14 2017 @@ -18,12 +18,15 @@ package org.apache.sling.engine.impl.req import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.sling.api.request.RequestProgressTracker; import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.engine.impl.SlingHttpServletRequestImplBase; +import org.apache.sling.engine.impl.parameters.ParameterSupport; import org.jmock.Expectations; import org.jmock.Mockery; import org.junit.Before; @@ -73,6 +76,15 @@ public class InitResourceTest { resourceResolver = context.mock(ResourceResolver.class); context.checking(new Expectations() {{ + ignoring(req).getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING); + + ignoring(req).getAttribute(SlingHttpServletRequestImplBase.MARKER); + will(returnValue(null)); + ignoring(req).setAttribute(SlingHttpServletRequestImplBase.MARKER, Collections.EMPTY_MAP); + + ignoring(req).getContentType(); + will(returnValue(null)); + allowing(req).getRequestURL(); will(returnValue(new StringBuffer(requestURL))); Modified: sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/RequestDataTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/RequestDataTest.java?rev=1809082&r1=1809081&r2=1809082&view=diff ============================================================================== --- sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/RequestDataTest.java (original) +++ sling/whiteboard/pauls/engine/src/test/java/org/apache/sling/engine/impl/request/RequestDataTest.java Wed Sep 20 21:05:14 2017 @@ -30,13 +30,17 @@ import org.apache.sling.api.SlingHttpSer import org.apache.sling.api.request.RequestProgressTracker; import org.apache.sling.api.request.TooManyCallsException; import org.apache.sling.engine.impl.SlingHttpServletRequestImpl; +import org.apache.sling.engine.impl.SlingHttpServletRequestImplBase; import org.apache.sling.engine.impl.SlingHttpServletResponseImpl; +import org.apache.sling.engine.impl.parameters.ParameterSupport; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.lib.legacy.ClassImposteriser; import org.junit.Before; import org.junit.Test; +import java.util.Collections; + public class RequestDataTest { private Mockery context; @@ -60,6 +64,15 @@ public class RequestDataTest { final ServletConfig servletConfig = context.mock(ServletConfig.class); context.checking(new Expectations() {{ + ignoring(req).getAttribute(ParameterSupport.MARKER_IS_SERVICE_PROCESSING); + + ignoring(req).getAttribute(SlingHttpServletRequestImplBase.MARKER); + will(returnValue(null)); + ignoring(req).setAttribute(SlingHttpServletRequestImplBase.MARKER, Collections.EMPTY_MAP); + + ignoring(req).getContentType(); + will(returnValue(null)); + allowing(req).getServletPath(); will(returnValue("/"));