struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lukaszlen...@apache.org
Subject svn commit: r1324888 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/Dispatcher.java test/java/org/apache/struts2/dispatcher/DispatcherTest.java
Date Wed, 11 Apr 2012 17:41:06 GMT
Author: lukaszlenart
Date: Wed Apr 11 17:41:06 2012
New Revision: 1324888

URL: http://svn.apache.org/viewvc?rev=1324888&view=rev
Log:
WW-3796 Changes logic to set encoding on HttpServletRequest if differs from configured

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=1324888&r1=1324887&r2=1324888&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
(original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
Wed Apr 11 17:41:06 2012
@@ -690,11 +690,7 @@ public class Dispatcher {
         }
 
         if (encoding != null) {
-            try {
-                request.setCharacterEncoding(encoding);
-            } catch (Exception e) {
-                LOG.error("Error setting character encoding to '" + encoding + "' - ignoring.",
e);
-            }
+            applyEncoding(request, encoding);
         }
 
         if (locale != null) {
@@ -706,6 +702,18 @@ public class Dispatcher {
         }
     }
 
+    private void applyEncoding(HttpServletRequest request, String encoding) {
+        try {
+            if (!encoding.equals(request.getCharacterEncoding())) {
+                // if the encoding is already correctly set and the parameters have been
already read
+                // do not try to set encoding because it is useless and will cause an error
+                request.setCharacterEncoding(encoding);
+            }
+        } catch (Exception e) {
+            LOG.error("Error setting character encoding to '" + encoding + "' - ignoring.",
e);
+        }
+    }
+
     /**
      * Wrap and return the given request or return the original request object.
      * </p>

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java?rev=1324888&r1=1324887&r2=1324888&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
(original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
Wed Apr 11 17:41:06 2012
@@ -70,7 +70,7 @@ public class DispatcherTest extends Stru
         HttpServletRequest req = new MockHttpServletRequest();
         HttpServletResponse res = new MockHttpServletResponse();
 
-        Dispatcher du = initDispatcher(new HashMap() {{
+        Dispatcher du = initDispatcher(new HashMap<String, String>() {{
             put(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8");
         }});
         du.prepare(req, res);
@@ -82,9 +82,10 @@ public class DispatcherTest extends Stru
         // given
         MockHttpServletRequest req = new MockHttpServletRequest();
         req.addHeader("X-Requested-With", "XMLHttpRequest");
+        req.setCharacterEncoding("utf-8");
         HttpServletResponse res = new MockHttpServletResponse();
 
-        Dispatcher du = initDispatcher(new HashMap() {{
+        Dispatcher du = initDispatcher(new HashMap<String, String>() {{
             put(StrutsConstants.STRUTS_I18N_ENCODING, "latin-2");
         }});
 
@@ -95,12 +96,36 @@ public class DispatcherTest extends Stru
         assertEquals(req.getCharacterEncoding(), "utf-8");
     }
 
+    public void testSetEncodingIfDiffer() throws Exception {
+        // given
+        Mock mock = new Mock(HttpServletRequest.class);
+        mock.expectAndReturn("getCharacterEncoding", "utf-8");
+        mock.expectAndReturn("getHeader", "X-Requested-With", "");
+        mock.expectAndReturn("getLocale", Locale.getDefault());
+        mock.expectAndReturn("getCharacterEncoding", "utf-8");
+        HttpServletRequest req = (HttpServletRequest) mock.proxy();
+        HttpServletResponse res = new MockHttpServletResponse();
+
+        Dispatcher du = initDispatcher(new HashMap<String, String>() {{
+            put(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8");
+        }});
+
+
+        // when
+        du.prepare(req, res);
+
+        // then
+
+        assertEquals(req.getCharacterEncoding(), "utf-8");
+        mock.verify();
+    }
+
     public void testPrepareSetEncodingPropertyWithMultipartRequest() throws Exception {
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
 
         req.setContentType("multipart/form-data");
-        Dispatcher du = initDispatcher(new HashMap() {{
+        Dispatcher du = initDispatcher(new HashMap<String, String>() {{
             put(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8");
         }});
         du.prepare(req, res);
@@ -136,7 +161,7 @@ public class DispatcherTest extends Stru
     
     
     public void testConfigurationManager() {
-    	Dispatcher du = null;
+    	Dispatcher du;
     	InternalConfigurationManager configurationManager = new InternalConfigurationManager();
     	try {
     		du = new Dispatcher(new MockServletContext(), new HashMap<String, String>());
@@ -154,7 +179,7 @@ public class DispatcherTest extends Stru
             
     	}
     	finally {
-    		du.setInstance(null);
+    		Dispatcher.setInstance(null);
     	}
     }
     



Mime
View raw message