You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/06/12 14:09:34 UTC

[commons-fileupload] branch master updated: Pull up FileUpload into AbstractFileUpload

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-fileupload.git


The following commit(s) were added to refs/heads/master by this push:
     new 5b94321  Pull up FileUpload into AbstractFileUpload
5b94321 is described below

commit 5b943214256f5388f4beef1b7b83150c761835ca
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Mon Jun 12 10:09:29 2023 -0400

    Pull up FileUpload into AbstractFileUpload
---
 .../commons/fileupload2/AbstractFileUpload.java    |  45 ++++++++-
 .../org/apache/commons/fileupload2/FileItem.java   |   2 +-
 .../fileupload2/FileItemInputIteratorImpl.java     |   6 +-
 .../org/apache/commons/fileupload2/FileUpload.java | 111 ---------------------
 .../commons/fileupload2/disk/package-info.java     |   2 +-
 .../apache/commons/fileupload2/package-info.java   |   2 +-
 .../fileupload2/AbstractFileUploadTest.java        |  10 +-
 .../fileupload2/AbstractFileUploadWrapper.java     |   6 +-
 .../fileupload2/AbstractProgressListenerTest.java  |   2 +-
 .../commons/fileupload2/AbstractSizesTest.java     |   2 +-
 .../commons/fileupload2/AbstractStreamingTest.java |   6 +-
 .../apache/commons/fileupload2/AbstractTest.java   |   2 +-
 .../jakarta/JakartaServletFileUpload.java          |   9 +-
 .../commons/fileupload2/jakarta/package-info.java  |   2 +-
 .../fileupload2/javax/JavaxServletFileUpload.java  |   9 +-
 .../commons/fileupload2/javax/package-info.java    |   6 +-
 .../portlet/JavaxPortletFileUpload.java            |   9 +-
 .../commons/fileupload2/portlet/package-info.java  |   4 +-
 18 files changed, 80 insertions(+), 155 deletions(-)

diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/AbstractFileUpload.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/AbstractFileUpload.java
index 18569c9..a3d460b 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/AbstractFileUpload.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/AbstractFileUpload.java
@@ -40,8 +40,9 @@ import org.apache.commons.io.IOUtils;
  * <p>
  * How the data for individual parts is stored is determined by the factory used to create them; a given part may be in memory, on disk, or somewhere else.
  * </p>
+ * @param <T> the context type
  */
