You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/12/31 20:16:29 UTC

svn commit: r607765 - in /tapestry/tapestry5/trunk/tapestry-upload/src: main/java/org/apache/tapestry/upload/services/MultipartDecoderImpl.java test/java/org/apache/tapestry/upload/services/MultipartDecoderImplTest.java

Author: hlship
Date: Mon Dec 31 11:16:26 2007
New Revision: 607765

URL: http://svn.apache.org/viewvc?rev=607765&view=rev
Log:
TAPESTRY-1984: Error occurs with a multipart (file upload) request if the request encoding is null

Modified:
    tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry/upload/services/MultipartDecoderImpl.java
    tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry/upload/services/MultipartDecoderImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry/upload/services/MultipartDecoderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry/upload/services/MultipartDecoderImpl.java?rev=607765&r1=607764&r2=607765&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry/upload/services/MultipartDecoderImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry/upload/services/MultipartDecoderImpl.java Mon Dec 31 11:16:26 2007
@@ -107,20 +107,26 @@
 
         ParametersServletRequestWrapper wrapper = new ParametersServletRequestWrapper(request);
 
+
+        String encoding = request.getCharacterEncoding();
+
         for (FileItem item : fileItems)
         {
             if (item.isFormField())
             {
                 String fieldValue;
+
                 try
                 {
-                    fieldValue = item.getString(request.getCharacterEncoding());
+
+                    fieldValue = encoding == null ? item.getString() : item.getString(encoding);
                 }
                 catch (UnsupportedEncodingException e)
                 {
                     // TODO maybe log exception with level warn
                     fieldValue = item.getString();
                 }
+
                 wrapper.addParameter(item.getFieldName(), fieldValue);
             }
             else

Modified: tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry/upload/services/MultipartDecoderImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry/upload/services/MultipartDecoderImplTest.java?rev=607765&r1=607764&r2=607765&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry/upload/services/MultipartDecoderImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry/upload/services/MultipartDecoderImplTest.java Mon Dec 31 11:16:26 2007
@@ -29,7 +29,7 @@
 {
 
     @Test
-    public void createFileUploadGetsConfigurationFromSymbols() throws Exception
+    public void create_file_upload_gets_configuration_from_symbols() throws Exception
     {
         MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 7777, 6666);
 
@@ -37,6 +37,7 @@
 
         ServletFileUpload servletFileUpload = decoder.createFileUpload();
         assertNotNull(servletFileUpload);
+
         verify();
 
         assertEquals(servletFileUpload.getFileSizeMax(), 6666);
@@ -44,42 +45,69 @@
     }
 
     @Test
-    public void processFileItemsDoesNothingWhenNullFileItems() throws Exception
+    public void process_file_items_does_nothing_when_null_file_items() throws Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
         MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, -1, -1);
 
         replay();
+
         HttpServletRequest decodedRequest = decoder.processFileItems(request, null);
+
         verify();
 
         assertSame(request, decodedRequest);
     }
 
     @Test
-    public void processFileItemsDoesNothingWhenEmptyFileItems() throws Exception
+    public void process_file_items_does_nothing_when_empty_file_items() throws Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
         MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, -1, -1);
         List<FileItem> fileItems = Collections.emptyList();
+
         replay();
 
         HttpServletRequest decodedRequest = decoder.processFileItems(request, fileItems);
+
         verify();
 
         assertSame(request, decodedRequest);
     }
 
     @Test
-    public void processFileItemsCreatesWrappedRequestAndSetsNonFileParameters() throws Exception
+    public void process_file_items_creates_wrapped_request_and_sets_non_file_parameters() throws Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
 
         train_getCharacterEncoding(request, "UTF-8");
-        train_getCharacterEncoding(request, "UTF-8");
 
         MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, -1, -1);
         List<FileItem> fileItems = Arrays.asList(createValueItem("one", "first"), createValueItem("two", "second"));
+
+        replay();
+
+        HttpServletRequest decodedRequest = decoder.processFileItems(request, fileItems);
+
+        assertNotSame(decodedRequest, request);
+
+        assertEquals(decodedRequest.getParameter("one"), "first");
+        assertEquals(decodedRequest.getParameter("two"), "second");
+
+        verify();
+    }
+
+    @Test
+    public void non_file_items_with_null_request_encoding() throws Exception
+    {
+        HttpServletRequest request = mockHttpServletRequest();
+
+        train_getCharacterEncoding(request, null);
+
+        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, -1, -1);
+
+        List<FileItem> fileItems = Arrays.asList(createValueItem("one", "first"), createValueItem("two", "second"));
+
         replay();
 
         HttpServletRequest decodedRequest = decoder.processFileItems(request, fileItems);
@@ -93,12 +121,15 @@
     }
 
     @Test
-    public void processFileItemsSetsFileParametersWithFileName() throws Exception
+    public void process_file_items_set_file_parameters_with_file_name() throws Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
         MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, -1, -1);
         List<FileItem> fileItems = Arrays.asList(createFileItem("one", "first.txt"),
                                                  createFileItem("two", "second.txt"));
+
+        train_getCharacterEncoding(request, null);
+
         replay();
 
         HttpServletRequest decodedRequest = decoder.processFileItems(request, fileItems);
@@ -112,17 +143,21 @@
     }
 
     @Test
-    public void processFileItemsStoresUploadedFile() throws Exception
+    public void uploaded_file_stored() throws Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
         MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, -1, -1);
         List<FileItem> fileItems = Arrays.asList(createFileItem("one", "first.txt"),
                                                  createFileItem("two", "second.txt"));
+
+        train_getCharacterEncoding(request, null);
+
         replay();
 
         decoder.processFileItems(request, fileItems);
 
         verify();
+
         assertNotNull(decoder.getFileUpload("one"));
         assertEquals(decoder.getFileUpload("one").getFileName(), "first.txt");
         assertNotNull(decoder.getFileUpload("two"));
@@ -130,7 +165,7 @@
     }
 
     @Test
-    public void threadDidCleanupDeletesAllFileItems() throws Exception
+    public void file_items_cleaned_up() throws Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
         MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, -1, -1);
@@ -139,9 +174,13 @@
         StubFileItem secondItem = new StubFileItem("two");
         secondItem.setFormField(false);
 
+        train_getCharacterEncoding(request, null);
+
         List<FileItem> fileItems = new ArrayList<FileItem>();
         fileItems.add(firstItem);
         fileItems.add(secondItem);
+
+
         replay();
 
         decoder.processFileItems(request, fileItems);
@@ -161,6 +200,7 @@
         item.setFieldName(name);
         item.setValue(value);
         item.setFormField(true);
+
         return item;
     }
 
@@ -170,11 +210,12 @@
         item.setFieldName(name);
         item.setFileName(fileName);
         item.setFormField(false);
+
         return item;
     }
 
     protected final void train_getCharacterEncoding(HttpServletRequest request, String encoding)
     {
-        expect(request.getCharacterEncoding()).andReturn(encoding);
+        expect(request.getCharacterEncoding()).andReturn(encoding).atLeastOnce();
     }
 }