You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by aw...@apache.org on 2007/02/14 00:02:09 UTC
svn commit: r507315 - in
/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload:
FileUploadConfiguratorImpl.java UploadRequestWrapper.java
Author: awiner
Date: Tue Feb 13 16:02:08 2007
New Revision: 507315
URL: http://svn.apache.org/viewvc?view=rev&rev=507315
Log:
File upload fixes:
- Fix potential double-decoding of parameters
- Fix incorrect warnings of "can't call setCharacterEncoding(), it's too late"
- Fix unnecessary extra merge of the already-present request parameters
- Add warning of "can't call setCharacterEncoding()" back where appropriate
Modified:
incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/FileUploadConfiguratorImpl.java
incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/UploadRequestWrapper.java
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/FileUploadConfiguratorImpl.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/FileUploadConfiguratorImpl.java?view=diff&rev=507315&r1=507314&r2=507315
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/FileUploadConfiguratorImpl.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/FileUploadConfiguratorImpl.java Tue Feb 13 16:02:08 2007
@@ -165,13 +165,6 @@
if(addedParams != null)
{
- @SuppressWarnings("unchecked")
- Map<String, String[]> parameters = new HashMap<String, String[]>(externalContext.getRequestParameterValuesMap());
- parameters.putAll(addedParams);
-
- // TODO sobryan (dependency = JSF 1.2)
- // For JSF 1.2, we can probably simply wrap the request objects and set them on
- // the existing ExternalContext.
return _getExternalContextWrapper(externalContext, addedParams);
}
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/UploadRequestWrapper.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/UploadRequestWrapper.java?view=diff&rev=507315&r1=507314&r2=507315
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/UploadRequestWrapper.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/UploadRequestWrapper.java Tue Feb 13 16:02:08 2007
@@ -16,10 +16,10 @@
* Request wrapper class that hooks in parameters identified in
* the servlet request.
*
- * @todo Stop going String -> bytes -> String; change MultipartFormHandler
- * to simply extract byte arrays, and do all the type conversion here.
* @author The Oracle ADF Faces Team
*/
+// TODO Stop going String -> bytes -> String; change MultipartFormHandler
+// to simply extract byte arrays, and do all the type conversion here.
@SuppressWarnings("deprecation")
public class UploadRequestWrapper extends HttpServletRequestWrapper
{
@@ -30,10 +30,12 @@
super(request);
@SuppressWarnings("unchecked")
- Map<String, String[]> origionalMap = super.getParameterMap();
+ // Merge in all the original parameters
+ Map<String, String[]> originalMap = super.getParameterMap();
- _extractedParams = new HashMap<String, String[]>(origionalMap);
+ _extractedParams = new HashMap<String, String[]>(originalMap);
_extractedParams.putAll(params);
+ _encoding = super.getCharacterEncoding();
}
/**
@@ -46,6 +48,12 @@
return _WWW_FORM_URLENCODED_TYPE;
}
+ @Override
+ public String getCharacterEncoding()
+ {
+ return _encoding;
+ }
+
/**
* Trap calls to setCharacterEncoding() to decode parameters correctly
*/
@@ -53,7 +61,24 @@
public void setCharacterEncoding(String encoding)
throws UnsupportedEncodingException
{
- super.setCharacterEncoding(encoding);
+ // It is illegal to set the character encoding after parameters
+ // have been retrieved. This is an annoying restriction,
+ // but we shouldn't break it
+ if (_parametersRetrieved)
+ {
+ _LOG.warning("Unable to set request character encoding to {0}, " +
+ "because request parameters have already been read.",
+ encoding);
+ return;
+ }
+
+ // If the encoding is already right, we can bail
+ if (encoding.equals(_encoding))
+ return;
+
+ // Don't call super.setCharacterEncoding() - it's too late
+ // and we'll get a warning
+ _encoding = encoding;
if (_LOG.isFine())
_LOG.fine("Switching encoding of wrapper to " + encoding);
@@ -62,6 +87,9 @@
byte[] buffer = new byte[256];
+ // FIXME: decodeRequestParameter() assumes the incoming
+ // character set is ISO-8859-1 - but this is not
+ // necessarily true!
for(Map.Entry<String, String[]> entry : _extractedParams.entrySet())
{
String key = entry.getKey();
@@ -130,6 +158,9 @@
*/
private Map<String, String[]> _getMap()
{
+ // Mark that parameters have been retrieved so we
+ // can log a proper warning
+ _parametersRetrieved = true;
if (_extractedAndDecodedParams != null)
return _extractedAndDecodedParams;
@@ -138,6 +169,8 @@
private Map<String, String[]> _extractedAndDecodedParams;
private Map<String, String[]> _extractedParams;
+ private String _encoding;
+ private boolean _parametersRetrieved;
private static final String _WWW_FORM_URLENCODED_TYPE =
"application/x-www-form-urlencoded";