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/06 21:48:31 UTC

[commons-fileupload] branch master updated: Use a builder for DiskFileItemFactory

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 be459a0  Use a builder for DiskFileItemFactory
be459a0 is described below

commit be459a0252c00357951186d88aca541ca9b4af2c
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 6 17:48:27 2023 -0400

    Use a builder for DiskFileItemFactory
    
    Better method names
---
 .../commons/fileupload2/AbstractFileUpload.java    |   2 +-
 .../commons/fileupload2/FileItemFactory.java       |   2 +-
 .../commons/fileupload2/FileItemIteratorImpl.java  |   2 +-
 .../commons/fileupload2/disk/DiskFileItem.java     |  10 +-
 .../fileupload2/disk/DiskFileItemFactory.java      | 116 +++++++++++++++------
 .../commons/fileupload2/AbstractStreamingTest.java |   4 +-
 .../fileupload2/DiskFileItemSerializeTest.java     |   6 +-
 .../jakarta/JakartaServletFileUploadTest.java      |   6 +-
 .../fileupload2/jakarta/JakartaSizesTest.java      |   2 +-
 .../javax/JavaxServletFileUploadTest.java          |   8 +-
 .../commons/fileupload2/javax/JavaxSizesTest.java  |   2 +-
 .../fileupload2/portlet/PortletFileUploadTest.java |   2 +-
 12 files changed, 105 insertions(+), 57 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 a3a06d6..6d23ea2 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
