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