Author: nilsga
Date: Thu Dec  6 03:05:08 2007
New Revision: 601700

URL: http://svn.apache.org/viewvc?rev=601700&view=rev
Log:
WW-2347,WW-2348 - Make multipart form fields available in the parameter map.

Modified:
    struts/struts2/trunk/plugins/portlet/pom.xml
    
struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
    
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java

Modified: struts/struts2/trunk/plugins/portlet/pom.xml
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/pom.xml?rev=601700&r1=601699&r2=601700&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/portlet/pom.xml (original)
+++ struts/struts2/trunk/plugins/portlet/pom.xml Thu Dec  6 03:05:08 2007
@@ -124,12 +124,24 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-mock</artifactId>
             <version>2.0.7</version>
-      <scope>test</scope>
+                       <scope>test</scope>
         </dependency>
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>spring-portlet</artifactId>
+                       <version>2.0.7</version>
+                       <scope>test</scope>
+               </dependency>
     <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-core</artifactId>
             <version>2.0.7</version>
+      <scope>test</scope>
+        </dependency>
+               <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+                       <version>1.1.1</version>
       <scope>test</scope>
         </dependency>
    </dependencies>

Modified: 
struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java?rev=601700&r1=601699&r2=601700&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
 (original)
+++ 
struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
 Thu Dec  6 03:05:08 2007
@@ -21,6 +21,7 @@
 package org.apache.struts2.portlet.dispatcher;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Locale;
@@ -50,6 +51,7 @@
 import org.apache.struts2.dispatcher.SessionMap;
 import org.apache.struts2.dispatcher.mapper.ActionMapper;
 import org.apache.struts2.dispatcher.mapper.ActionMapping;
+import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
 import org.apache.struts2.portlet.PortletActionConstants;
 import org.apache.struts2.portlet.PortletApplicationMap;
 import org.apache.struts2.portlet.PortletRequestMap;
@@ -358,6 +360,11 @@
        ServletContext dummyServletContext = new 
PortletServletContext(getPortletContext());
        if(EVENT_PHASE.equals(phase)) {
                dummyRequest = dispatcherUtils.wrapRequest(dummyRequest, 
dummyServletContext);
+               if(dummyRequest instanceof MultiPartRequestWrapper) {
+                       // Multipart request. Request parameters are encoded in 
the multipart data,
+                       // so we need to manually add them to the parameter map.
+                       parameterMap.putAll(dummyRequest.getParameterMap());
+               }
        }
         // ServletActionContext
         HashMap<String,Object> extraContext = new HashMap<String,Object>();

Modified: 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java?rev=601700&r1=601699&r2=601700&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java
 (original)
+++ 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java
 Thu Dec  6 03:05:08 2007
@@ -20,6 +20,7 @@
  */
 package org.apache.struts2.portlet.dispatcher;
 
+import java.io.File;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -36,19 +37,16 @@
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
 import javax.portlet.WindowState;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-
-import junit.textui.TestRunner;
 
 import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.dispatcher.mapper.ActionMapper;
 import org.apache.struts2.dispatcher.mapper.ActionMapping;
 import org.apache.struts2.portlet.PortletActionConstants;
 import org.easymock.EasyMock;
 import org.jmock.Mock;
 import org.jmock.cglib.MockObjectTestCase;
 import org.jmock.core.Constraint;
+import org.springframework.mock.web.portlet.MockActionRequest;
+import org.springframework.mock.web.portlet.MockActionResponse;
 import org.springframework.mock.web.portlet.MockPortletConfig;
 import org.springframework.mock.web.portlet.MockPortletContext;
 
@@ -57,7 +55,6 @@
 import com.opensymphony.xwork2.ActionProxy;
 import com.opensymphony.xwork2.ActionProxyFactory;
 import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
 
 /**
  * Jsr168DispatcherTest. Insert description.
@@ -65,6 +62,17 @@
  */
 public class Jsr168DispatcherTest extends MockObjectTestCase implements 
PortletActionConstants {
 
+       private final String MULTIPART_REQUEST = 
"-----------------------------4827543632391\r\n" 
+               + "Content-Disposition: form-data; name=\"upload\"; 
filename=\"test.txt\"\r\n"
+               + "Content-Type: text/plain\r\n"
+               + "\r\n"
+               + "This is a test file\r\n"
+               + "-----------------------------4827543632391\r\n"
+               + "Content-Disposition: form-data; name=\"caption\"\r\n"
+               + "\r\n"
+               + "TestCaption\r\n"
+               + "-----------------------------4827543632391--";
+       
     Jsr168Dispatcher dispatcher = null;
     Mock mockConfig = null;
     Mock mockCtx = null;
@@ -304,9 +312,24 @@
             fail("Error occured");
         }
     }
-
-    public static void main(String[] args) {
-        TestRunner.run(Jsr168DispatcherTest.class);
+    
+    public void testMultipartRequest_parametersAreCopiedToActionInvocation() 
throws Exception {
+       MockPortletContext ctx = new MockPortletContext();
+       ctx.setAttribute("javax.servlet.context.tempdir", new 
File("target").getAbsoluteFile());
+       MockActionRequest request = new MockActionRequest(ctx);
+       request.setContent(MULTIPART_REQUEST.getBytes("US-ASCII"));
+       request.setContentType("multipart/form-data; 
boundary=---------------------------4827543632391");
+       request.setProperty("Content-Length", "" + MULTIPART_REQUEST.length());
+       MockActionResponse response = new MockActionResponse();
+       Map<String, Object> requestMap = new HashMap<String, Object>();
+       Map<String, String[]> paramMap = new HashMap<String, String[]>();
+       Map<String, Object> sessionMap = new HashMap<String, Object>();
+       Map<String, Object> applicationMap = new HashMap<String, Object>();
+       initPortletConfig(new HashMap(), new HashMap());
+       MockPortletConfig config = new MockPortletConfig(ctx);
+       dispatcher.init(config);
+       dispatcher.createContextMap(requestMap, paramMap, sessionMap, 
applicationMap, request, response, config, PortletActionConstants.EVENT_PHASE);
+       assertNotNull("Caption was not found in parameter map!", 
paramMap.get("caption"));
+       assertEquals("TestCaption", paramMap.get("caption")[0]);
     }
-
 }


Reply via email to