You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jo...@apache.org on 2007/09/21 22:13:15 UTC

svn commit: r578253 - in /commons/proper/fileupload/trunk: ./ src/java/org/apache/commons/fileupload/ src/java/org/apache/commons/fileupload/disk/ src/java/org/apache/commons/fileupload/servlet/ src/java/org/apache/commons/fileupload/util/ src/test/org...

Author: jochen
Date: Fri Sep 21 13:13:14 2007
New Revision: 578253

URL: http://svn.apache.org/viewvc?rev=578253&view=rev
Log:
Partially backing out r518775, in order to get rid of the problems with FileItem implementing Serializable.

Modified:
    commons/proper/fileupload/trunk/.project
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItem.java
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItemHeaders.java
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItem.java
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java
    commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java
    commons/proper/fileupload/trunk/xdocs/using.xml

Modified: commons/proper/fileupload/trunk/.project
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/.project?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/.project (original)
+++ commons/proper/fileupload/trunk/.project Fri Sep 21 13:13:14 2007
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>commons-fileupload</name>
+	<name>commons-fileupload-1.2</name>
 	<comment>The FileUpload component provides a simple yet flexible means of adding support for multipart file upload functionality to servlets and web applications.</comment>
 	<projects>
 	</projects>
@@ -15,9 +15,15 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
 		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 </projectDescription>

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItem.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItem.java?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItem.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItem.java Fri Sep 21 13:13:14 2007
@@ -50,8 +50,7 @@
  *
  * @version $Id$
  */