-public abstract class AbstractFileUpload {
+public abstract class AbstractFileUpload<T> {
 
     /**
      * Boundary parameter key.
@@ -141,6 +142,11 @@ public abstract class AbstractFileUpload {
      */
     private ProgressListener progressListener = ProgressListener.NOP;
 
+    /**
+     * The factory to use to create new form items.
+     */
+    private FileItemFactory fileItemFactory;
+
     /**
      * Gets the boundary from the {@code Content-type} header.
      *
@@ -201,7 +207,9 @@ public abstract class AbstractFileUpload {
      *
      * @return The factory class for new file items.
      */
-    public abstract FileItemFactory getFileItemFactory();
+    public FileItemFactory getFileItemFactory() {
+        return fileItemFactory;
+    }
 
     /**
      * Gets the file name from the {@code Content-disposition} header.
@@ -278,6 +286,17 @@ public abstract class AbstractFileUpload {
         return new FileItemInputIteratorImpl(this, requestContext);
     }
 
+    /**
+     * Gets a file item iterator.
+     *
+     * @param request The servlet request to be parsed.
+     * @return An iterator to instances of {@code FileItemInput} parsed from the request, in the order that they were transmitted.
+     * @throws FileUploadException if there are problems reading/parsing the request or storing files.
+     * @throws IOException         An I/O error occurred. This may be a network error while communicating with the client or a problem while storing the
+     *                             uploaded content.
+     */
+    public abstract FileItemInputIterator getItemIterator(T request) throws FileUploadException, IOException;
+
     /**
      * Parses the {@code header-part} and returns as key/value pairs.
      * <p>
@@ -407,6 +426,15 @@ public abstract class AbstractFileUpload {
         return itemsMap;
     }
 
+    /**
+     * Parses an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> compliant {@code multipart/form-data} stream.
+     *
+     * @param request The servlet request to be parsed.
+     * @return A map of {@code FileItem} instances parsed from the request.
+     * @throws FileUploadException if there are problems reading/parsing the request or storing files.
+     */
+    public abstract Map<String, List<FileItem>> parseParameterMap(T request) throws FileUploadException;
+
     /**
      * Parses an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> compliant {@code multipart/form-data} stream.
      *
@@ -464,6 +492,15 @@ public abstract class AbstractFileUpload {
         }
     }
 
+    /**
+     * Parses an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> compliant {@code multipart/form-data} stream.
+     *
+     * @param request The servlet request to be parsed.
+     * @return A list of {@code FileItem} instances parsed from the request, in the order that they were transmitted.
+     * @throws FileUploadException if there are problems reading/parsing the request or storing files.
+     */
+    public abstract List<FileItem> parseRequest(T request) throws FileUploadException;
+
     /**
      * Sets the maximum number of files allowed per request.
      *
@@ -478,7 +515,9 @@ public abstract class AbstractFileUpload {
      *
      * @param factory The factory class for new file items.
      */
-    public abstract void setFileItemFactory(FileItemFactory factory);
+    public void setFileItemFactory(final FileItemFactory factory) {
+        this.fileItemFactory = factory;
+    }
 
     /**
      * Sets the maximum allowed size of a single uploaded file, as opposed to {@link #getSizeMax()}.
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItem.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItem.java
index ebc74c0..414a02d 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItem.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItem.java
@@ -29,7 +29,7 @@ import java.nio.file.Path;
  * This class represents a file or form item that was received within a {@code multipart/form-data} POST request.
  * </p>
  * <p>
- * After retrieving an instance of this class from a {@link FileUpload FileUpload} instance (see
+ * After retrieving an instance of this class from a {@link AbstractFileUpload FileUpload} instance (see
  * {@code org.apache.commons.fileupload2.servlet.ServletFileUpload #parseRequest(javax.servlet.http.HttpServletRequest)}), you may either request all contents
  * of the file at once using {@link #get()} or request an {@link InputStream} with {@link #getInputStream()} and process the file without
  * attempting to load it into memory, which may come handy with large files.
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemInputIteratorImpl.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemInputIteratorImpl.java
index b11f760..e58671b 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemInputIteratorImpl.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemInputIteratorImpl.java
@@ -40,7 +40,7 @@ class FileItemInputIteratorImpl implements FileItemInputIterator {
      *
      * @see AbstractFileUpload
      */
-    private final AbstractFileUpload fileUpload;
+    private final AbstractFileUpload<?> fileUpload;
 
     /**
      * The request context.
@@ -107,7 +107,7 @@ class FileItemInputIteratorImpl implements FileItemInputIterator {
      * @throws FileUploadException An error occurred while parsing the request.
      * @throws IOException         An I/O error occurred.
      */
-    FileItemInputIteratorImpl(final AbstractFileUpload fileUploadBase, final RequestContext requestContext) throws FileUploadException, IOException {
+    FileItemInputIteratorImpl(final AbstractFileUpload<?> fileUploadBase, final RequestContext requestContext) throws FileUploadException, IOException {
         this.fileUpload = fileUploadBase;
         this.sizeMax = fileUploadBase.getSizeMax();
         this.fileSizeMax = fileUploadBase.getFileSizeMax();
@@ -247,7 +247,7 @@ class FileItemInputIteratorImpl implements FileItemInputIterator {
         return findNextItem();
     }
 
-    protected void init(final AbstractFileUpload fileUploadBase, final RequestContext initContext) throws FileUploadException, IOException {
+    protected void init(final AbstractFileUpload<?> fileUploadBase, final RequestContext initContext) throws FileUploadException, IOException {
         final String contentType = requestContext.getContentType();
         if (null == contentType || !contentType.toLowerCase(Locale.ENGLISH).startsWith(AbstractFileUpload.MULTIPART)) {
             throw new FileUploadContentTypeException(String.format("the request doesn't contain a %s or %s stream, content type header is %s",
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileUpload.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileUpload.java
deleted file mode 100644
index c00175d..0000000
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileUpload.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.fileupload2;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-/**
- * High level API for processing file uploads.
- * <p>
- * This class handles multiple files per single HTML widget, sent using {@code multipart/mixed} encoding type, as specified by
- * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>. Use {@link #parseRequest(RequestContext)} to acquire a list of
- * {@link FileItem} associated with a given HTML widget.
- * </p>
- * <p>
- * How the data for individual parts is stored is determined by the factory used to create them; a given part may be in memory, on disk, or somewhere else.
- * </p>
- * @param <T> the context type
- */
-public abstract class FileUpload<T> extends AbstractFileUpload {
-
-    /**
-     * The factory to use to create new form items.
-     */
-    private FileItemFactory fileItemFactory;
-
-    /**
-     * Constructs an uninitialized instance of this class.
-     *
-     * A factory must be configured, using {@code setFileItemFactory()}, before attempting to parse requests.
-     *
-     * @see #FileUpload(FileItemFactory)
-     */
-    public FileUpload() {
-    }
-
-    /**
-     * Constructs an instance of this class which uses the supplied factory to create {@code FileItem} instances.
-     *
-     * @see #FileUpload()
-     * @param fileItemFactory The factory to use for creating file items.
-     */
-    public FileUpload(final FileItemFactory fileItemFactory) {
-        this.fileItemFactory = fileItemFactory;
-    }
-
-    /**
-     * Gets the factory class used when creating file items.
-     *
-     * @return The factory class for new file items.
-     */
-    @Override
-    public FileItemFactory getFileItemFactory() {
-        return fileItemFactory;
-    }
-
-    /**
-     * Gets a file item iterator.
-     *
-     * @param request The servlet request to be parsed.
-     * @return An iterator to instances of {@code FileItemInput} parsed from the request, in the order that they were transmitted.
-     * @throws FileUploadException if there are problems reading/parsing the request or storing files.
-     * @throws IOException         An I/O error occurred. This may be a network error while communicating with the client or a problem while storing the
-     *                             uploaded content.
-     */
-    public abstract FileItemInputIterator getItemIterator(T request) throws FileUploadException, IOException;
-
-    /**
-     * Parses an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> compliant {@code multipart/form-data} stream.
-     *
-     * @param request The servlet request to be parsed.
-     * @return A map of {@code FileItem} instances parsed from the request.
-     * @throws FileUploadException if there are problems reading/parsing the request or storing files.
-     */
-    public abstract Map<String, List<FileItem>> parseParameterMap(T request) throws FileUploadException;
-
-    /**
-     * Parses an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> compliant {@code multipart/form-data} stream.
-     *
-     * @param request The servlet request to be parsed.
-     * @return A list of {@code FileItem} instances parsed from the request, in the order that they were transmitted.
-     * @throws FileUploadException if there are problems reading/parsing the request or storing files.
-     */
-    public abstract List<FileItem> parseRequest(T request) throws FileUploadException;
-
-    /**
-     * Sets the factory class to use when creating file items.
-     *
-     * @param factory The factory class for new file items.
-     */
-    @Override
-    public void setFileItemFactory(final FileItemFactory factory) {
-        this.fileItemFactory = factory;
-    }
-
-}
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/package-info.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/package-info.java
index 75c7a91..fb7cdf5 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/package-info.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/package-info.java
@@ -22,7 +22,7 @@
  * </p>
  * <p>
  * In typical usage, an instance of {@link org.apache.commons.fileupload2.disk.DiskFileItemFactory} would be created, configured, and then
- * passed to a {@link org.apache.commons.fileupload2.FileUpload} implementation such as
+ * passed to a {@link org.apache.commons.fileupload2.AbstractFileUpload} implementation such as
  * {@code org.apache.commons.fileupload2.servlet.ServletFileUpload ServletFileUpload} or
  * {@code org.apache.commons.fileupload2.portlet.PortletFileUpload PortletFileUpload}.
  * </p>
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/package-info.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/package-info.java
index 79a101e..9afe4a0 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/package-info.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/package-info.java
@@ -22,7 +22,7 @@
  * </p>
  * <p>
  * While this package provides the generic functionality for file uploads, these classes are not typically used directly. Instead, normal usage involves one of
- * the provided extensions of {@link org.apache.commons.fileupload2.FileUpload} such as
+ * the provided extensions of {@link org.apache.commons.fileupload2.AbstractFileUpload} such as
  * {@code org.apache.commons.fileupload2.servlet.ServletFileUpload ServletFileUpload} or
  * {@code org.apache.commons.fileupload2.portlet.PortletFileUpload PortletFileUpload}, together with a factory for
  * {@link org.apache.commons.fileupload2.FileItem} instances, such as {@link org.apache.commons.fileupload2.disk.DiskFileItemFactory}.
diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractFileUploadTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractFileUploadTest.java
index 4cef95c..4e39a48 100644
--- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractFileUploadTest.java
+++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractFileUploadTest.java
@@ -28,12 +28,12 @@ import java.util.List;
 import org.junit.jupiter.api.Test;
 
 /**
- * Common tests for implementations of {@link FileUpload}. This is a parameterized test. Tests must be valid and common to all implementations of FileUpload
- * added as parameter in this class.
+ * Common tests for implementations of {@link AbstractFileUpload}. This is a parameterized test. Tests must be valid and common to all implementations of
+ * FileUpload added as parameter in this class.
  *
- * @param <T> The type for {@link FileUpload}.
+ * @param <T> The type for {@link AbstractFileUpload}.
  */
-public abstract class AbstractFileUploadTest<T extends FileUpload<?>> extends AbstractFileUploadWrapper<T> {
+public abstract class AbstractFileUploadTest<T extends AbstractFileUpload<?>> extends AbstractFileUploadWrapper<T> {
 
     protected AbstractFileUploadTest(final T fileUpload) {
         super(fileUpload);
@@ -53,7 +53,7 @@ public abstract class AbstractFileUploadTest<T extends FileUpload<?>> extends Ab
     /**
      * Tests <a href="https://issues.apache.org/jira/browse/FILEUPLOAD-239">FILEUPLOAD-239</a>
      *
-     * @throws IOException         Test failure.
+     * @throws IOException Test failure.
      */
     @Test
     public void testContentTypeAttachment() throws IOException {
diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractFileUploadWrapper.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractFileUploadWrapper.java
index 303471d..c5c9e85 100644
--- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractFileUploadWrapper.java
+++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractFileUploadWrapper.java
@@ -20,12 +20,12 @@ import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 /**
- * Common tests for implementations of {@link FileUpload}. This is a parameterized test. Tests must be valid and common to all implementations of FileUpload
+ * Common tests for implementations of {@link AbstractFileUpload}. This is a parameterized test. Tests must be valid and common to all implementations of FileUpload
  * added as parameter in this class.
  *
- * @param <T> The type for {@link FileUpload}.
+ * @param <T> The type for {@link AbstractFileUpload}.
  */
-public abstract class AbstractFileUploadWrapper<T extends FileUpload<?>> {
+public abstract class AbstractFileUploadWrapper<T extends AbstractFileUpload<?>> {
 
     protected final T upload;
 
diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java
index fa24c38..d016549 100644
--- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java
+++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractProgressListenerTest.java
@@ -32,7 +32,7 @@ import org.junit.jupiter.api.Test;
  * @param <F> The subclass of FileUpload.
  * @param <R> The type of FileUpload request.
  */
-public abstract class AbstractProgressListenerTest<F extends FileUpload<R>, R> extends AbstractTest<F, R> {
+public abstract class AbstractProgressListenerTest<F extends AbstractFileUpload<R>, R> extends AbstractTest<F, R> {
 
     protected static class ProgressListenerImpl implements ProgressListener {
 
diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractSizesTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractSizesTest.java
index fba7cdb..6631cfd 100644
--- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractSizesTest.java
+++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractSizesTest.java
@@ -36,7 +36,7 @@ import org.junit.jupiter.api.Test;
  * @param <F> The subclass of FileUpload.
  * @param <R> The type of FileUpload request.
  */
-public abstract class AbstractSizesTest<F extends FileUpload<R>, R> extends AbstractTest<F, R> {
+public abstract class AbstractSizesTest<F extends AbstractFileUpload<R>, R> extends AbstractTest<F, R> {
 
     /**
      * Checks, whether limiting the file size works.
diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractStreamingTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractStreamingTest.java
index 8e21112..be4977d 100644
--- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractStreamingTest.java
+++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractStreamingTest.java
@@ -41,7 +41,7 @@ import org.junit.jupiter.api.Test;
  * @param <R> The type of FileUpload request.
  * @param <C> The request context type.
  */
-public abstract class AbstractStreamingTest<F extends FileUpload<R>, R, C extends AbstractRequestContext> extends AbstractTest<F, R> {
+public abstract class AbstractStreamingTest<F extends AbstractFileUpload<R>, R, C extends AbstractRequestContext<?>> extends AbstractTest<F, R> {
 
     protected String getFooter() {
         return "-----1234--\r\n";
@@ -96,7 +96,7 @@ public abstract class AbstractStreamingTest<F extends FileUpload<R>, R, C extend
     protected List<FileItem> parseUpload(final InputStream inputStream, final int length) throws FileUploadException {
         final String contentType = "multipart/form-data; boundary=---1234";
 
-        final AbstractFileUpload upload = newFileUpload();
+        final AbstractFileUpload<?> upload = newFileUpload();
         upload.setFileItemFactory(DiskFileItemFactory.builder().get());
         final R request = newMockHttpServletRequest(inputStream, length, contentType, -1);
 
@@ -106,7 +106,7 @@ public abstract class AbstractStreamingTest<F extends FileUpload<R>, R, C extend
     protected FileItemInputIterator parseUpload(final int length, final InputStream inputStream) throws FileUploadException, IOException {
         final String contentType = "multipart/form-data; boundary=---1234";
 
-        final AbstractFileUpload upload = newFileUpload();
+        final AbstractFileUpload<?> upload = newFileUpload();
         upload.setFileItemFactory(DiskFileItemFactory.builder().get());
         final R request = newMockHttpServletRequest(inputStream, length, contentType, -1);
 
diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java
index 784a846..6dbbd63 100644
--- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java
+++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/AbstractTest.java
@@ -26,7 +26,7 @@ import java.nio.charset.StandardCharsets;
  * @param <F> The subclass of FileUpload.
  * @param <R> The type of FileUpload request.
  */
-public abstract class AbstractTest<F extends FileUpload<R>, R> {
+public abstract class AbstractTest<F extends AbstractFileUpload<R>, R> {
 
     protected abstract F newFileUpload();
 
diff --git a/commons-fileupload2-jakarta/src/main/java/org/apache/commons/fileupload2/jakarta/JakartaServletFileUpload.java b/commons-fileupload2-jakarta/src/main/java/org/apache/commons/fileupload2/jakarta/JakartaServletFileUpload.java
index 6a3e36c..60933d7 100644
--- a/commons-fileupload2-jakarta/src/main/java/org/apache/commons/fileupload2/jakarta/JakartaServletFileUpload.java
+++ b/commons-fileupload2-jakarta/src/main/java/org/apache/commons/fileupload2/jakarta/JakartaServletFileUpload.java
@@ -24,7 +24,6 @@ import org.apache.commons.fileupload2.AbstractFileUpload;
 import org.apache.commons.fileupload2.FileItem;
 import org.apache.commons.fileupload2.FileItemFactory;
 import org.apache.commons.fileupload2.FileItemInputIterator;
-import org.apache.commons.fileupload2.FileUpload;
 import org.apache.commons.fileupload2.FileUploadException;
 
 import jakarta.servlet.http.HttpServletRequest;
@@ -40,7 +39,7 @@ import jakarta.servlet.http.HttpServletRequest;
  * How the data for individual parts is stored is determined by the factory used to create them; a given part may be in memory, on disk, or somewhere else.
  * </p>
  */
-public class JakartaServletFileUpload extends FileUpload<HttpServletRequest> {
+public class JakartaServletFileUpload extends AbstractFileUpload<HttpServletRequest> {
 
     /**
      * Constant for HTTP POST method.
@@ -62,7 +61,7 @@ public class JakartaServletFileUpload extends FileUpload<HttpServletRequest> {
      * Constructs an uninitialized instance of this class. A factory must be configured, using {@code setFileItemFactory()}, before attempting to parse
      * requests.
      *
-     * @see FileUpload#FileUpload(FileItemFactory)
+     * @see AbstractFileUpload#AbstractFileUpload()
      */
     public JakartaServletFileUpload() {
     }
@@ -70,11 +69,11 @@ public class JakartaServletFileUpload extends FileUpload<HttpServletRequest> {
     /**
      * Constructs an instance of this class which uses the supplied factory to create {@code FileItem} instances.
      *
-     * @see FileUpload#FileUpload()
+     * @see AbstractFileUpload#AbstractFileUpload()
      * @param fileItemFactory The factory to use for creating file items.
      */
     public JakartaServletFileUpload(final FileItemFactory fileItemFactory) {
-        super(fileItemFactory);
+        setFileItemFactory(fileItemFactory);
     }
 
     /**
diff --git a/commons-fileupload2-jakarta/src/main/java/org/apache/commons/fileupload2/jakarta/package-info.java b/commons-fileupload2-jakarta/src/main/java/org/apache/commons/fileupload2/jakarta/package-info.java
index b82309c..72246d3 100644
--- a/commons-fileupload2-jakarta/src/main/java/org/apache/commons/fileupload2/jakarta/package-info.java
+++ b/commons-fileupload2-jakarta/src/main/java/org/apache/commons/fileupload2/jakarta/package-info.java
@@ -17,7 +17,7 @@
 
 /**
  * <p>
- * An implementation of {@link org.apache.commons.fileupload2.FileUpload} for use in servlets conforming to the namespace {@code jakarta.servlet}.
+ * An implementation of {@link org.apache.commons.fileupload2.AbstractFileUpload} for use in servlets conforming to the namespace {@code jakarta.servlet}.
  *
  * </p>
  * <p>
diff --git a/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/JavaxServletFileUpload.java b/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/JavaxServletFileUpload.java
index d0d478b..6df3fd2 100644
--- a/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/JavaxServletFileUpload.java
+++ b/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/JavaxServletFileUpload.java
@@ -26,7 +26,6 @@ import org.apache.commons.fileupload2.AbstractFileUpload;
 import org.apache.commons.fileupload2.FileItem;
 import org.apache.commons.fileupload2.FileItemFactory;
 import org.apache.commons.fileupload2.FileItemInputIterator;
-import org.apache.commons.fileupload2.FileUpload;
 import org.apache.commons.fileupload2.FileUploadException;
 
 /**
@@ -40,7 +39,7 @@ import org.apache.commons.fileupload2.FileUploadException;
  * How the data for individual parts is stored is determined by the factory used to create them; a given part may be in memory, on disk, or somewhere else.
  * </p>
  */
-public class JavaxServletFileUpload extends FileUpload<HttpServletRequest> {
+public class JavaxServletFileUpload extends AbstractFileUpload<HttpServletRequest> {
 
     /**
      * Constant for HTTP POST method.
@@ -62,7 +61,7 @@ public class JavaxServletFileUpload extends FileUpload<HttpServletRequest> {
      * Constructs an uninitialized instance of this class. A factory must be configured, using {@code setFileItemFactory()}, before attempting to parse
      * requests.
      *
-     * @see FileUpload#FileUpload(FileItemFactory)
+     * @see AbstractFileUpload#AbstractFileUpload()
      */
     public JavaxServletFileUpload() {
     }
@@ -70,11 +69,11 @@ public class JavaxServletFileUpload extends FileUpload<HttpServletRequest> {
     /**
      * Constructs an instance of this class which uses the supplied factory to create {@code FileItem} instances.
      *
-     * @see FileUpload#FileUpload()
+     * @see AbstractFileUpload#AbstractFileUpload()
      * @param fileItemFactory The factory to use for creating file items.
      */
     public JavaxServletFileUpload(final FileItemFactory fileItemFactory) {
-        super(fileItemFactory);
+        setFileItemFactory(fileItemFactory);
     }
 
     /**
diff --git a/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/package-info.java b/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/package-info.java
index b6471db..ce9085c 100644
--- a/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/package-info.java
+++ b/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/package-info.java
@@ -17,9 +17,9 @@
 
 /**
  * <p>
- * An implementation of {@link org.apache.commons.fileupload2.FileUpload} for use in servlets conforming to JSR 53. This implementation requires only access to
- * the servlet's current {@code HttpServletRequest} instance, and a suitable {@link org.apache.commons.fileupload2.FileItemFactory} implementation, such as
- * {@link org.apache.commons.fileupload2.disk.DiskFileItemFactory}.
+ * An implementation of {@link org.apache.commons.fileupload2.AbstractFileUpload} for use in servlets conforming to JSR 53. This implementation requires only
+ * access to the servlet's current {@code HttpServletRequest} instance, and a suitable {@link org.apache.commons.fileupload2.FileItemFactory} implementation,
+ * such as {@link org.apache.commons.fileupload2.disk.DiskFileItemFactory}.
  * </p>
  * <p>
  * The following code fragment demonstrates typical usage.
diff --git a/commons-fileupload2-portlet/src/main/java/org/apache/commons/fileupload2/portlet/JavaxPortletFileUpload.java b/commons-fileupload2-portlet/src/main/java/org/apache/commons/fileupload2/portlet/JavaxPortletFileUpload.java
index 7cab2c5..b77471b 100644
--- a/commons-fileupload2-portlet/src/main/java/org/apache/commons/fileupload2/portlet/JavaxPortletFileUpload.java
+++ b/commons-fileupload2-portlet/src/main/java/org/apache/commons/fileupload2/portlet/JavaxPortletFileUpload.java
@@ -26,7 +26,6 @@ import org.apache.commons.fileupload2.AbstractFileUpload;
 import org.apache.commons.fileupload2.FileItem;
 import org.apache.commons.fileupload2.FileItemFactory;
 import org.apache.commons.fileupload2.FileItemInputIterator;
-import org.apache.commons.fileupload2.FileUpload;
 import org.apache.commons.fileupload2.FileUploadException;
 import org.apache.commons.fileupload2.javax.JavaxServletFileUpload;
 
@@ -41,7 +40,7 @@ import org.apache.commons.fileupload2.javax.JavaxServletFileUpload;
  * How the data for individual parts is stored is determined by the factory used to create them; a given part may be in memory, on disk, or somewhere else.
  * </p>
  */
-public class JavaxPortletFileUpload extends FileUpload<ActionRequest> {
+public class JavaxPortletFileUpload extends AbstractFileUpload<ActionRequest> {
 
     /**
      * Tests whether the request contains multipart content.
@@ -57,7 +56,7 @@ public class JavaxPortletFileUpload extends FileUpload<ActionRequest> {
      * Constructs an uninitialized instance of this class. A factory must be configured, using {@code setFileItemFactory()}, before attempting to parse
      * requests.
      *
-     * @see FileUpload#FileUpload(FileItemFactory)
+     * @see AbstractFileUpload#AbstractFileUpload()
      */
     public JavaxPortletFileUpload() {
     }
@@ -65,11 +64,11 @@ public class JavaxPortletFileUpload extends FileUpload<ActionRequest> {
     /**
      * Constructs an instance of this class which uses the supplied factory to create {@code FileItem} instances.
      *
-     * @see FileUpload#FileUpload()
+     * @see AbstractFileUpload#AbstractFileUpload()
      * @param fileItemFactory The factory to use for creating file items.
      */
     public JavaxPortletFileUpload(final FileItemFactory fileItemFactory) {
-        super(fileItemFactory);
+        setFileItemFactory(fileItemFactory);
     }
 
     /**
diff --git a/commons-fileupload2-portlet/src/main/java/org/apache/commons/fileupload2/portlet/package-info.java b/commons-fileupload2-portlet/src/main/java/org/apache/commons/fileupload2/portlet/package-info.java
index 0aeecd0..dd6063e 100644
--- a/commons-fileupload2-portlet/src/main/java/org/apache/commons/fileupload2/portlet/package-info.java
+++ b/commons-fileupload2-portlet/src/main/java/org/apache/commons/fileupload2/portlet/package-info.java
@@ -17,8 +17,8 @@
 
 /**
  * <p>
- * An implementation of {@link org.apache.commons.fileupload2.FileUpload} for use in portlets conforming to JSR 168. This implementation requires only access to
- * the portlet's current {@code ActionRequest} instance, and a suitable {@link org.apache.commons.fileupload2.FileItemFactory} implementation, such as
+ * An implementation of {@link org.apache.commons.fileupload2.AbstractFileUpload} for use in portlets conforming to JSR 168. This implementation requires only
+ * access to the portlet's current {@code ActionRequest} instance, and a suitable {@link org.apache.commons.fileupload2.FileItemFactory} implementation, such as
  * {@link org.apache.commons.fileupload2.disk.DiskFileItemFactory}.
  * </p>
  * <p>