Author: lukaszlenart Date: Tue May 15 14:10:27 2012 New Revision: 1338715 URL: http://svn.apache.org/viewvc?rev=1338715&view=rev Log: WW-3802 moves clean up code to implementation of MultiPartRequest interface
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequest.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java struts/struts2/trunk/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=1338715&r1=1338714&r2=1338715&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Tue May 15 14:10:27 2012 @@ -74,7 +74,6 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; -import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -762,35 +761,13 @@ public class Dispatcher { * * @param request the HttpServletRequest object. * @see org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper - * @throws java.io.IOException on any error. */ - public void cleanUpRequest(HttpServletRequest request) throws IOException { + public void cleanUpRequest(HttpServletRequest request) { if (!(request instanceof MultiPartRequestWrapper)) { return; } - MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request; - - Enumeration fileParameterNames = multiWrapper.getFileParameterNames(); - while (fileParameterNames != null && fileParameterNames.hasMoreElements()) { - String inputValue = (String) fileParameterNames.nextElement(); - File[] files = multiWrapper.getFiles(inputValue); - - for (File currentFile : files) { - if (LOG.isInfoEnabled()) { - String msg = LocalizedTextUtil.findText(this.getClass(), "struts.messages.removing.file", Locale.ENGLISH, "no.message.found", new Object[]{inputValue, currentFile}); - LOG.info(msg); - } - - if ((currentFile != null) && currentFile.isFile()) { - if (!currentFile.delete()) { - if (LOG.isWarnEnabled()) { - LOG.warn("Resource Leaking: Could not remove uploaded file '" + currentFile.getCanonicalPath() + "'."); - } - } - } - } - } + multiWrapper.cleanUp(); } /** Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java?rev=1338715&r1=1338714&r2=1338715&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java Tue May 15 14:10:27 2012 @@ -22,6 +22,7 @@ package org.apache.struts2.dispatcher.multipart; import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.LocalizedTextUtil; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; import org.apache.commons.fileupload.FileItem; @@ -42,7 +43,9 @@ import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.Set; /** * Multipart form data request adapter for Jakarta Commons Fileupload package. @@ -118,6 +121,7 @@ public class JakartaMultiPartRequest imp } values.add(item); + item.delete(); files.put(item.getFieldName(), values); } @@ -336,4 +340,24 @@ public class JakartaMultiPartRequest imp }; } + /* (non-Javadoc) + * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#cleanUp() + */ + public void cleanUp() { + Set<String> names = files.keySet(); + for (String name : names) { + List<FileItem> items = files.get(name); + for (FileItem item : items) { + if (LOG.isInfoEnabled()) { + String msg = LocalizedTextUtil.findText(this.getClass(), "struts.messages.removing.file", + Locale.ENGLISH, "no.message.found", new Object[]{name, item}); + LOG.info(msg); + } + if (!item.isInMemory()) { + item.delete(); + } + } + } + } + } Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequest.java?rev=1338715&r1=1338714&r2=1338715&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequest.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequest.java Tue May 15 14:10:27 2012 @@ -21,13 +21,12 @@ package org.apache.struts2.dispatcher.multipart; +import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.Enumeration; import java.util.List; -import javax.servlet.http.HttpServletRequest; - /** * Abstract wrapper class HTTP requests to handle multi-part data. <p> @@ -115,4 +114,10 @@ public interface MultiPartRequest { * @return a list of Strings that represent various errors during parsing */ public List getErrors(); + + /** + * Cleans up all uploaded file, should be called at the end of request + */ + public void cleanUp(); + } Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java?rev=1338715&r1=1338714&r2=1338715&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java Tue May 15 14:10:27 2012 @@ -21,6 +21,11 @@ package org.apache.struts2.dispatcher.multipart; +import com.opensymphony.xwork2.util.logging.Logger; +import com.opensymphony.xwork2.util.logging.LoggerFactory; +import org.apache.struts2.dispatcher.StrutsRequestWrapper; + +import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -30,13 +35,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Vector; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts2.dispatcher.StrutsRequestWrapper; - -import com.opensymphony.xwork2.util.logging.Logger; -import com.opensymphony.xwork2.util.logging.LoggerFactory; - /** * Parse a multipart request and provide a wrapper around the request. The parsing implementation used @@ -245,4 +243,11 @@ public class MultiPartRequestWrapper ext return temp.elements(); } + + public void cleanUp() { + if (multi != null) { + multi.cleanUp(); + } + } + } Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java?rev=1338715&r1=1338714&r2=1338715&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java Tue May 15 14:10:27 2012 @@ -26,7 +26,6 @@ import com.opensymphony.xwork2.util.Valu import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; import org.apache.struts2.RequestUtils; -import org.apache.struts2.StrutsConstants; import org.apache.struts2.StrutsException; import org.apache.struts2.dispatcher.Dispatcher; import org.apache.struts2.dispatcher.mapper.ActionMapper; @@ -102,11 +101,6 @@ public class PrepareOperations { // always clean up the thread request, even if an action hasn't been executed try { dispatcher.cleanUpRequest(request); - } catch (IOException e) { - if (LOG.isWarnEnabled()) { - LOG.warn("Cannot clean up the request, some files can still remain in #0 after upload!", e, - StrutsConstants.STRUTS_MULTIPART_SAVEDIR); - } } finally { ActionContext.setContext(null); Dispatcher.setInstance(null); Modified: struts/struts2/trunk/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java?rev=1338715&r1=1338714&r2=1338715&view=diff ============================================================================== --- struts/struts2/trunk/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java (original) +++ struts/struts2/trunk/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java Tue May 15 14:10:27 2012 @@ -21,8 +21,14 @@ package org.apache.struts2.dispatcher.multipart; +import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.LocalizedTextUtil; +import com.opensymphony.xwork2.util.logging.Logger; +import com.opensymphony.xwork2.util.logging.LoggerFactory; import http.utils.multipartrequest.ServletMultipartRequest; +import org.apache.struts2.StrutsConstants; +import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -30,14 +36,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts2.StrutsConstants; - -import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.util.logging.Logger; -import com.opensymphony.xwork2.util.logging.LoggerFactory; +import java.util.Locale; /** @@ -159,10 +158,36 @@ public class PellMultiPartRequest implem } } catch (IllegalArgumentException e) { if (LOG.isInfoEnabled()) { - LOG.info("Could not get encoding property 'struts.i18n.encoding' for file upload. Using system default"); + LOG.info("Could not get encoding property 'struts.i18n.encoding' for file upload. Using system default"); } } catch (UnsupportedEncodingException e) { LOG.error("Encoding " + encoding + " is not a valid encoding. Please check your struts.properties file."); } } + + /* (non-Javadoc) + * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#cleanUp() + */ + public void cleanUp() { + Enumeration fileParameterNames = multi.getFileParameterNames(); + while (fileParameterNames != null && fileParameterNames.hasMoreElements()) { + String inputValue = (String) fileParameterNames.nextElement(); + File[] files = getFile(inputValue); + for (File currentFile : files) { + if (LOG.isInfoEnabled()) { + String msg = LocalizedTextUtil.findText(this.getClass(), "struts.messages.removing.file", Locale.ENGLISH, + "no.message.found", new Object[]{inputValue, currentFile}); + LOG.info(msg); + } + if ((currentFile != null) && currentFile.isFile()) { + if (!currentFile.delete()) { + if (LOG.isWarnEnabled()) { + LOG.warn("Resource Leaking: Could not remove uploaded file [#0]", currentFile.getAbsolutePath()); + } + } + } + } + } + } + }