You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by tv...@apache.org on 2018/07/28 17:26:07 UTC

svn commit: r1836937 - in /turbine/core/trunk/src: java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java test/org/apache/turbine/pipeline/DefaultSetEncodingValveTest.java

Author: tv
Date: Sat Jul 28 17:26:07 2018
New Revision: 1836937

URL: http://svn.apache.org/viewvc?rev=1836937&view=rev
Log:
Copy request encoding to RunData to set a reasonable default for the output. Add a test.

Added:
    turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSetEncodingValveTest.java   (with props)
Modified:
    turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java
    turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java

Modified: turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java?rev=1836937&r1=1836936&r2=1836937&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java Sat Jul 28 17:26:07 2018
@@ -31,11 +31,15 @@ import org.apache.commons.logging.LogFac
 import org.apache.turbine.Turbine;
 import org.apache.turbine.TurbineConstants;
 import org.apache.turbine.annotation.TurbineConfiguration;
+import org.apache.turbine.util.RunData;
 import org.apache.turbine.util.TurbineException;
 
 /**
  * Set defaultEncoding of the request
  *
+ * This valve must be situated in the pipeline before any access to the
+ * {@link org.apache.fulcrum.parser.ParameterParser} to take effect.
+ *
  * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
  */
 public class DefaultSetEncodingValve
@@ -56,24 +60,32 @@ public class DefaultSetEncodingValve
         HttpServletRequest req = pipelineData.get(Turbine.class, HttpServletRequest.class);
 
         // If the servlet container gives us no clear indication about the
-        // Encoding of the contents, set it to our default value.
-        if (req.getCharacterEncoding() == null)
+        // encoding of the contents, set it to our default value.
+        String requestEncoding = req.getCharacterEncoding();
+
+        if (requestEncoding == null)
         {
+            requestEncoding = defaultEncoding;
+
             if (log.isDebugEnabled())
             {
-                log.debug("Changing Input Encoding to " + defaultEncoding);
+                log.debug("Changing Input Encoding to " + requestEncoding);
             }
 
             try
             {
-                req.setCharacterEncoding(defaultEncoding);
+                req.setCharacterEncoding(requestEncoding);
             }
             catch (UnsupportedEncodingException uee)
             {
-                log.warn("Could not change request defaultEncoding to " + defaultEncoding, uee);
+                log.warn("Could not change request encoding to " + requestEncoding, uee);
             }
         }
 
+        // Copy encoding charset to RunData to set a reasonable default for the response
+        RunData data = getRunData(pipelineData);
+        data.setCharSet(requestEncoding);
+
         // Pass control to the next Valve in the Pipeline
         context.invokeNext(pipelineData);
     }

Modified: turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java?rev=1836937&r1=1836936&r2=1836937&view=diff
==============================================================================
--- turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java (original)
+++ turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java Sat Jul 28 17:26:07 2018
@@ -93,6 +93,7 @@ public class DefaultSessionTimeoutValveT
 
         DefaultSessionTimeoutValve valve = new DefaultSessionTimeoutValve();
         pipeline.addValve(valve);
+        pipeline.initialize();
 
         pipeline.invoke(pipelineData);
 

Added: turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSetEncodingValveTest.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSetEncodingValveTest.java?rev=1836937&view=auto
==============================================================================
--- turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSetEncodingValveTest.java (added)
+++ turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSetEncodingValveTest.java Sat Jul 28 17:26:07 2018
@@ -0,0 +1,124 @@
+package org.apache.turbine.pipeline;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.turbine.Turbine;
+import org.apache.turbine.TurbineConstants;
+import org.apache.turbine.test.BaseTestCase;
+import org.apache.turbine.util.RunData;
+import org.apache.turbine.util.TurbineConfig;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Tests TurbinePipeline.
+ *
+ * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
+ * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
+ * @version $Id: DefaultSessionTimeoutValveTest.java 1606111 2014-06-27
+ *          14:46:47Z gk $
+ */
+public class DefaultSetEncodingValveTest extends BaseTestCase
+{
+    private static TurbineConfig tc = null;
+    private ServletConfig config = null;
+    private HttpServletRequest request = null;
+    private HttpServletResponse response = null;
+
+    @BeforeClass
+    public static void init()
+    {
+        tc = new TurbineConfig(
+                ".",
+                "/conf/test/CompleteTurbineResources.properties");
+        tc.initialize();
+    }
+
+    @Before
+    public void setUpBefore() throws Exception
+    {
+        config = mock(ServletConfig.class);
+        request = getMockRequest();
+        response = mock(HttpServletResponse.class);
+        when(request.getCharacterEncoding()).thenReturn(null);
+    }
+
+    /**
+     * Tests the Valve.
+     */
+    @Test
+    public void testDefaults() throws Exception
+    {
+        // reset
+        Turbine.getConfiguration().setProperty(TurbineConstants.PARAMETER_ENCODING_KEY,
+                TurbineConstants.PARAMETER_ENCODING_DEFAULT);
+
+        PipelineData pipelineData = getPipelineData(request, response, config);
+
+        Pipeline pipeline = new TurbinePipeline();
+
+        DefaultSetEncodingValve valve = new DefaultSetEncodingValve();
+        pipeline.addValve(valve);
+        pipeline.initialize();
+
+        pipeline.invoke(pipelineData);
+
+        RunData runData = (RunData) pipelineData;
+        assertEquals(TurbineConstants.PARAMETER_ENCODING_DEFAULT, runData.getCharSet());
+    }
+
+    /**
+     * Tests the Valve.
+     */
+    @Test
+    public void testEncodingSet() throws Exception
+    {
+        Turbine.getConfiguration().setProperty(TurbineConstants.PARAMETER_ENCODING_KEY, "UTF-8");
+        PipelineData pipelineData = getPipelineData(request, response, config);
+
+        Pipeline pipeline = new TurbinePipeline();
+
+        DefaultSetEncodingValve valve = new DefaultSetEncodingValve();
+        pipeline.addValve(valve);
+        pipeline.initialize();
+
+        pipeline.invoke(pipelineData);
+        RunData runData = (RunData) pipelineData;
+
+        assertEquals("UTF-8", runData.getCharSet());
+    }
+
+    @AfterClass
+    public static void destroy()
+    {
+        tc.dispose();
+    }
+
+}

Propchange: turbine/core/trunk/src/test/org/apache/turbine/pipeline/DefaultSetEncodingValveTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain