Author: markt
Date: Fri Mar 15 11:10:27 2013
New Revision: 1456895
URL: http://svn.apache.org/r1456895
Log:
Merge updates from Commons FileUpload to r1453817
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/ (props changed)
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItem.java
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItemFactory.java
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/package-info.java
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/ServletRequestContext.java
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/package-info.java
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/LimitedInputStream.java
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/package-info.java
Propchange: tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/
------------------------------------------------------------------------------
Merged
/commons/proper/fileupload/trunk/src/main/java/org/apache/commons/fileupload:r1453286-1453817
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java
Fri Mar 15 11:10:27 2013
@@ -87,16 +87,13 @@ public abstract class FileUploadBase {
return false;
}
-
// ----------------------------------------------------- Manifest constants
-
/**
* HTTP content type header name.
*/
public static final String CONTENT_TYPE = "Content-type";
-
/**
* HTTP content disposition header name.
*/
@@ -107,40 +104,33 @@ public abstract class FileUploadBase {
*/
public static final String CONTENT_LENGTH = "Content-length";
-
/**
* Content-disposition value for form data.
*/
public static final String FORM_DATA = "form-data";
-
/**
* Content-disposition value for file attachment.
*/
public static final String ATTACHMENT = "attachment";
-
/**
* Part of HTTP content type header.
*/
public static final String MULTIPART = "multipart/";
-
/**
* HTTP content type header for multipart forms.
*/
public static final String MULTIPART_FORM_DATA = "multipart/form-data";
-
/**
* HTTP content type header for multiple uploads.
*/
public static final String MULTIPART_MIXED = "multipart/mixed";
-
// ----------------------------------------------------------- Data members
-
/**
* The maximum size permitted for the complete request, as opposed to
* {@link #fileSizeMax}. A value of -1 indicates no maximum.
@@ -165,7 +155,6 @@ public abstract class FileUploadBase {
// ----------------------------------------------------- Property accessors
-
/**
* Returns the factory class used when creating file items.
*
@@ -173,7 +162,6 @@ public abstract class FileUploadBase {
*/
public abstract FileItemFactory getFileItemFactory();
-
/**
* Sets the factory class to use when creating file items.
*
@@ -181,7 +169,6 @@ public abstract class FileUploadBase {
*/
public abstract void setFileItemFactory(FileItemFactory factory);
-
/**
* Returns the maximum allowed size of a complete request, as opposed
* to {@link #getFileSizeMax()}.
@@ -196,7 +183,6 @@ public abstract class FileUploadBase {
return sizeMax;
}
-
/**
* Sets the maximum allowed size of a complete request, as opposed
* to {@link #setFileSizeMax(long)}.
@@ -245,7 +231,6 @@ public abstract class FileUploadBase {
return headerEncoding;
}
-
/**
* Specifies the character encoding to be used when reading the headers of
* individual part. When not specified, or <code>null</code>, the request
@@ -258,10 +243,8 @@ public abstract class FileUploadBase {
headerEncoding = encoding;
}
-
// --------------------------------------------------------- Public methods
-
/**
* Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
* compliant <code>multipart/form-data</code> stream.
@@ -348,10 +331,8 @@ public abstract class FileUploadBase {
}
}
-
// ------------------------------------------------------ Protected methods
-
/**
* Retrieves the boundary from the <code>Content-type</code> header.
*
@@ -376,7 +357,6 @@ public abstract class FileUploadBase {
return boundary;
}
-
/**
* Retrieves the file name from the <code>Content-disposition</code>
* header.
@@ -420,7 +400,6 @@ public abstract class FileUploadBase {
return fileName;
}
-
/**
* Retrieves the field name from the <code>Content-disposition</code>
* header.
@@ -553,34 +532,50 @@ public abstract class FileUploadBase {
* {@link FileUploadBase#getItemIterator(RequestContext)}.
*/
private class FileItemIteratorImpl implements FileItemIterator {
+
/**
* Default implementation of {@link FileItemStream}.
*/
class FileItemStreamImpl implements FileItemStream {
- /** The file items content type.
+
+ /**
+ * The file items content type.
*/
private final String contentType;
- /** The file items field name.
+
+ /**
+ * The file items field name.
*/
private final String fieldName;
- /** The file items file name.
+
+ /**
+ * The file items file name.
*/
private final String name;
- /** Whether the file item is a form field.
+
+ /**
+ * Whether the file item is a form field.
*/
private final boolean formField;
- /** The file items input stream.
+
+ /**
+ * The file items input stream.
*/
private final InputStream stream;
- /** Whether the file item was already opened.
+
+ /**
+ * Whether the file item was already opened.
*/
private boolean opened;
- /** The headers, if any.
+
+ /**
+ * The headers, if any.
*/
private FileItemHeaders headers;
/**
* Creates a new instance.
+ *
* @param pName The items file name, or null.
* @param pFieldName The items field name.
* @param pContentType The items content type, or null.
@@ -630,6 +625,7 @@ public abstract class FileUploadBase {
/**
* Returns the items content type, or null.
+ *
* @return Content type, if known, or null.
*/
@Override
@@ -639,6 +635,7 @@ public abstract class FileUploadBase {
/**
* Returns the items field name.
+ *
* @return Field name.
*/
@Override
@@ -648,6 +645,7 @@ public abstract class FileUploadBase {
/**
* Returns the items file name.
+ *
* @return File name, if known, or null.
* @throws InvalidFileNameException The file name contains a NUL
character,
* which might be an indicator of a security attack. If you
intend to
@@ -661,6 +659,7 @@ public abstract class FileUploadBase {
/**
* Returns, whether this is a form field.
+ *
* @return True, if the item is a form field,
* otherwise false.
*/
@@ -672,6 +671,7 @@ public abstract class FileUploadBase {
/**
* Returns an input stream, which may be used to
* read the items contents.
+ *
* @return Opened input stream.
* @throws IOException An I/O error occurred.
*/
@@ -689,6 +689,7 @@ public abstract class FileUploadBase {
/**
* Closes the file item.
+ *
* @throws IOException An I/O error occurred.
*/
void close() throws IOException {
@@ -697,6 +698,7 @@ public abstract class FileUploadBase {
/**
* Returns the file item headers.
+ *
* @return The items header object
*/
@Override
@@ -706,43 +708,52 @@ public abstract class FileUploadBase {
/**
* Sets the file item headers.
+ *
* @param pHeaders The items header object
*/
@Override
public void setHeaders(FileItemHeaders pHeaders) {
headers = pHeaders;
}
+
}
/**
* The multi part stream to process.
*/
private final MultipartStream multi;
+
/**
* The notifier, which used for triggering the
* {@link ProgressListener}.
*/
private final MultipartStream.ProgressNotifier notifier;
+
/**
* The boundary, which separates the various parts.
*/
private final byte[] boundary;
+
/**
* The item, which we currently process.
*/
private FileItemStreamImpl currentItem;
+
/**
* The current items field name.
*/
private String currentFieldName;
+
/**
* Whether we are currently skipping the preamble.
*/
private boolean skipPreamble;
+
/**
* Whether the current item may still be read.
*/
private boolean itemValid;
+
/**
* Whether we have seen the end of the file.
*/
@@ -750,6 +761,7 @@ public abstract class FileUploadBase {
/**
* Creates a new instance.
+ *
* @param ctx The request context.
* @throws FileUploadException An error occurred while
* parsing the request.
@@ -817,7 +829,8 @@ public abstract class FileUploadBase {
}
/**
- * Called for finding the nex item, if any.
+ * Called for finding the next item, if any.
+ *
* @return True, if an next item was found, otherwise false.
* @throws IOException An I/O error occurred.
*/
@@ -900,6 +913,7 @@ public abstract class FileUploadBase {
/**
* Returns, whether another instance of {@link FileItemStream}
* is available.
+ *
* @throws FileUploadException Parsing or processing the
* file item failed.
* @throws IOException Reading the file item failed.
@@ -919,6 +933,7 @@ public abstract class FileUploadBase {
/**
* Returns the next available {@link FileItemStream}.
+ *
* @throws java.util.NoSuchElementException No more items are
* available. Use {@link #hasNext()} to prevent this exception.
* @throws FileUploadException Parsing or processing the
@@ -935,6 +950,7 @@ public abstract class FileUploadBase {
itemValid = false;
return currentItem;
}
+
}
/**
@@ -967,7 +983,9 @@ public abstract class FileUploadBase {
*/
public static class InvalidContentTypeException
extends FileUploadException {
- /** The exceptions UID, for serializing an instance.
+
+ /**
+ * The exceptions UID, for serializing an instance.
*/
private static final long serialVersionUID = -9073026332015646668L;
@@ -988,6 +1006,7 @@ public abstract class FileUploadBase {
public InvalidContentTypeException(String message) {
super(message);
}
+
}
/**
@@ -1014,11 +1033,13 @@ public abstract class FileUploadBase {
}
}
- /** This exception is thrown, if a requests permitted size
+ /**
+ * This exception is thrown, if a requests permitted size
* is exceeded.
*/
public abstract static class SizeException extends FileUploadException {
+
private static final long serialVersionUID = -8776225574705254126L;
/**
@@ -1033,6 +1054,7 @@ public abstract class FileUploadBase {
/**
* Creates a new instance.
+ *
* @param message The detail message.
* @param actual The actual number of bytes in the request.
* @param permitted The requests size limit, in bytes.
@@ -1062,14 +1084,57 @@ public abstract class FileUploadBase {
public long getPermittedSize() {
return permitted;
}
+
}
/**
+<<<<<<< .working
+=======
+ * Thrown to indicate that the request size is not specified. In other
+ * words, it is thrown, if the content-length header is missing or
+ * contains the value -1.
+ *
+ * @deprecated 1.2 As of commons-fileupload 1.2, the presence of a
+ * content-length header is no longer required.
+ */
+ @Deprecated
+ public static class UnknownSizeException
+ extends FileUploadException {
+
+ /**
+ * The exceptions UID, for serializing an instance.
+ */
+ private static final long serialVersionUID = 7062279004812015273L;
+
+ /**
+ * Constructs a <code>UnknownSizeException</code> with no
+ * detail message.
+ */
+ public UnknownSizeException() {
+ super();
+ }
+
+ /**
+ * Constructs an <code>UnknownSizeException</code> with
+ * the specified detail message.
+ *
+ * @param message The detail message.
+ */
+ public UnknownSizeException(String message) {
+ super(message);
+ }
+
+ }
+
+ /**
+>>>>>>> .merge-right.r1453817
* Thrown to indicate that the request size exceeds the configured maximum.
*/
public static class SizeLimitExceededException
extends SizeException {
- /** The exceptions UID, for serializing an instance.
+
+ /**
+ * The exceptions UID, for serializing an instance.
*/
private static final long serialVersionUID = -2474893167098052828L;
@@ -1085,6 +1150,7 @@ public abstract class FileUploadBase {
long permitted) {
super(message, actual, permitted);
}
+
}
/**
@@ -1092,7 +1158,9 @@ public abstract class FileUploadBase {
*/
public static class FileSizeLimitExceededException
extends SizeException {
- /** The exceptions UID, for serializing an instance.
+
+ /**
+ * The exceptions UID, for serializing an instance.
*/
private static final long serialVersionUID = 8150776562029630058L;
@@ -1122,6 +1190,7 @@ public abstract class FileUploadBase {
/**
* Returns the file name of the item, which caused the
* exception.
+ *
* @return File name, if known, or null.
*/
public String getFileName() {
@@ -1139,6 +1208,7 @@ public abstract class FileUploadBase {
/**
* Returns the field name of the item, which caused the
* exception.
+ *
* @return Field name, if known, or null.
*/
public String getFieldName() {
@@ -1152,10 +1222,12 @@ public abstract class FileUploadBase {
public void setFieldName(String pFieldName) {
fieldName = pFieldName;
}
+
}
/**
* Returns the progress listener.
+ *
* @return The progress listener, if any, or null.
*/
public ProgressListener getProgressListener() {
@@ -1164,9 +1236,11 @@ public abstract class FileUploadBase {
/**
* Sets the progress listener.
+ *
* @param pListener The progress listener, if any. Defaults to null.
*/
public void setProgressListener(ProgressListener pListener) {
listener = pListener;
}
+
}
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItem.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItem.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItem.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItem.java
Fri Mar 15 11:10:27 2013
@@ -29,6 +29,8 @@ import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.tomcat.util.http.fileupload.DeferredFileOutputStream;
import org.apache.tomcat.util.http.fileupload.FileItem;
@@ -101,13 +103,12 @@ public class DiskFileItem
* UID used in unique file name generation.
*/
private static final String UID =
- new java.rmi.server.UID().toString()
- .replace(':', '_').replace('-', '_');
+ UUID.randomUUID().toString().replace('-', '_');
/**
* Counter used in unique identifier generation.
*/
- private static int counter = 0;
+ private static final AtomicInteger counter = new AtomicInteger(0);
/**
* The name of the form field as provided by the browser.
@@ -319,10 +320,10 @@ public class DiskFileItem
}
byte[] fileData = new byte[(int) getSize()];
- FileInputStream fis = null;
+ InputStream fis = null;
try {
- fis = new FileInputStream(dfos.getFile());
+ fis = new BufferedInputStream(new FileInputStream(dfos.getFile()));
fis.read(fileData);
} catch (IOException e) {
fileData = null;
@@ -362,9 +363,9 @@ public class DiskFileItem
* character encoding. This method uses {@link #get()} to retrieve the
* contents of the file.
*
- * @return The contents of the file, as a string.
+ * <b>TODO</b> Consider making this method throw
UnsupportedEncodingException.
*
- * TODO Consider making this method throw UnsupportedEncodingException.
+ * @return The contents of the file, as a string.
*/
@Override
public String getString() {
@@ -617,10 +618,7 @@ public class DiskFileItem
*/
private static String getUniqueId() {
final int limit = 100000000;
- int current;
- synchronized (DiskFileItem.class) {
- current = counter++;
- }
+ int current = counter.getAndIncrement();
String id = Integer.toString(current);
// If you manage to get more than 100 million of ids, you'll
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItemFactory.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItemFactory.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItemFactory.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/DiskFileItemFactory.java
Fri Mar 15 11:10:27 2013
@@ -200,7 +200,7 @@ public class DiskFileItemFactory impleme
isFormField, fileName, sizeThreshold, repository);
FileCleaningTracker tracker = getFileCleaningTracker();
if (tracker != null) {
- tracker.track(result.getTempFile(), this);
+ tracker.track(result.getTempFile(), result);
}
return result;
}
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/package-info.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/package-info.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/package-info.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/disk/package-info.java
Fri Mar 15 11:10:27 2013
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
/**
* <p>
* A disk-based implementation of the
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java
Fri Mar 15 11:10:27 2013
@@ -14,6 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+
/**
* <p><b>NOTE:</b> This code has been copied from commons-fileupload trunk
* revision 1xxxxxx and commons-io 1.4 and package renamed to avoid clashes
with
@@ -83,4 +85,4 @@
* for further details and examples of how to use this package.
* </p>
*/
-package org.apache.tomcat.util.http.fileupload;
\ No newline at end of file
+package org.apache.tomcat.util.http.fileupload;
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/ServletRequestContext.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/ServletRequestContext.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/ServletRequestContext.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/ServletRequestContext.java
Fri Mar 15 11:10:27 2013
@@ -42,7 +42,7 @@ public class ServletRequestContext imple
/**
* The request for which the context is being provided.
*/
- private HttpServletRequest request;
+ private final HttpServletRequest request;
// ----------------------------------------------------------- Constructors
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/package-info.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/package-info.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/package-info.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/servlet/package-info.java
Fri Mar 15 11:10:27 2013
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
/**
* <p>
* An implementation of
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/LimitedInputStream.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/LimitedInputStream.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/LimitedInputStream.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/LimitedInputStream.java
Fri Mar 15 11:10:27 2013
@@ -29,7 +29,7 @@ public abstract class LimitedInputStream
/**
* The maximum size of an item, in bytes.
*/
- private long sizeMax;
+ private final long sizeMax;
/**
* The current number of bytes.
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/package-info.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/package-info.java?rev=1456895&r1=1456894&r2=1456895&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/package-info.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/util/http/fileupload/util/package-info.java
Fri Mar 15 11:10:27 2013
@@ -1,4 +1,3 @@
-
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -15,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
/**
* This package contains various IO related utility classes
* or methods, which are basically reusable and not necessarily
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]