Author: lukaszlenart
Date: Wed Apr 11 17:12:35 2012
New Revision: 1324870

URL: http://svn.apache.org/viewvc?rev=1324870&view=rev
Log:
WW-3059 Changes logic to set encoding for XMLHttpRequest type

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=1324870&r1=1324869&r2=1324870&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:12:35 2012
@@ -679,6 +679,10 @@ public class Dispatcher {
         if (defaultEncoding != null) {
             encoding = defaultEncoding;
         }
+        // check for Ajax request to use UTF-8 encoding strictly 
http://www.w3.org/TR/XMLHttpRequest/#the-send-method
+        if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
+            encoding = "utf-8";
+        }
 
         Locale locale = null;
         if (defaultLocale != null) {

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=1324870&r1=1324869&r2=1324870&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:12:35 2012
@@ -21,28 +21,8 @@
 
 package org.apache.struts2.dispatcher;
 
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.dispatcher.FilterDispatcherTest.InnerActionMapper;
-import 
org.apache.struts2.dispatcher.FilterDispatcherTest.InnerDestroyableObjectFactory;
-import org.apache.struts2.dispatcher.FilterDispatcherTest.InnerDispatcher;
-import org.springframework.mock.web.MockFilterConfig;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockServletContext;
-
 import com.mockobjects.dynamic.C;
 import com.mockobjects.dynamic.Mock;
-import com.mockobjects.servlet.MockFilterChain;
 import com.opensymphony.xwork2.ObjectFactory;
 import com.opensymphony.xwork2.config.Configuration;
 import com.opensymphony.xwork2.config.ConfigurationManager;
@@ -50,11 +30,20 @@ import com.opensymphony.xwork2.config.en
 import com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
 import com.opensymphony.xwork2.config.entities.PackageConfig;
 import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.inject.ContainerBuilder;
-import com.opensymphony.xwork2.inject.Context;
-import com.opensymphony.xwork2.inject.Factory;
 import com.opensymphony.xwork2.interceptor.Interceptor;
 import com.opensymphony.xwork2.util.LocalizedTextUtil;
+import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.StrutsTestCase;
+import 
org.apache.struts2.dispatcher.FilterDispatcherTest.InnerDestroyableObjectFactory;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.mock.web.MockServletContext;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
 
 /**
  * Test case for Dispatcher.
@@ -89,6 +78,23 @@ public class DispatcherTest extends Stru
         assertEquals(req.getCharacterEncoding(), "utf-8");
     }
 
+    public void testEncodingForXMLHttpRequest() throws Exception {
+        // given
+        MockHttpServletRequest req = new MockHttpServletRequest();
+        req.addHeader("X-Requested-With", "XMLHttpRequest");
+        HttpServletResponse res = new MockHttpServletResponse();
+
+        Dispatcher du = initDispatcher(new HashMap() {{
+            put(StrutsConstants.STRUTS_I18N_ENCODING, "latin-2");
+        }});
+
+        // when
+        du.prepare(req, res);
+
+        // then
+        assertEquals(req.getCharacterEncoding(), "utf-8");
+    }
+
     public void testPrepareSetEncodingPropertyWithMultipartRequest() throws 
Exception {
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();


Reply via email to