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:t...@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:ep...@opensourceconnections.com">Eric Pugh</a> + * @author <a href="mailto:pe...@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