Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 3be2ef0a1 -> 7d164c618


WICKET-6260 let WebRequest detect Ajax request

WebRequest#isAjax() no longer touches the request body, thus it can safely be 
asked


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/662b0b8c
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/662b0b8c
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/662b0b8c

Branch: refs/heads/wicket-6.x
Commit: 662b0b8c52b50e8581a17ca73a9b3dcd4a0f3404
Parents: 3be2ef0
Author: Sven Meier <svenme...@apache.org>
Authored: Wed Oct 26 10:19:18 2016 +0200
Committer: Sven Meier <svenme...@apache.org>
Committed: Mon Oct 31 15:01:55 2016 +0100

----------------------------------------------------------------------
 .../wicket/protocol/http/WebApplication.java    | 23 ++++----
 .../protocol/http/WebApplicationTest.java       | 59 ++++++++++++++++++++
 2 files changed, 70 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/662b0b8c/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
index 8d1a79e..088fd27 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
@@ -557,12 +557,21 @@ public abstract class WebApplication extends Application
         */
        WebRequest createWebRequest(HttpServletRequest servletRequest, final 
String filterPath)
        {
+               if (hasFilterFactoryManager())
+               {
+                       for (AbstractRequestWrapperFactory factory : 
getFilterFactoryManager())
+                       {
+                               servletRequest = 
factory.getWrapper(servletRequest);
+                       }
+               }
+
+               WebRequest webRequest = newWebRequest(servletRequest, 
filterPath);
+
                if (servletRequest.getCharacterEncoding() == null)
                {
                        try
                        {
-                               String wicketAjaxHeader = 
servletRequest.getHeader(WebRequest.HEADER_AJAX);
-                               if (Strings.isTrue(wicketAjaxHeader))
+                               if (webRequest.isAjax())
                                {
                                        // WICKET-3908, WICKET-1816: Forms 
submitted with Ajax are always UTF-8 encoded
                                        
servletRequest.setCharacterEncoding(CharEncoding.UTF_8);
@@ -579,16 +588,6 @@ public abstract class WebApplication extends Application
                        }
                }
 
-               if (hasFilterFactoryManager())
-               {
-                       for (AbstractRequestWrapperFactory factory : 
getFilterFactoryManager())
-                       {
-                               servletRequest = 
factory.getWrapper(servletRequest);
-                       }
-               }
-
-               WebRequest webRequest = newWebRequest(servletRequest, 
filterPath);
-
                return webRequest;
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/662b0b8c/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebApplicationTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebApplicationTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebApplicationTest.java
index 4371c72..14c9fea 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebApplicationTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebApplicationTest.java
@@ -17,9 +17,16 @@
 package org.apache.wicket.protocol.http;
 
 import java.nio.charset.Charset;
+import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.mock.MockRequestParameters;
+import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
@@ -41,6 +48,58 @@ public class WebApplicationTest extends WicketTestCase
        private static final String MOUNT_PATH_4 = "mount/path/4";
 
        /**
+        * WICKET-6260
+        */
+       @Test
+       public void testBodyNotReadBeforeApplicationSetsCharacterEncoding() 
throws Exception {
+               WebApplication application = tester.getApplication();
+
+               HttpServletRequest request = new 
MockHttpServletRequest(application, null, null) {
+                       @Override
+                       public Map<String, String[]> getParameterMap()
+                       {
+                               fail("body should not be read before character 
encoding is set");
+                               return null;
+                       }
+
+                       @Override
+                       public String getParameter(String name)
+                       {
+                               fail("body should not be read before character 
encoding is set");
+                               return null;
+                       }
+
+                       @Override
+                       public Enumeration<String> getParameterNames()
+                       {
+                               fail("body should not be read before character 
encoding is set");
+                               return null;
+                       }
+
+                       @Override
+                       public String[] getParameterValues(String name)
+                       {
+                               fail("body should not be read before character 
encoding is set");
+                               return null;
+                       }
+
+                       @Override
+                       public MockRequestParameters getPostParameters()
+                       {
+                               fail("body should not be read before character 
encoding is set");
+                               return null;
+                       }
+               };
+
+               // character encoding not set yet
+               request.setCharacterEncoding(null);
+
+               application.createWebRequest(request , "/");
+
+               assertEquals("UTF-8", request.getCharacterEncoding());
+       }
+
+       /**
         * Test basic unmounting from a compound mapper.
         */
        @Test

Reply via email to