You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by he...@apache.org on 2004/11/08 23:17:44 UTC
cvs commit: jakarta-turbine-2/src/java/org/apache/turbine/util/parser BaseValueParser.java DefaultParameterParser.java
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: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org
Re: cvs commit: jakarta-turbine-2/src/java/org/apache/turbine/util/parser BaseValueParser.java DefaultParameterParser.java
Posted by "Henning P. Schmiedehausen" <hp...@intermeta.de>.
"Eric Pugh" <ep...@upstate.com> writes:
>Would you like to toss this into T2.4 as a valve? It might be the perfect
>way for you start familiarizing and providing feedback on 2.4!
>Is this class (from Scarab) basically like what you are thinking of:
>http://scarab.tigris.org/source/browse/scarab/src/java/org/tigris/scarab/pip
>eline/DetermineCharsetValve.java
Pretty much, yes. However, the Scarab variant will nuke the charset no
matter what the container reports (it does a setCharacterEncoding
without checking whether getCharacterEncoding returns null). I'm not
that deep into the servlet specs, but I think that once the Container
reports a charset as given, you cannot change it anymore. So this
might lead to problems.
Regards
Henning
--
Dipl.-Inf. (Univ.) Henning P. Schmiedehausen INTERMETA GmbH
hps@intermeta.de +49 9131 50 654 0 http://www.intermeta.de/
RedHat Certified Engineer -- Jakarta Turbine Development -- hero for hire
Linux, Java, perl, Solaris -- Consulting, Training, Development
What is more important to you...
[ ] Product Security
or [ ] Quality of Sales and Marketing Support
-- actual question from a Microsoft customer survey
---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org
RE: cvs commit: jakarta-turbine-2/src/java/org/apache/turbine/util/parser BaseValueParser.java DefaultParameterParser.java
Posted by Eric Pugh <ep...@upstate.com>.
Would you like to toss this into T2.4 as a valve? It might be the perfect
way for you start familiarizing and providing feedback on 2.4!
Is this class (from Scarab) basically like what you are thinking of:
http://scarab.tigris.org/source/browse/scarab/src/java/org/tigris/scarab/pip
eline/DetermineCharsetValve.java
Eric
> -----Original Message-----
> From: henning@apache.org [mailto:henning@apache.org]
> Sent: Monday, November 08, 2004 11:18 PM
> To: jakarta-turbine-2-cvs@apache.org
> Subject: cvs commit:
> jakarta-turbine-2/src/java/org/apache/turbine/util/parser
> BaseValueParser.java DefaultParameterParser.java
>
>
> 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/TurbineCon
> stants.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/BaseValu
> eParser.java
>
> Index: BaseValueParser.java
> ===================================================================
> RCS file:
> /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/util/parse
> r/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/DefaultP
> arameterParser.java
>
> Index: DefaultParameterParser.java
> ===================================================================
> RCS file:
> /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/util/parse
> r/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: turbine-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: turbine-dev-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org