You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@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();
}
}