@@ -420,7 +420,7 @@ public abstract class AbstractFileUpload {
                 final FileItemStream item = iter.next();
                 // Don't use getName() here to prevent an InvalidFileNameException.
                 final String fileName = item.getName();
-                final FileItem fileItem = fileItemFactory.createItem(item.getFieldName(), item.getContentType(), item.isFormField(), fileName);
+                final FileItem fileItem = fileItemFactory.createFileItem(item.getFieldName(), item.getContentType(), item.isFormField(), fileName);
                 items.add(fileItem);
                 try (InputStream inputStream = item.openStream();
                         OutputStream outputStream = fileItem.getOutputStream()) {
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemFactory.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemFactory.java
index a94a0aa..9a970ae 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemFactory.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemFactory.java
@@ -33,6 +33,6 @@ public interface FileItemFactory {
      * @param fileName    The name of the uploaded file, if any, as supplied by the browser or other client.
      * @return The newly created file item.
      */
-    FileItem createItem(String fieldName, String contentType, boolean isFormField, String fileName);
+    FileItem createFileItem(String fieldName, String contentType, boolean isFormField, String fileName);
 
 }
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemIteratorImpl.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemIteratorImpl.java
index c067080..b446832 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemIteratorImpl.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/FileItemIteratorImpl.java
@@ -196,7 +196,7 @@ class FileItemIteratorImpl implements FileItemIterator {
         final List<FileItem> items = new ArrayList<>();
         while (hasNext()) {
             final FileItemStream fis = next();
-            items.add(fileUploadBase.getFileItemFactory().createItem(fis.getFieldName(), fis.getContentType(), fis.isFormField(), fis.getName()));
+            items.add(fileUploadBase.getFileItemFactory().createFileItem(fis.getFieldName(), fis.getContentType(), fis.isFormField(), fis.getName()));
         }
         return items;
     }
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItem.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItem.java
index 020ccf9..9208bc7 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItem.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItem.java
@@ -153,7 +153,7 @@ public class DiskFileItem implements FileItem {
     /**
      * The threshold above which uploads will be stored on disk.
      */
-    private final int sizeThreshold;
+    private final int threshold;
 
     /**
      * The directory in which uploaded files will be stored, if stored on disk.
@@ -192,16 +192,16 @@ public class DiskFileItem implements FileItem {
      * @param contentType   The content type passed by the browser or {@code null} 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 file name in the user's file system, or {@code null} 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 threshold     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.
      */
-    public DiskFileItem(final String fieldName, final String contentType, final boolean isFormField, final String fileName, final int sizeThreshold,
+    public DiskFileItem(final String fieldName, final String contentType, final boolean isFormField, final String fileName, final int threshold,
             final Path repository) {
         this.fieldName = fieldName;
         this.contentType = contentType;
         this.isFormField = isFormField;
         this.fileName = fileName;
-        this.sizeThreshold = sizeThreshold;
+        this.threshold = threshold;
         this.repository = repository != null ? repository : PathUtils.getTempDirectory();
     }
 
@@ -334,7 +334,7 @@ public class DiskFileItem implements FileItem {
     @Override
     public OutputStream getOutputStream() {
         if (dfos == null) {
-            dfos = DeferredFileOutputStream.builder().setThreshold(sizeThreshold).setOutputFile(getTempFile().toFile()).get();
+            dfos = DeferredFileOutputStream.builder().setThreshold(threshold).setOutputFile(getTempFile().toFile()).get();
         }
         return dfos;
     }
diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItemFactory.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItemFactory.java
index bf881f0..4f6c544 100644
--- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItemFactory.java
+++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItemFactory.java
@@ -22,11 +22,14 @@ import java.nio.file.Path;
 import org.apache.commons.fileupload2.FileItem;
 import org.apache.commons.fileupload2.FileItemFactory;
 import org.apache.commons.io.FileCleaningTracker;
+import org.apache.commons.io.build.AbstractOrigin;
+import org.apache.commons.io.build.AbstractStreamBuilder;
+import org.apache.commons.io.file.PathUtils;
 
 /**
- * The default {@link org.apache.commons.fileupload2.FileItemFactory} implementation.
+ * The default {@link FileItemFactory} implementation.
  * <p>
- * This implementation creates {@link org.apache.commons.fileupload2.FileItem} instances which keep their content either in memory, for smaller items, or in a
+ * This implementation creates {@link FileItem} instances which keep their content either in memory, for smaller items, or in a
  * temporary file on disk, for larger items. The size threshold, above which content will be stored on disk, is configurable, as is the directory in which
  * temporary files will be created.
  * </p>
@@ -34,11 +37,11 @@ import org.apache.commons.io.FileCleaningTracker;
  * If not otherwise configured, the default configuration values are as follows:
  * </p>
  * <ul>
- * <li>Size threshold is 10KB.</li>
- * <li>Repository is the system default temp directory, as returned by {@code System.getProperty("java.io.tmpdir")}.</li>
+ * <li>Size threshold is 10 KB.</li>
+ * <li>Repository is the system default temporary directory, as returned by {@code System.getProperty("java.io.tmpdir")}.</li>
  * </ul>
  * <p>
- * <b>NOTE</b>: Files are created in the system default temp directory with predictable names. This means that a local attacker with write access to that
+ * <b>NOTE</b>: Files are created in the system default temporary directory with predictable names. This means that a local attacker with write access to that
  * directory can perform a TOUTOC attack to replace any uploaded file with a file of the attackers choice. The implications of this will depend on how the
  * uploaded file is used but could be significant. When using this implementation in an environment with local, untrusted users, {@link #setRepository(Path)}
  * MUST be used to configure a repository location that is not publicly writable. In a Servlet container the location identified by the ServletContext attribute
@@ -51,13 +54,68 @@ import org.apache.commons.io.FileCleaningTracker;
  * the so-called reaper thread, which is started and stopped automatically by the {@link FileCleaningTracker} when there are files to be tracked. It might make
  * sense to terminate that thread, for example, if your web application ends. See the section on "Resource cleanup" in the users guide of Commons FileUpload.
  * </p>
+ * @see Builder
+ * @see Builder#get()
  */
-public class DiskFileItemFactory implements FileItemFactory {
+public final class DiskFileItemFactory implements FileItemFactory {
 
     /**
-     * The default threshold above which uploads will be stored on disk.
+     * Builds a new {@link DiskFileItemFactory} instance.
+     * <p>
+     * For example:
+     * </p>
+     *
+     * <pre>{@code
+     * DiskFileItemFactory factory = DiskFileItemFactory.builder()
+     *    .setPath(path)
+     *    .setBufferSize(DEFAULT_THRESHOLD)
+     *    .get();
+     * }
+     * </pre>
+     *
+     * @since 2.12.0
      */
-    public static final int DEFAULT_SIZE_THRESHOLD = 10_240;
+    public static class Builder extends AbstractStreamBuilder<DiskFileItemFactory, Builder> {
+
+        public Builder() {
+            setBufferSize(DEFAULT_THRESHOLD);
+            setPath(PathUtils.getTempDirectory());
+        }
+
+        /**
+         * Constructs a new instance.
+         * <p>
+         * This builder use the aspects Path and buffer size.
+         * </p>
+         * <p>
+         * You must provide an origin that can be converted to a Reader by this builder, otherwise, this call will throw an
+         * {@link UnsupportedOperationException}.
+         * </p>
+         *
+         * @return a new instance.
+         * @throws UnsupportedOperationException if the origin cannot provide a Path.
+         * @see AbstractOrigin#getReader(Charset)
+         */
+        @Override
+        public DiskFileItemFactory get() {
+            return new DiskFileItemFactory(getOrigin().getPath(), getBufferSize());
+        }
+
+    }
+
+    /**
+     * The default threshold in bytes above which uploads will be stored on disk.
+     */
+    public static final int DEFAULT_THRESHOLD = 10_240;
+
+    /**
+     * Constructs a new {@link Builder}.
+     *
+     * @return a new {@link Builder}.
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
 
     /**
      * The directory in which uploaded files will be stored, if stored on disk.
@@ -67,7 +125,7 @@ public class DiskFileItemFactory implements FileItemFactory {
     /**
      * The threshold above which uploads will be stored on disk.
      */
-    private int sizeThreshold = DEFAULT_SIZE_THRESHOLD;
+    private int threshold = DEFAULT_THRESHOLD;
 
     /**
      * The instance of {@link FileCleaningTracker}, which is responsible for deleting temporary files.
@@ -82,21 +140,13 @@ public class DiskFileItemFactory implements FileItemFactory {
      */
     private Charset defaultCharset = DiskFileItem.DEFAULT_CHARSET;
 
-    /**
-     * Constructs an unconfigured instance of this class. The resulting factory may be configured by calling the appropriate setter methods.
-     */
-    public DiskFileItemFactory() {
-        this(DEFAULT_SIZE_THRESHOLD, null);
-    }
-
     /**
      * 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 repository The data repository, which is the directory in which files will be created, should the item size exceed the threshold.
+     * @param threshold  The threshold, in bytes, below which items will be retained in memory and above which they will be stored as a file.
      */
-    public DiskFileItemFactory(final int sizeThreshold, final Path repository) {
-        this.sizeThreshold = sizeThreshold;
+    private DiskFileItemFactory(final Path repository, final int threshold) {
+        this.threshold = threshold;
         this.repository = repository;
     }
 
@@ -110,8 +160,8 @@ public class DiskFileItemFactory implements FileItemFactory {
      * @return The newly created file item.
      */
     @Override
-    public FileItem createItem(final String fieldName, final String contentType, final boolean isFormField, final String fileName) {
-        final DiskFileItem result = new DiskFileItem(fieldName, contentType, isFormField, fileName, sizeThreshold, repository);
+    public FileItem createFileItem(final String fieldName, final String contentType, final boolean isFormField, final String fileName) {
+        final DiskFileItem result = new DiskFileItem(fieldName, contentType, isFormField, fileName, threshold, repository);
         result.setDefaultCharset(defaultCharset);
         final FileCleaningTracker tracker = getFileCleaningTracker();
         if (tracker != null) {
@@ -149,13 +199,13 @@ public class DiskFileItemFactory implements FileItemFactory {
     }
 
     /**
-     * Gets the size threshold beyond which files are written directly to disk. The default value is 10240 bytes.
+     * Gets the size threshold beyond which files are written directly to disk. The default value is {@value #DEFAULT_THRESHOLD} bytes.
      *
-     * @return The size threshold, in bytes.
-     * @see #setSizeThreshold(int)
+     * @return The size threshold in bytes.
+     * @see #setThreshold(int)
      */
-    public int getSizeThreshold() {
-        return sizeThreshold;
+    public int getThreshold() {
+        return threshold;
     }
 
     /**
@@ -187,12 +237,12 @@ public class DiskFileItemFactory implements FileItemFactory {
     }
 
     /**
-     * Sets the size threshold beyond which files are written directly to disk.
+     * Sets the size threshold beyond which files are written directly to disk. The default value is {@value #DEFAULT_THRESHOLD} bytes.
      *
-     * @param sizeThreshold The size threshold, in bytes.
-     * @see #getSizeThreshold()
+     * @param threshold The size threshold in bytes.
+     * @see #getThreshold()
      */
-    public void setSizeThreshold(final int sizeThreshold) {
-        this.sizeThreshold = sizeThreshold;
+    public void setThreshold(final int threshold) {
+        this.threshold = threshold;
     }
 }
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 4d95f0b..9ba0ee1 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
@@ -96,7 +96,7 @@ public abstract class AbstractStreamingTest<F extends FileUpload<R>, R, C extend
         final String contentType = "multipart/form-data; boundary=---1234";
 
         final AbstractFileUpload upload = newFileUpload();
-        upload.setFileItemFactory(new DiskFileItemFactory());
+        upload.setFileItemFactory(DiskFileItemFactory.builder().get());
         final R request = newMockHttpServletRequest(inputStream, length, contentType, -1);
 
         return upload.parseRequest(newServletRequestContext(request));
@@ -106,7 +106,7 @@ public abstract class AbstractStreamingTest<F extends FileUpload<R>, R, C extend
         final String contentType = "multipart/form-data; boundary=---1234";
 
         final AbstractFileUpload upload = newFileUpload();
-        upload.setFileItemFactory(new DiskFileItemFactory());
+        upload.setFileItemFactory(DiskFileItemFactory.builder().get());
         final R request = newMockHttpServletRequest(inputStream, length, contentType, -1);
 
         return upload.getItemIterator(newServletRequestContext(request));
diff --git a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/DiskFileItemSerializeTest.java b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/DiskFileItemSerializeTest.java
index f736c02..a2a87d7 100644
--- a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/DiskFileItemSerializeTest.java
+++ b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/DiskFileItemSerializeTest.java
@@ -23,7 +23,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
@@ -33,7 +32,6 @@ import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
 
 import org.apache.commons.fileupload2.disk.DiskFileItemFactory;
-import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.file.PathUtils;
 import org.apache.commons.io.file.SimplePathVisitor;
 import org.apache.commons.lang3.SerializationUtils;
@@ -100,10 +98,10 @@ public class DiskFileItemSerializeTest {
      * Create a FileItem with the specfied content bytes and repository.
      */
     private FileItem createFileItem(final byte[] contentBytes, final Path repository) throws IOException {
-        final FileItemFactory factory = new DiskFileItemFactory(THRESHOLD, repository);
+        final FileItemFactory factory = DiskFileItemFactory.builder().setBufferSize(THRESHOLD).setPath(repository).get();
         final String textFieldName = "textField";
 
-        final FileItem item = factory.createItem(textFieldName, TEXT_CONTENT_TYPE, true, "My File Name");
+        final FileItem item = factory.createFileItem(textFieldName, TEXT_CONTENT_TYPE, true, "My File Name");
         try (OutputStream os = item.getOutputStream()) {
             os.write(contentBytes);
         }
diff --git a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaServletFileUploadTest.java b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaServletFileUploadTest.java
index 9c299a5..9f65a2e 100644
--- a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaServletFileUploadTest.java
+++ b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaServletFileUploadTest.java
@@ -40,7 +40,7 @@ import jakarta.servlet.http.HttpServletRequest;
 public class JakartaServletFileUploadTest extends AbstractFileUploadTest<JakartaServletFileUpload> {
 
     public JakartaServletFileUploadTest() {
-        super(new JakartaServletFileUpload(new DiskFileItemFactory()));
+        super(new JakartaServletFileUpload(DiskFileItemFactory.builder().get()));
     }
 
     @Test
@@ -58,7 +58,7 @@ public class JakartaServletFileUploadTest extends AbstractFileUploadTest<Jakarta
         final byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
         final HttpServletRequest request = new JakartaMockServletHttpRequest(bytes, Constants.CONTENT_TYPE);
 
-        final DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
+        final DiskFileItemFactory fileItemFactory = DiskFileItemFactory.builder().get();
         fileItemFactory.setDefaultCharset(StandardCharsets.UTF_8);
         final JakartaServletFileUpload upload = new JakartaServletFileUpload(fileItemFactory);
         final List<FileItem> fileItems = upload.parseRequest(request);
@@ -95,7 +95,7 @@ public class JakartaServletFileUploadTest extends AbstractFileUploadTest<Jakarta
         final byte[] bytes = text.getBytes(StandardCharsets.US_ASCII);
         final HttpServletRequest request = new JakartaMockServletHttpRequest(bytes, Constants.CONTENT_TYPE);
 
-        final JakartaServletFileUpload upload = new JakartaServletFileUpload(new DiskFileItemFactory());
+        final JakartaServletFileUpload upload = new JakartaServletFileUpload(DiskFileItemFactory.builder().get());
         final Map<String, List<FileItem>> mappedParameters = upload.parseParameterMap(request);
         assertTrue(mappedParameters.containsKey("file"));
         assertEquals(1, mappedParameters.get("file").size());
diff --git a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java
index 4023e6f..7f04b11 100644
--- a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java
+++ b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaSizesTest.java
@@ -30,7 +30,7 @@ public class JakartaSizesTest extends AbstractSizesTest<JakartaServletFileUpload
 
     @Override
     protected JakartaServletFileUpload newFileUpload() {
-        return new JakartaServletFileUpload(new DiskFileItemFactory());
+        return new JakartaServletFileUpload(DiskFileItemFactory.builder().get());
     }
 
     @Override
diff --git a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxServletFileUploadTest.java b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxServletFileUploadTest.java
index ec98fdf..79b0205 100644
--- a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxServletFileUploadTest.java
+++ b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxServletFileUploadTest.java
@@ -44,7 +44,7 @@ import org.junit.jupiter.api.Test;
 public class JavaxServletFileUploadTest extends AbstractFileUploadTest<JavaxServletFileUpload> {
 
     public JavaxServletFileUploadTest() {
-        super(new JavaxServletFileUpload(new DiskFileItemFactory()));
+        super(new JavaxServletFileUpload(DiskFileItemFactory.builder().get()));
     }
 
     @Test
@@ -62,7 +62,7 @@ public class JavaxServletFileUploadTest extends AbstractFileUploadTest<JavaxServ
         final byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
         final HttpServletRequest request = new JavaxMockHttpServletRequest(bytes, Constants.CONTENT_TYPE);
 
-        final DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
+        final DiskFileItemFactory fileItemFactory = DiskFileItemFactory.builder().get();
         fileItemFactory.setDefaultCharset(StandardCharsets.UTF_8);
         final JavaxServletFileUpload upload = new JavaxServletFileUpload(fileItemFactory);
         final List<FileItem> fileItems = upload.parseRequest(request);
@@ -99,7 +99,7 @@ public class JavaxServletFileUploadTest extends AbstractFileUploadTest<JavaxServ
         final byte[] bytes = text.getBytes(StandardCharsets.US_ASCII);
         final HttpServletRequest request = new JavaxMockHttpServletRequest(bytes, Constants.CONTENT_TYPE);
 
-        final JavaxServletFileUpload upload = new JavaxServletFileUpload(new DiskFileItemFactory());
+        final JavaxServletFileUpload upload = new JavaxServletFileUpload(DiskFileItemFactory.builder().get());
         final Map<String, List<FileItem>> mappedParameters = upload.parseParameterMap(request);
         assertTrue(mappedParameters.containsKey("file"));
         assertEquals(1, mappedParameters.get("file").size());
@@ -139,7 +139,7 @@ public class JavaxServletFileUploadTest extends AbstractFileUploadTest<JavaxServ
         }
         baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII));
 
-        final List<FileItem> fileItems = parseUpload(new JavaxServletFileUpload(new DiskFileItemFactory()), baos.toByteArray());
+        final List<FileItem> fileItems = parseUpload(new JavaxServletFileUpload(DiskFileItemFactory.builder().get()), baos.toByteArray());
         final Iterator<FileItem> fileIter = fileItems.iterator();
         add = 16;
         num = 0;
diff --git a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxSizesTest.java b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxSizesTest.java
index d7998e7..00caa9b 100644
--- a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxSizesTest.java
+++ b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxSizesTest.java
@@ -30,7 +30,7 @@ public class JavaxSizesTest extends AbstractSizesTest<JavaxServletFileUpload, Ht
 
     @Override
     protected JavaxServletFileUpload newFileUpload() {
-        return new JavaxServletFileUpload(new DiskFileItemFactory());
+        return new JavaxServletFileUpload(DiskFileItemFactory.builder().get());
     }
 
     @Override
diff --git a/commons-fileupload2-portlet/src/test/java/org/apache/commons/fileupload2/portlet/PortletFileUploadTest.java b/commons-fileupload2-portlet/src/test/java/org/apache/commons/fileupload2/portlet/PortletFileUploadTest.java
index 483dde8..8e69355 100644
--- a/commons-fileupload2-portlet/src/test/java/org/apache/commons/fileupload2/portlet/PortletFileUploadTest.java
+++ b/commons-fileupload2-portlet/src/test/java/org/apache/commons/fileupload2/portlet/PortletFileUploadTest.java
@@ -43,7 +43,7 @@ import org.junit.jupiter.api.Test;
 public class PortletFileUploadTest extends AbstractFileUploadTest<JavaxPortletFileUpload> {
 
     public PortletFileUploadTest() {
-        super(new JavaxPortletFileUpload(new DiskFileItemFactory()));
+        super(new JavaxPortletFileUpload(DiskFileItemFactory.builder().get()));
     }
 
     @Test