henning 2004/11/08 14:17:44
Modified: conf Tag: TURBINE_2_3_BRANCH TurbineResources.properties
src/java/org/apache/turbine Tag: TURBINE_2_3_BRANCH
Turbine.java TurbineConstants.java
src/java/org/apache/turbine/util/parser Tag:
TURBINE_2_3_BRANCH BaseValueParser.java
DefaultParameterParser.java
Log:
One of the really scary "how could this ever work without?" patches.
This allows the application to define the default content encoding of
incoming requests. Which in turn allows an all-UTF-8 application to
declare the POST forms to contain UTF-8 chars and keep all the special
characters alive.
Hint: If you ever wanted to chase a red herring, try this with a
RequestDumperValve in Tomcat...
Default encoding is ISO-8859-1, which is an improvement over the
Turbine 2.3.x US-ASCII, but this patch really shines in connection
with UTF-8.
Definitely more testing with other containers besides Tomcat 5.0.x
wanted! req.setCharacterEncoding() is not the most stable method in
the various web containers.
(The functionality of this patch would be a perfect match for a Valve
in the Pipeline. This valve would be the first thing in the pipeline
and set the CharacterEncoding of the incoming request).
Revision Changes Path
No revision
No revision
1.51.2.1 +7 -1 jakarta-turbine-2/conf/TurbineResources.properties
Index: TurbineResources.properties
===================================================================
RCS file: /home/cvs/jakarta-turbine-2/conf/TurbineResources.properties,v
retrieving revision 1.51
retrieving revision 1.51.2.1
diff -u -r1.51 -r1.51.2.1
--- TurbineResources.properties 2 Sep 2003 13:28:28 -0000 1.51
+++ TurbineResources.properties 8 Nov 2004 22:17:43 -0000 1.51.2.1
@@ -217,6 +217,12 @@
#
action.eventsubmit.needsvalue = false
+# If the web container does not supply an explicit encoding for the
+# request data, assume that is has this encoding. If you use e.g.
+# UTF-8 or ISO-8859-<something>, change this parameter to keep your
+# special characters. Default is ISO-8859-1
+input.encoding = ISO-8859-1
+
# -------------------------------------------------------------------
#
# J N D I C O N T E X T S
No revision
No revision
1.45.2.4 +36 -1
jakarta-turbine-2/src/java/org/apache/turbine/Turbine.java
Index: Turbine.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/Turbine.java,v
retrieving revision 1.45.2.3
retrieving revision 1.45.2.4
diff -u -r1.45.2.3 -r1.45.2.4
--- Turbine.java 16 Aug 2004 23:31:59 -0000 1.45.2.3
+++ Turbine.java 8 Nov 2004 22:17:43 -0000 1.45.2.4
@@ -20,6 +20,8 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
import java.util.Properties;
import javax.servlet.ServletConfig;
@@ -157,6 +159,9 @@
/** A reference to the RunData Service */
private RunDataService rundataService = null;
+ /** Default Input encoding if the servlet container does not report an
encoding */
+ private String inputEncoding = null;
+
/** Logging class from commons.logging */
private static Log log = LogFactory.getLog(Turbine.class);
@@ -376,6 +381,16 @@
// a value of 'true' will be started when
// the service manager is initialized.
getServiceManager().init();
+
+ // Get the default input encoding
+ inputEncoding = configuration.getString(
+ TurbineConstants.PARAMETER_ENCODING_KEY,
+ TurbineConstants.PARAMETER_ENCODING_DEFAULT);
+
+ if (log.isDebugEnabled())
+ {
+ log.debug("Input Encoding has been set to " + inputEncoding);
+ }
}
/**
@@ -640,6 +655,26 @@
if (initFailure != null)
{
throw initFailure;
+ }
+
+ //
+ // 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)
+ {
+ if (log.isDebugEnabled())
+ {
+ log.debug("Changing Input Encoding to " + inputEncoding);
+ }
+
+ try
+ {
+ req.setCharacterEncoding(inputEncoding);
+ }
+ catch (UnsupportedEncodingException uee)
+ {
+ log.warn("Could not change request encoding to " +
inputEncoding, uee);
+ }
}
// Get general RunData here...
1.26.2.3 +7 -1
jakarta-turbine-2/src/java/org/apache/turbine/TurbineConstants.java
Index: TurbineConstants.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/TurbineConstants.java,v
retrieving revision 1.26.2.2
retrieving revision 1.26.2.3
diff -u -r1.26.2.2 -r1.26.2.3
--- TurbineConstants.java 20 May 2004 03:03:54 -0000 1.26.2.2
+++ TurbineConstants.java 8 Nov 2004 22:17:44 -0000 1.26.2.3
@@ -318,4 +318,10 @@
/** Prefix for scheduler job related classes */
String SCHEDULEDJOB_PREFIX = "scheduledjobs";
+
+ /** Encoding for Parameter Parser */
+ String PARAMETER_ENCODING_KEY = "input.encoding";
+
+ /** Default Encoding for Parameter Parser */
+ String PARAMETER_ENCODING_DEFAULT = "ISO-8859-1";
}
No revision
No revision
1.23.2.3 +4 -3
jakarta-turbine-2/src/java/org/apache/turbine/util/parser/BaseValueParser.java
Index: BaseValueParser.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/util/parser/BaseValueParser.java,v
retrieving revision 1.23.2.2
retrieving revision 1.23.2.3
diff -u -r1.23.2.2 -r1.23.2.3
--- BaseValueParser.java 20 May 2004 03:33:43 -0000 1.23.2.2
+++ BaseValueParser.java 8 Nov 2004 22:17:44 -0000 1.23.2.3
@@ -47,6 +47,7 @@
import org.apache.torque.om.NumberKey;
import org.apache.torque.om.StringKey;
+import org.apache.turbine.TurbineConstants;
import org.apache.turbine.util.DateSelector;
import org.apache.turbine.util.TimeSelector;
import org.apache.turbine.util.pool.Recyclable;
@@ -97,7 +98,7 @@
private Map parameters = new HashMap();
/** The character encoding to use when converting to byte arrays */
- private String characterEncoding = "US-ASCII";
+ private String characterEncoding =
TurbineConstants.PARAMETER_ENCODING_DEFAULT;
/**
* A static version of the convert method, which
@@ -136,7 +137,7 @@
*/
public void recycle()
{
- recycle("US-ASCII");
+ recycle(TurbineConstants.PARAMETER_ENCODING_DEFAULT);
}
/**
1.20.2.3 +5 -4
jakarta-turbine-2/src/java/org/apache/turbine/util/parser/DefaultParameterParser.java
Index: DefaultParameterParser.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/util/parser/DefaultParameterParser.java,v
retrieving revision 1.20.2.2
retrieving revision 1.20.2.3
diff -u -r1.20.2.2 -r1.20.2.3
--- DefaultParameterParser.java 20 May 2004 03:33:43 -0000 1.20.2.2
+++ DefaultParameterParser.java 8 Nov 2004 22:17:44 -0000 1.20.2.3
@@ -27,13 +27,12 @@
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.turbine.TurbineConstants;
import org.apache.turbine.services.upload.TurbineUpload;
import org.apache.turbine.services.upload.UploadService;
-
import org.apache.turbine.util.TurbineException;
import org.apache.turbine.util.pool.Recyclable;
@@ -169,7 +168,9 @@
uploadData = null;
String enc = request.getCharacterEncoding();
- setCharacterEncoding(enc != null ? enc : "US-ASCII");
+ setCharacterEncoding(enc != null
+ ? enc
+ : TurbineConstants.PARAMETER_ENCODING_DEFAULT);
// String object re-use at its best.
String tmp = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]