-public interface FileItem
-    extends Serializable {
+public interface FileItem extends Serializable {
 
 
     // ------------------------------- Methods from javax.activation.DataSource
@@ -66,8 +65,7 @@
      *
      * @throws IOException if an error occurs.
      */
-    InputStream getInputStream()
-        throws IOException;
+    InputStream getInputStream() throws IOException;
 
 
     /**
@@ -132,8 +130,7 @@
      * @throws UnsupportedEncodingException if the requested character
      *                                      encoding is not available.
      */
-    String getString(String encoding)
-        throws UnsupportedEncodingException;
+    String getString(String encoding) throws UnsupportedEncodingException;
 
 
     /**

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItemHeaders.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItemHeaders.java?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItemHeaders.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileItemHeaders.java Fri Sep 21 13:13:14 2007
@@ -16,7 +16,6 @@
  */
 package org.apache.commons.fileupload;
 
-import java.io.Serializable;
 import java.util.Iterator;
 
 /**
@@ -27,7 +26,7 @@
  * @author Michael C. Macaluso
  * @since 1.3
  */
-public interface FileItemHeaders extends Serializable {
+public interface FileItemHeaders {
     /**
      * Returns the value of the specified part header as a <code>String</code>.
      * If the part did not include a header of the specified name, this method

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java Fri Sep 21 13:13:14 2007
@@ -220,7 +220,7 @@
      * the earliest found in the input string is used.
      *
      * @param str the string that contains a sequence of name/value pairs
-     * @param separator the name/value pairs separators
+     * @param separators the name/value pairs separators
      *
      * @return a map of name/value pairs
      */

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItem.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItem.java?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItem.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItem.java Fri Sep 21 13:13:14 2007
@@ -24,22 +24,20 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.ObjectOutputStream;
 import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.util.Map;
 
-import org.apache.commons.io.FileCleaningTracker;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.FileCleaner;
-import org.apache.commons.io.output.DeferredFileOutputStream;
-
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileItemHeaders;
 import org.apache.commons.fileupload.FileItemHeadersSupport;
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.ParameterParser;
+import org.apache.commons.io.FileCleaner;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.DeferredFileOutputStream;
 
 
 /**
@@ -168,14 +166,14 @@
     private transient DeferredFileOutputStream dfos;
 
     /**
-     * File to allow for serialization of the content of this item.
+     * The temporary file to use.
      */
-    private File dfosFile;
+    private File tempFile;
 
     /**
-     * The tracker, which is responsible for deleting the temporary file.
+     * File to allow for serialization of the content of this item.
      */
-    private FileCleaningTracker fileCleaningTracker;
+    private File dfosFile;
 
     /**
      * The file items headers.
@@ -201,41 +199,10 @@
      * @param repository    The data repository, which is the directory in
      *                      which files will be created, should the item size
      *                      exceed the threshold.
-     * @deprecated Use {@link #DiskFileItem(FileCleaningTracker, String, String,
-     *                                      boolean, String, int, File)}.
      */
-    public DiskFileItem(String fieldName, String contentType,
-            boolean isFormField, String fileName, int sizeThreshold,
-            File repository) {
-        this(FileCleaner.getInstance(), fieldName, contentType,
-                isFormField, fileName, sizeThreshold,
-                repository);
-    }
-
-    /**
-     * Constructs a new <code>DiskFileItem</code> instance.
-     *
-     * @param tracker       The tracker, which is responsible for deleting
-     *                      the temporary file. May be null, if the file
-     *                      doesn't need to be tracked.
-     * @param fieldName     The name of the form field.
-     * @param contentType   The content type passed by the browser or
-     *                      <code>null</code> if not specified.
-     * @param isFormField   Whether or not this item is a plain form field, as
-     *                      opposed to a file upload.
-     * @param fileName      The original filename in the user's filesystem, or
-     *                      <code>null</code> if not specified.
-     * @param sizeThreshold The threshold, in bytes, below which items will be
-     *                      retained in memory and above which they will be
-     *                      stored as a file.
-     * @param repository    The data repository, which is the directory in
-     *                      which files will be created, should the item size
-     *                      exceed the threshold.
-     */
-    private DiskFileItem(FileCleaningTracker tracker, String fieldName,
+    public DiskFileItem(String fieldName,
             String contentType, boolean isFormField, String fileName,
             int sizeThreshold, File repository) {
-        this.fileCleaningTracker = tracker;
         this.fieldName = fieldName;
         this.contentType = contentType;
         this.isFormField = isFormField;
@@ -244,25 +211,6 @@
         this.repository = repository;
     }
 
-    /**
-     * Constructs a new <code>DiskFileItem</code> instance.
-     *
-     * @param factory       The factory, which is creating this instance.
-     * @param fieldName     The name of the form field.
-     * @param contentType   The content type passed by the browser or
-     *                      <code>null</code> if not specified.
-     * @param isFormField   Whether or not this item is a plain form field, as
-     *                      opposed to a file upload.
-     * @param fileName      The original filename in the user's filesystem, or
-     *                      <code>null</code> if not specified.
-     */
-    public DiskFileItem(DiskFileItemFactory factory, String fieldName,
-            String contentType, boolean isFormField, String fileName) {
-        this(factory.getFileCleaningTracker(), fieldName, contentType,
-                isFormField, fileName, factory.getSizeThreshold(),
-                factory.getRepository());
-    }
-
 
     // ------------------------------- Methods from javax.activation.DataSource
 
@@ -649,30 +597,25 @@
 
 
     /**
-     * <p>Creates and returns a {@link java.io.File File} representing a uniquely
-     * named temporary file in the configured repository path.</p>
-     * <p>If the file item factory has an associated {@link FileCleaningTracker},
-     * then the lifetime of the file is tied to the lifetime of the <code>FileItem</code>
-     * instance: The file will be deleted when the instance is garbage collected.</p>
+     * Creates and returns a {@link java.io.File File} representing a uniquely
+     * named temporary file in the configured repository path. The lifetime of
+     * the file is tied to the lifetime of the <code>FileItem</code> instance;
+     * the file will be deleted when the instance is garbage collected.
      *
      * @return The {@link java.io.File File} to be used for temporary storage.
      */
     protected File getTempFile() {
-        File tempDir = repository;
-        if (tempDir == null) {
-            tempDir = new File(System.getProperty("java.io.tmpdir"));
-        }
-
-        String tempFileName = "upload_" + UID + "_" + getUniqueId() + ".tmp";
-
-        File f = new File(tempDir, tempFileName);
-        if (fileCleaningTracker != null) {
-            /* If a tracker is present, use it. Otherwise, we've got to trust
-             * in the {@link #finalize()} method.
-             */
-            fileCleaningTracker.track(f, this);
+        if (tempFile == null) {
+            File tempDir = repository;
+            if (tempDir == null) {
+                tempDir = new File(System.getProperty("java.io.tmpdir"));
+            }
+    
+            String tempFileName = "upload_" + UID + "_" + getUniqueId() + ".tmp";
+    
+            tempFile = new File(tempDir, tempFileName);
         }
-        return f;
+        return tempFile;
     }
 
 

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java Fri Sep 21 13:13:14 2007
@@ -97,11 +97,9 @@
     /**
      * Constructs an unconfigured instance of this class. The resulting factory
      * may be configured by calling the appropriate setter methods.
-     * @deprecated Use
-     *     {@link #DiskFileItemFactory(FileCleaningTracker, int, File)}.
      */
     public DiskFileItemFactory() {
-        this(FileCleaner.getInstance(), DEFAULT_SIZE_THRESHOLD, null);
+        this(DEFAULT_SIZE_THRESHOLD, null);
     }
 
 
@@ -114,31 +112,10 @@
      * @param repository    The data repository, which is the directory in
      *                      which files will be created, should the item size
      *                      exceed the threshold.
-     * @deprecated Use
-     *     {@link #DiskFileItemFactory(FileCleaningTracker, int, File)}.
      */
     public DiskFileItemFactory(int sizeThreshold, File repository) {
-        this(FileCleaner.getInstance(), sizeThreshold, repository);
-    }
-
-    /**
-     * Constructs a preconfigured instance of this class.
-     *
-     * @param sizeThreshold The threshold, in bytes, below which items will be
-     *                      retained in memory and above which they will be
-     *                      stored as a file.
-     * @param repository    The data repository, which is the directory in
-     *                      which files will be created, should the item size
-     *                      exceed the threshold.
-     * @param tracker       The tracker, which is responsible to delete
-     *                      temporary files. May be null, if files don't need
-     *                      to be tracked.
-     */
-    public DiskFileItemFactory(FileCleaningTracker tracker, int sizeThreshold,
-            File repository) {
         this.sizeThreshold = sizeThreshold;
         this.repository = repository;
-        this.fileCleaningTracker = tracker;
     }
 
     // ------------------------------------------------------------- Properties
@@ -214,16 +191,18 @@
      *
      * @return The newly created file item.
      */
-    public FileItem createItem(
-            String fieldName,
-            String contentType,
-            boolean isFormField,
-            String fileName
-            ) {
-        return new DiskFileItem(this, fieldName, contentType,
-                isFormField, fileName);
+    public FileItem createItem(String fieldName, String contentType,
+            boolean isFormField, String fileName) {
+        DiskFileItem result = new DiskFileItem(fieldName, contentType,
+                isFormField, fileName, sizeThreshold, repository);
+        FileCleaningTracker tracker = getFileCleaningTracker();
+        if (tracker != null) {
+            tracker.track(result.getTempFile(), this);
+        }
+        return result;
     }
 
+
     /**
      * Returns the tracker, which is responsible for deleting temporary
      * files.
@@ -245,5 +224,4 @@
     public void setFileCleaningTracker(FileCleaningTracker pTracker) {
         fileCleaningTracker = pTracker;
     }
-
 }

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java Fri Sep 21 13:13:14 2007
@@ -20,6 +20,7 @@
 import javax.servlet.ServletContextListener;
 import javax.servlet.ServletContextEvent;
 
+import org.apache.commons.io.FileCleaner;
 import org.apache.commons.io.FileCleaningTracker;
 
 

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java Fri Sep 21 13:13:14 2007
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.fileupload.util;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -31,7 +32,7 @@
  * @author Michael C. Macaluso
  * @since 1.3
  */
-public class FileItemHeadersImpl implements FileItemHeaders {
+public class FileItemHeadersImpl implements FileItemHeaders, Serializable {
     private static final long serialVersionUID = -4455695752627032559L;
 
     /**

Modified: commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java (original)
+++ commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java Fri Sep 21 13:13:14 2007
@@ -16,17 +16,14 @@
  */
 package org.apache.commons.fileupload;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-import java.util.Arrays;
 
 import junit.framework.TestCase;
-import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 
 

Modified: commons/proper/fileupload/trunk/xdocs/using.xml
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/xdocs/using.xml?rev=578253&r1=578252&r2=578253&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/xdocs/using.xml (original)
+++ commons/proper/fileupload/trunk/xdocs/using.xml Fri Sep 21 13:13:14 2007
@@ -283,23 +283,15 @@
     <p>
       Such temporary files are deleted automatically, if they are no longer
       used (more precisely, if the corresponding instance of <code>java.io.File</code>
-      is garbage collected. This is done silently by an instance of
-      <code>org.apache.commons.io.FileCleaningTracker</code>, which starts a
-      reaper thread.
+      is garbage collected. This is done silently by the <code>org.apache.commons.io.FileCleaner</code>
+      class, which starts a reaper thread.
     </p>
     <p>
-      In what follows, we assume that you are writing a web application. In
-      a web application, resource cleanup is controlled by an instance of
-      <code>javax.servlet.ServletContextListener</code>. In other environments,
-      similar ideas must be applied.
-    </p>
-
-    <subsection name="The FileCleanerCleanup">
-      <p>
-        Your web application should use an instance of
-        <code>org.apache.commons.fileupload.FileCleanerCleanup</code>.
-        That's very easy, you've simply got to add it to your <code>web.xml</code>:
-      </p>
+      This reaper thread should be stopped, if it is no longer needed. In
+      a servlet environment, this is done by using a special servlet
+      context listener, called
+      <a href="apidocs/org/apache/commons/fileupload/servlet/FileCleanerCleanup.html">FileCleanerCleanup</a>.
+      To do so, add a section like the following to your <code>web.xml</code>:
 <source><![CDATA[
 <web-app>
   ...