You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by so...@apache.org on 2023/06/14 11:04:10 UTC

[wicket] branch commons-fileupload2-back created (now 9eb9bd1b71)

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

solomax pushed a change to branch commons-fileupload2-back
in repository https://gitbox.apache.org/repos/asf/wicket.git


      at 9eb9bd1b71 Initial attempt to add commons-fileupload2 back

This branch includes the following new commits:

     new 9eb9bd1b71 Initial attempt to add commons-fileupload2 back

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[wicket] 01/01: Initial attempt to add commons-fileupload2 back

Posted by so...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch commons-fileupload2-back
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 9eb9bd1b716a74e1270b40be2c82055b34a5cc1c
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Jun 14 18:03:50 2023 +0700

    Initial attempt to add commons-fileupload2 back
---
 pom.xml                                            |  10 +-
 wicket-commons-fileupload/CODE_OF_CONDUCT.md       |  17 -
 wicket-commons-fileupload/CONTRIBUTING.md          |  97 ---
 wicket-commons-fileupload/LICENSE.txt              | 202 -----
 wicket-commons-fileupload/NOTICE.txt               |   5 -
 wicket-commons-fileupload/README.md                | 105 ---
 wicket-commons-fileupload/RELEASE-NOTES.txt        | 115 ---
 wicket-commons-fileupload/SECURITY.md              |  17 -
 wicket-commons-fileupload/pom.xml                  | 555 -------------
 .../spotbugs-exclude-filter.xml                    |  64 --
 wicket-commons-fileupload/src/changes/changes.xml  | 702 ----------------
 .../src/changes/release-notes.vm                   | 113 ---
 .../src/checkstyle/checkstyle-suppressions.xml     |  23 -
 .../src/checkstyle/fileupload_basic.xml            |  25 -
 .../src/checkstyle/fileupload_checks.xml           | 233 ------
 .../src/checkstyle/license-header.txt              |  16 -
 .../src/main/assembly/bin.xml                      |  48 --
 .../src/main/assembly/src.xml                      |  43 -
 .../src/main/java/module-info.java                 |  28 -
 .../commons/fileupload2/AbstractFileUpload.java    | 556 -------------
 .../fileupload2/AbstractRequestContext.java        |  72 --
 .../wicket/commons/fileupload2/FileItem.java       | 174 ----
 .../commons/fileupload2/FileItemFactory.java       |  39 -
 .../commons/fileupload2/FileItemHeaders.java       |  60 --
 .../fileupload2/FileItemHeadersSupport.java        |  46 --
 .../commons/fileupload2/FileItemIterator.java      | 107 ---
 .../wicket/commons/fileupload2/FileItemStream.java | 106 ---
 .../wicket/commons/fileupload2/FileUpload.java     |  83 --
 .../commons/fileupload2/FileUploadException.java   |  57 --
 .../fileupload2/InvalidFileNameException.java      |  62 --
 .../commons/fileupload2/MultipartStream.java       | 910 ---------------------
 .../commons/fileupload2/ParameterParser.java       | 333 --------
 .../commons/fileupload2/ProgressListener.java      |  33 -
 .../wicket/commons/fileupload2/RequestContext.java |  62 --
 .../commons/fileupload2/disk/DiskFileItem.java     | 619 --------------
 .../fileupload2/disk/DiskFileItemFactory.java      | 240 ------
 .../commons/fileupload2/disk/package-info.java     |  52 --
 .../fileupload2/impl/FileItemIteratorImpl.java     | 332 --------
 .../fileupload2/impl/FileItemStreamImpl.java       | 206 -----
 .../commons/fileupload2/impl/package-info.java     |  21 -
 .../fileupload2/jaksrvlt/JakSrvltFileCleaner.java  |  88 --
 .../fileupload2/jaksrvlt/JakSrvltFileUpload.java   | 138 ----
 .../jaksrvlt/JakSrvltRequestContext.java           |  81 --
 .../commons/fileupload2/jaksrvlt/package-info.java |  41 -
 .../wicket/commons/fileupload2/package-info.java   |  83 --
 .../pub/FileUploadByteCountLimitException.java     |  72 --
 .../pub/FileUploadContentTypeException.java        |  62 --
 .../pub/FileUploadFileCountLimitException.java     |  37 -
 .../fileupload2/pub/FileUploadSizeException.java   |  72 --
 .../commons/fileupload2/pub/package-info.java      |  22 -
 .../fileupload2/util/FileItemHeadersImpl.java      |  98 ---
 .../fileupload2/util/LimitedInputStream.java       | 149 ----
 .../commons/fileupload2/util/mime/MimeUtility.java | 278 -------
 .../fileupload2/util/mime/ParseException.java      |  38 -
 .../util/mime/QuotedPrintableDecoder.java          | 112 ---
 .../fileupload2/util/mime/RFC2231Utility.java      | 156 ----
 .../fileupload2/util/mime/package-info.java        |  22 -
 .../commons/fileupload2/util/package-info.java     |  23 -
 wicket-commons-fileupload/src/media/logo.xcf       | Bin 25435 -> 0 bytes
 .../src/site/apt/migration.apt.vm                  | 140 ----
 wicket-commons-fileupload/src/site/fml/faq.fml     | 215 -----
 .../src/site/resources/download_fileupload.cgi     |  21 -
 .../src/site/resources/images/logo.gif             | Bin 4848 -> 0 bytes
 .../src/site/resources/images/logo.png             | Bin 13786 -> 0 bytes
 .../src/site/resources/profile.jacoco              |  17 -
 wicket-commons-fileupload/src/site/site.xml        |  44 -
 .../src/site/xdoc/customizing.xml                  |  33 -
 .../src/site/xdoc/download_fileupload.xml          | 138 ----
 wicket-commons-fileupload/src/site/xdoc/index.xml  | 161 ----
 .../src/site/xdoc/issue-tracking.xml               | 102 ---
 .../src/site/xdoc/mail-lists.xml                   | 202 -----
 .../src/site/xdoc/overview.xml                     |  64 --
 .../src/site/xdoc/security-reports.xml             | 149 ----
 .../src/site/xdoc/streaming.xml                    |  88 --
 wicket-commons-fileupload/src/site/xdoc/using.xml  | 462 -----------
 .../wicket/commons/fileupload2/Constants.java      |  32 -
 .../fileupload2/DiskFileItemSerializeTest.java     | 244 ------
 .../commons/fileupload2/FileItemHeadersTest.java   |  90 --
 .../commons/fileupload2/MultipartStreamTest.java   |  79 --
 .../commons/fileupload2/ParameterParserTest.java   | 155 ----
 .../jaksrvlt/JakSrvltFileUploadTest.java           | 103 ---
 .../jaksrvlt/MockJakSrvltHttpRequest.java          | 671 ---------------
 .../fileupload2/util/mime/MimeUtilityTestCase.java |  71 --
 .../util/mime/QuotedPrintableDecoderTestCase.java  | 123 ---
 .../util/mime/RFC2231UtilityTestCase.java          |  87 --
 wicket-core/src/main/java/module-info.java         |   3 +-
 .../org/apache/wicket/markup/html/form/Form.java   |   8 +-
 .../wicket/markup/html/form/upload/FileUpload.java |   4 +-
 .../markup/html/form/upload/FileUploadField.java   |   2 +-
 .../html/form/upload/MultiFileUploadField.java     |   2 +-
 .../resource/AbstractFileUploadResource.java       |  10 +-
 .../wicket/protocol/http/IMultipartWebRequest.java |   2 +-
 .../protocol/http/mock/MockHttpServletRequest.java |   2 +-
 .../http/servlet/MultipartServletWebRequest.java   |   4 +-
 .../servlet/MultipartServletWebRequestImpl.java    |  45 +-
 .../protocol/http/servlet/ServletPartFileItem.java |  11 +-
 .../protocol/http/servlet/ServletWebRequest.java   |   4 +-
 .../markup/html/form/upload/FileUploadTest.java    |   4 +-
 .../examples/ajax/builtin/FileUploadPage.java      |   2 +-
 .../extensions/ajax/AjaxFileDropBehavior.java      |   4 +-
 wicket-util/pom.xml                                |   7 +-
 wicket-util/src/main/java/module-info.java         |   1 -
 wicket/src/main/filtered-resources/features.xml    |   4 +-
 103 files changed, 60 insertions(+), 11710 deletions(-)

diff --git a/pom.xml b/pom.xml
index 153058bc41..53fab35313 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,7 +98,6 @@
 	<modules>
 		<!-- wicket-eclipse-settings is separate released -->
 		<module>wicket</module>
-		<module>wicket-commons-fileupload</module>
 		<module>wicket-core</module>
 		<module>wicket-util</module>
 		<module>wicket-request</module>
@@ -144,8 +143,8 @@
 		<byte-buddy.version>1.14.2</byte-buddy.version>
 		<cdi-unit.version>4.1.0</cdi-unit.version>
 		<commons-collections4.version>4.4</commons-collections4.version>
-		<commons-fileupload.version>2.0-SNAPSHOT</commons-fileupload.version>
-		<commons-io.version>2.11.0</commons-io.version>
+		<commons-fileupload.version>2.0.0-SNAPSHOT</commons-fileupload.version>
+		<commons-io.version>2.13.0</commons-io.version>
 		<commons-lang3.version>3.12.0</commons-lang3.version>
 		<guice.version>7.0.0</guice.version>
 		<el-impl.version>2.2.1-b05</el-impl.version>
@@ -313,10 +312,9 @@
 				<artifactId>commons-collections4</artifactId>
 				<version>${commons-collections4.version}</version>
 			</dependency>
-			<!-- Commented out due to all classes are copied into wicket-commons-fileupload
 			<dependency>
 				<groupId>org.apache.commons</groupId>
-				<artifactId>commons-fileupload2</artifactId>
+				<artifactId>commons-fileupload2-jakarta</artifactId>
 				<version>${commons-fileupload.version}</version>
 				<exclusions>
 					<exclusion>
@@ -324,7 +322,7 @@
 						<artifactId>commons-io</artifactId>
 					</exclusion>
 				</exclusions>
-			</dependency-->
+			</dependency>
 			<dependency>
 				<groupId>org.apache.commons</groupId>
 				<artifactId>commons-lang3</artifactId>
diff --git a/wicket-commons-fileupload/CODE_OF_CONDUCT.md b/wicket-commons-fileupload/CODE_OF_CONDUCT.md
deleted file mode 100644
index 3ed501501d..0000000000
--- a/wicket-commons-fileupload/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,17 +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.
--->
-The Apache code of conduct page is [https://www.apache.org/foundation/policies/conduct.html](https://www.apache.org/foundation/policies/conduct.html).
diff --git a/wicket-commons-fileupload/CONTRIBUTING.md b/wicket-commons-fileupload/CONTRIBUTING.md
deleted file mode 100644
index cb5d995bdb..0000000000
--- a/wicket-commons-fileupload/CONTRIBUTING.md
+++ /dev/null
@@ -1,97 +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.
--->
-<!---
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: contributing-md-template.md                           |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:contributing-md                    |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.jira.id  (required, alphabetic, upper case)             |
- |                                                                      |
- | 3) Example Properties                                                |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.jira.id>MATH</commons.jira.id>                           |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
---->
-Contributing to Apache Commons FileUpload
-======================
-
-You have found a bug or you have an idea for a cool new feature? Contributing code is a great way to give something back to
-the open source community. Before you dig right into the code there are a few guidelines that we need contributors to
-follow so that we can have a chance of keeping on top of things.
-
-Getting Started
----------------
-
-+ Make sure you have a [JIRA account](https://issues.apache.org/jira/).
-+ Make sure you have a [GitHub account](https://github.com/signup/free).
-+ If you're planning to implement a new feature it makes sense to discuss your changes on the [dev list](https://commons.apache.org/mail-lists.html) first. This way you can make sure you're not wasting your time on something that isn't considered to be in Apache Commons FileUpload's scope.
-+ Submit a ticket for your issue, assuming one does not already exist.
-  + Clearly describe the issue including steps to reproduce when it is a bug.
-  + Make sure you fill in the earliest version that you know has the issue.
-+ Fork the repository on GitHub.
-
-Making Changes
---------------
-
-+ Create a topic branch from where you want to base your work (this is usually the master/trunk branch).
-+ Make commits of logical units.
-+ Respect the original code style:
-  + Only use spaces for indentation.
-  + Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
-  + Check for unnecessary whitespace with git diff --check before committing.
-+ Make sure your commit messages are in the proper format. Your commit message should contain the key of the JIRA issue.
-+ Make sure you have added the necessary tests for your changes.
-+ Run all the tests with `mvn clean verify` to assure nothing else was accidentally broken.
-
-Making Trivial Changes
-----------------------
-
-For changes of a trivial nature to comments and documentation, it is not always necessary to create a new ticket in JIRA.
-In this case, it is appropriate to start the first line of a commit with '(doc)' instead of a ticket number.
-
-Submitting Changes
-------------------
-
-+ Sign the [Contributor License Agreement][cla] if you haven't already.
-+ Push your changes to a topic branch in your fork of the repository.
-+ Submit a pull request to the repository in the apache organization.
-+ Update your JIRA ticket and include a link to the pull request in the ticket.
-
-Additional Resources
---------------------
-
-+ [Contributing patches](https://commons.apache.org/patches.html)
-+ [Apache Commons FileUpload JIRA project page](https://issues.apache.org/jira/browse/FILEUPLOAD)
-+ [Contributor License Agreement][cla]
-+ [General GitHub documentation](https://help.github.com/)
-+ [GitHub pull request documentation](https://help.github.com/send-pull-requests/)
-+ [Apache Commons Twitter Account](https://twitter.com/ApacheCommons)
-+ #apachecommons IRC channel on freenode.org
-
-[cla]:https://www.apache.org/licenses/#clas
diff --git a/wicket-commons-fileupload/LICENSE.txt b/wicket-commons-fileupload/LICENSE.txt
deleted file mode 100644
index d645695673..0000000000
--- a/wicket-commons-fileupload/LICENSE.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
diff --git a/wicket-commons-fileupload/NOTICE.txt b/wicket-commons-fileupload/NOTICE.txt
deleted file mode 100644
index e35f9c223c..0000000000
--- a/wicket-commons-fileupload/NOTICE.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache Commons FileUpload
-Copyright 2002-2023 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/wicket-commons-fileupload/README.md b/wicket-commons-fileupload/README.md
deleted file mode 100644
index 16dce4f744..0000000000
--- a/wicket-commons-fileupload/README.md
+++ /dev/null
@@ -1,105 +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.
--->
-<!---
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: readme-md-template.md                                 |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:readme-md                          |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.componentid (required, alphabetic, lower case)          |
- |    - commons.release.version (required)                              |
- |                                                                      |
- | 3) Example Properties                                                |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.componentid>math</commons.componentid>                   |
- |    <commons.release.version>1.2</commons.release.version>            |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
---->
-Apache Commons FileUpload
-===================
-
-[![GitHub Actions Status](https://github.com/apache/commons-fileupload/workflows/Java%20CI/badge.svg)](https://github.com/apache/commons-fileupload/actions)
-[![Maven Central](https://maven-badges.herokuapp.com/maven-central/commons-fileupload/commons-fileupload/badge.svg?gav=true)](https://maven-badges.herokuapp.com/maven-central/commons-fileupload/commons-fileupload/?gav=true)
-[![CodeQL](https://github.com/apache/commons-fileupload/workflows/CodeQL/badge.svg)](https://github.com/apache/commons-fileupload/actions/workflows/codeql-analysis.yml?query=workflow%3ACodeQL)
-
-The Apache Commons FileUpload component provides a simple yet flexible means of adding support for multipart
-    file upload functionality to servlets and web applications.
-
-Documentation
--------------
-
-More information can be found on the [Apache Commons FileUpload homepage](https://commons.apache.org/proper/commons-fileupload).
-The [Javadoc](https://commons.apache.org/proper/commons-fileupload/javadocs/api-release) can be browsed.
-Questions related to the usage of Apache Commons FileUpload should be posted to the [user mailing list][ml].
-
-Where can I get the latest release?
------------------------------------
-You can download source and binaries from our [download page](https://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi).
-
-Alternatively you can pull it from the central Maven repositories:
-
-```xml
-<dependency>
-  <groupId>commons-fileupload</groupId>
-  <artifactId>commons-fileupload</artifactId>
-  <version>1.4</version>
-</dependency>
-```
-
-Contributing
-------------
-
-We accept Pull Requests via GitHub. The [developer mailing list][ml] is the main channel of communication for contributors.
-There are some guidelines which will make applying PRs easier for us:
-+ No tabs! Please use spaces for indentation.
-+ Respect the code style.
-+ Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
-+ Provide JUnit tests for your changes and make sure your changes don't break any existing tests by running ```mvn```.
-
-If you plan to contribute on a regular basis, please consider filing a [contributor license agreement](https://www.apache.org/licenses/#clas).
-You can learn more about contributing via GitHub in our [contribution guidelines](CONTRIBUTING.md).
-
-License
--------
-This code is under the [Apache Licence v2](https://www.apache.org/licenses/LICENSE-2.0).
-
-See the `NOTICE.txt` file for required notices and attributions.
-
-Donations
----------
-You like Apache Commons FileUpload? Then [donate back to the ASF](https://www.apache.org/foundation/contributing.html) to support the development.
-
-Additional Resources
---------------------
-
-+ [Apache Commons Homepage](https://commons.apache.org/)
-+ [Apache Issue Tracker (JIRA)](https://issues.apache.org/jira/browse/FILEUPLOAD)
-+ [Apache Commons Twitter Account](https://twitter.com/ApacheCommons)
-+ `#apache-commons` IRC channel on `irc.freenode.org`
-
-[ml]:https://commons.apache.org/mail-lists.html
diff --git a/wicket-commons-fileupload/RELEASE-NOTES.txt b/wicket-commons-fileupload/RELEASE-NOTES.txt
deleted file mode 100644
index 9997ddd5e5..0000000000
--- a/wicket-commons-fileupload/RELEASE-NOTES.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-              Apache Commons FileUpload 1.4 RELEASE NOTES
-
-The Apache Commons FileUpload team is pleased to announce the release of Apache Commons FileUpload 1.4.
-
-The Apache Commons FileUpload component provides a simple yet flexible means of
-adding support for multipart file upload functionality to servlets and web
-applications. Version 1.3 onwards requires Java 6 or later.
-
-No client code changes are required to migrate from version 1.3.0 to 1.3.1.
-
-
-1.4 Release
-
-Changes in version 1.4 include:
-
-New features:
-o                  Site: added security report
-
-Fixed Bugs:
-o FILEUPLOAD-252:  DiskFileItem#write() could lose original IO exception
-o FILEUPLOAD-258:  DiskFileItem#getStoreLocation() wrongly returned a File object for items stored in memory
-o FILEUPLOAD-242:  FileUploadBase - should not silently catch and ignore all Throwables
-o FILEUPLOAD-257:  Fix Javadoc 1.8.0 errors
-o FILEUPLOAD-234:  Fix section "Resource cleanup" of the user guide
-o FILEUPLOAD-237:  Fix streaming example: use FileItem.getInputStream() instead of openStream()
-o FILEUPLOAD-248:  DiskFileItem might suppress critical IOExceptions on rename - use FileUtil.move instead
-o FILEUPLOAD-251:  DiskFileItem#getTempFile() is broken
-o FILEUPLOAD-250:  FileUploadBase - potential resource leak - InputStream not closed on exception
-o FILEUPLOAD-244:  DiskFileItem.readObject fails to close FileInputStream
-o FILEUPLOAD-245:  DiskFileItem.get() may not fully read the data
-
-Changes:
-o FILEUPLOAD-292:  Don't create un-needed resources in FileUploadBase.java
-o FILEUPLOAD-282:  Upversion complier.source, compiler.target to 1.6
-o FILEUPLOAD-246:  FileUpload should use IOUtils.closeQuietly where relevant
-o FILEUPLOAD-243:  Make some MultipartStream private fields final Thanks to Ville Skytt�.
-
-
-For complete information on Apache Commons FileUpload, including instructions on how to submit bug reports,
-patches, or suggestions for improvement, see the Apache Commons FileUpload website:
-
-https://commons.apache.org/proper/commons-fileupload/
-
-------------------------------------------------------------------------------
-
-              Apache Commons FileUpload 1.3.3 RELEASE NOTES
-
-The Apache Commons FileUpload team is pleased to announce the release of Apache Commons FileUpload 1.3.3.
-
-The Apache Commons FileUpload component provides a simple yet flexible means of
-adding support for multipart file upload functionality to servlets and web
-applications. Version 1.3 onwards requires Java 5 or later.
-
-No client code changes are required to migrate from version 1.3.0, 1.3.1, or 1.3.2, to 1.3.3
-
-Changes in version 1.3.3 include:
-
-o FILEUPLOAD-279:  DiskFileItem can no longer be deserialized, unless a particular system property is set.
-
-
-For complete information on Apache Commons FileUpload, including instructions on how to submit bug reports,
-patches, or suggestions for improvement, see the Apache Commons FileUpload website:
-
-https://commons.apache.org/proper/commons-fileupload/
-
-------------------------------------------------------------------------------
-
-No client code changes are required to migrate from version 1.3.1 to 1.3.2.
-
-Changes in version 1.3.2 include:
-
-o FILEUPLOAD-272:  Performance Improvement in MultipartStream. Prevents a DoS (CVE-2016-3092)
-
-
-For complete information on Apache Commons FileUpload, including instructions on how to submit bug reports,
-patches, or suggestions for improvement, see the Apache Commons FileUpload website:
-
-https://commons.apache.org/proper/commons-fileupload/
-
-------------------------------------------------------------------------------
-
-              Apache Commons FileUpload 1.3.1 RELEASE NOTES
-
-The Apache Commons FileUpload team is pleased to announce the release of Apache Commons FileUpload 1.3.1.
-
-The Apache Commons FileUpload component provides a simple yet flexible means of
-adding support for multipart file upload functionality to servlets and web
-applications. Version 1.3 onwards requires Java 5 or later.
-
-No client code changes are required to migrate from version 1.3.0 to 1.3.1.
-
-
-This is a security and maintenance release that includes an important security
-fix as well as a small number of bugfixes.
-
-Changes in version 1.3.1 include:
-
-
-Fixed Bugs:
-o                  SECURITY - CVE-2014-0050. Specially crafted input can trigger a DoS if the
-                   buffer used by the MultipartStream is not big enough. When constructing
-                   MultipartStream enforce the requirements for buffer size by throwing an
-                   IllegalArgumentException if the requested buffer size is too small. This
-                   prevents the DoS.
-o                  When deserializing DiskFileItems ensure that the repository location, if
-                   any, is a valid one. Thanks to Arun Babu Neelicattu.
-o                  Correct example in usage documentation so it compiles.
-
-
-
-For complete information on Apache Commons FileUpload, including instructions on how to submit bug reports,
-patches, or suggestions for improvement, see the Apache Commons FileUpload website:
-
-https://commons.apache.org/proper/commons-fileupload/
-
diff --git a/wicket-commons-fileupload/SECURITY.md b/wicket-commons-fileupload/SECURITY.md
deleted file mode 100644
index 51943ba7b4..0000000000
--- a/wicket-commons-fileupload/SECURITY.md
+++ /dev/null
@@ -1,17 +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.
--->
-The Apache Commons security page is [https://commons.apache.org/security.html](https://commons.apache.org/security.html).
diff --git a/wicket-commons-fileupload/pom.xml b/wicket-commons-fileupload/pom.xml
deleted file mode 100644
index 0c517943d9..0000000000
--- a/wicket-commons-fileupload/pom.xml
+++ /dev/null
@@ -1,555 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.wicket</groupId>
-		<artifactId>wicket-parent</artifactId>
-		<version>10.0.0-M1</version>
-		<relativePath>../pom.xml</relativePath>
-	</parent>
-
-  <artifactId>wicket-commons-fileupload</artifactId>
-
-  <name>Wicket Commons FileUpload</name>
-  <description>
-    The Apache Commons FileUpload component provides a simple yet flexible means of adding support for multipart
-    file upload functionality to servlets and web applications.
-  </description>
-  <url>https://commons.apache.org/proper/commons-fileupload/</url>
-  <inceptionYear>2002</inceptionYear>
-
-  <developers>
-    <developer>
-      <name>Martin Cooper</name>
-      <id>martinc</id>
-      <email>martinc@apache.org</email>
-      <organization>Yahoo!</organization>
-    </developer>
-    <developer>
-      <name>dIon Gillard</name>
-      <id>dion</id>
-      <email>dion@apache.org</email>
-      <organization>Multitask Consulting</organization>
-    </developer>
-    <developer>
-      <name>John McNally</name>
-      <id>jmcnally</id>
-      <email>jmcnally@collab.net</email>
-      <organization>CollabNet</organization>
-    </developer>
-    <developer>
-      <name>Daniel Rall</name>
-      <id>dlr</id>
-      <email>dlr@finemaltcoding.com</email>
-      <organization>CollabNet</organization>
-    </developer>
-    <developer>
-      <name>Jason van Zyl</name>
-      <id>jvanzyl</id>
-      <email>jason@zenplex.com</email>
-      <organization>Zenplex</organization>
-    </developer>
-    <developer>
-      <name>Robert Burrell Donkin</name>
-      <id>rdonkin</id>
-      <email>rdonkin@apache.org</email>
-      <organization />
-    </developer>
-    <developer>
-      <name>Sean C. Sullivan</name>
-      <id>sullis</id>
-      <email>sean |at| seansullivan |dot| com</email>
-      <organization />
-    </developer>
-    <developer>
-      <name>Jochen Wiedmann</name>
-      <id>jochen</id>
-      <email>jochen.wiedmann@gmail.com</email>
-      <organization />
-    </developer>
-    <developer>
-      <name>Simone Tripodi</name>
-      <id>simonetripodi</id>
-      <email>simonetripodi@apache.org</email>
-      <organization>Adobe</organization>
-    </developer>
-    <developer>
-      <id>ggregory</id>
-      <name>Gary Gregory</name>
-      <email>ggregory at apache.org</email>
-      <url>https://www.garygregory.com</url>
-      <organization>The Apache Software Foundation</organization>
-      <organizationUrl>https://www.apache.org/</organizationUrl>
-      <roles>
-        <role>PMC Member</role>
-      </roles>
-      <timezone>America/New_York</timezone>
-      <properties>
-        <picUrl>https://people.apache.org/~ggregory/img/garydgregory80.png</picUrl>
-      </properties>
-    </developer>
-    <developer>
-      <name>Rob Tompkins</name>
-      <id>chtompki</id>
-      <email>chtompki@apache.org</email>
-    </developer>
-  </developers>
-
-  <contributors>
-    <contributor>
-      <name>Aaron Freeman</name>
-      <email>aaron@sendthisfile.com</email>
-    </contributor>
-    <contributor>
-      <name>Daniel Fabian</name>
-      <email>dfabian@google.com</email>
-    </contributor>
-    <contributor>
-      <name>Jörg Heinicke</name>
-      <email>joerg.heinicke@gmx.de</email>
-    </contributor>
-    <contributor>
-      <name>Stepan Koltsov</name>
-      <email>yozh@mx1.ru</email>
-    </contributor>
-    <contributor>
-      <name>Michael Macaluso</name>
-      <email>michael.public@wavecorp.com</email>
-    </contributor>
-    <contributor>
-      <name>Amichai Rothman</name>
-      <email>amichai2@amichais.net</email>
-    </contributor>
-    <contributor>
-      <name>Alexander Sova</name>
-      <email>bird@noir.crocodile.org</email>
-    </contributor>
-    <contributor>
-      <name>Paul Spurr</name>
-      <email>pspurr@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>Thomas Vandahl</name>
-      <email>tv@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Henry Yandell</name>
-      <email>bayard@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Jan Novotný</name>
-      <email>novotnaci@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>frank</name>
-      <email>mailsurfie@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>maxxedev</name>
-      <email>maxxedev@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>Rafal Krzewski</name>
-      <email>Rafal.Krzewski@e-point.pl</email>
-    </contributor>
-    <contributor>
-      <name>Sean Legassick</name>
-      <email>sean@informage.net</email>
-    </contributor>
-    <contributor>
-      <name>Oleg Kalnichevski</name>
-      <email>oleg@ural.ru</email>
-    </contributor>
-    <contributor>
-      <name>David Sean Taylor</name>
-      <email>taylor@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>fangwentong</name>
-      <email>fangwentong2012@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>David Georg Reichelt</name>
-    </contributor>
-    <contributor>
-      <name>Merbin J Anselm</name>
-      <email>merbinjanselm@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>Arturo Bernal</name>
-      <email>arturobernalg@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>Martin Grigorov</name>
-      <email>mgrigorov@apache.org</email>
-    </contributor>
-  </contributors>
-
-  <scm>
-    <connection>scm:git:http://gitbox.apache.org/repos/asf/commons-fileupload.git</connection>
-    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-fileupload.git</developerConnection>
-    <url>https://gitbox.apache.org/repos/asf?p=commons-fileupload.git</url>
-  </scm>
-  <issueManagement>
-    <system>jira</system>
-    <url>https://issues.apache.org/jira/browse/FILEUPLOAD</url>
-  </issueManagement>
-
-  <distributionManagement>
-    <site>
-      <id>apache.website</id>
-      <name>Apache Commons Site</name>
-      <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-fileupload/</url>
-    </site>
-  </distributionManagement>
-
-  <properties>
-    <commons.componentid>fileupload</commons.componentid>
-    <commons.module.name>org.apache.commons.fileupload</commons.module.name>
-    <commons.release.version>2.0</commons.release.version>
-    <commons.release.desc>(requires Java ${maven.compiler.target} or later)</commons.release.desc>
-    <commons.jira.id>FILEUPLOAD</commons.jira.id>
-    <commons.jira.pid>12310476</commons.jira.pid>
-    <commons.site.path>fileupload</commons.site.path>
-    <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-fileupload</commons.scmPubUrl>
-    <commons.scmPubCheckoutDirectory>site-content</commons.scmPubCheckoutDirectory>
-    <commons.osgi.export>!org.apache.commons.fileupload.util.mime,org.apache.commons.*;version=${project.version};-noimport:=true</commons.osgi.export>
-    <commons.osgi.import>!javax.portlet,*</commons.osgi.import>
-    <commons.osgi.dynamicImport>javax.portlet</commons.osgi.dynamicImport>
-    <japicmp.skip>true</japicmp.skip>
-    <moditect-maven-plugin.version>1.0.0.RC2</moditect-maven-plugin.version>
-    <moditect.skip>true</moditect.skip>
-    <enforcer.skip>true</enforcer.skip>
-    <checkstyle.skip>true</checkstyle.skip>
-
-    <!-- Commons Release Plugin -->
-    <commons.bc.version>2.0.0</commons.bc.version>
-    <commons.rc.version>RC1</commons.rc.version>
-    <commons.release.isDistModule>true</commons.release.isDistModule>
-    <commons.distSvnStagingUrl>scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid}</commons.distSvnStagingUrl>
-    <commons.releaseManagerName>Rob Tompkins</commons.releaseManagerName>
-    <commons.releaseManagerKey>B6E73D84EA4FCC47166087253FAAD2CD5ECBB314</commons.releaseManagerKey>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.junit.jupiter</groupId>
-      <artifactId>junit-jupiter</artifactId>
-      <version>${junit.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-    	<groupId>jakarta.servlet</groupId>
-    	<artifactId>jakarta.servlet-api</artifactId>
-    	<scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>3.12.0</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-    <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <version>3.2.1</version>
-        <executions>
-          <execution>
-            <id>validate-main</id>
-            <phase>validate</phase>
-            <configuration>
-              <configLocation>${basedir}/src/checkstyle/fileupload_checks.xml</configLocation>
-              <suppressionsLocation>${basedir}/src/checkstyle/checkstyle-suppressions.xml</suppressionsLocation>
-              <includeTestSourceDirectory>false</includeTestSourceDirectory>
-              <enableRulesSummary>false</enableRulesSummary>
-              <consoleOutput>true</consoleOutput>
-              <failsOnError>true</failsOnError>
-              <linkXRef>false</linkXRef>
-            </configuration>
-            <goals>
-              <goal>checkstyle</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <configuration>
-          <descriptors>
-            <descriptor>${basedir}/src/main/assembly/bin.xml</descriptor>
-            <descriptor>${basedir}/src/main/assembly/src.xml</descriptor>
-          </descriptors>
-          <tarLongFileMode>gnu</tarLongFileMode>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-release-plugin</artifactId>
-        <configuration>
-          <preparationGoals>clean site verify</preparationGoals>
-          <goals>clean site deploy</goals>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <configuration>
-          <excludeDependencies>true</excludeDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.rat</groupId>
-          <artifactId>apache-rat-plugin</artifactId>
-          <configuration>
-            <excludes>
-              <exclude>site-content/**</exclude>
-              <exclude>src/site/resources/download_lang.cgi</exclude>
-              <exclude>src/checkstyle/license-header.txt</exclude>
-            </excludes>
-          </configuration>
-        </plugin><!-- override skip property of parent pom -->
-        <plugin>
-          <groupId>com.github.siom79.japicmp</groupId>
-          <artifactId>japicmp-maven-plugin</artifactId>
-          <configuration>
-            <skip>true</skip>
-          </configuration>
-        </plugin>
-        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-antrun-plugin</artifactId>
-                    <versionRange>[1.8,)</versionRange>
-                    <goals>
-                      <goal>run</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <execute/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>build-helper-maven-plugin</artifactId>
-                    <versionRange>[1.10,)</versionRange>
-                    <goals>
-                      <goal>parse-version</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <execute/>
-                  </action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-checkstyle-plugin</artifactId>
-          <configuration>
-            <configLocation>${basedir}/src/checkstyle/fileupload_checks.xml</configLocation>
-            <suppressionsLocation>${basedir}/src/checkstyle/checkstyle-suppressions.xml</suppressionsLocation>
-            <includeTestSourceDirectory>false</includeTestSourceDirectory>
-            <enableRulesSummary>false</enableRulesSummary>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-    <defaultGoal>clean verify apache-rat:check checkstyle:check javadoc:javadoc spotbugs:check</defaultGoal>
-  </build>
-
-  <reporting>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-changes-plugin</artifactId>
-        <version>${commons.changes.version}</version>
-        <configuration>
-          <issueLinkTemplate>%URL%/../%ISSUE%</issueLinkTemplate>
-        </configuration>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>changes-report</report>
-              <!--  NPE, retry from time to time <report>jira-report</report>  -->
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <version>${checkstyle.plugin.version}</version>
-        <configuration>
-          <configLocation>${basedir}/src/checkstyle/fileupload_checks.xml</configLocation>
-          <suppressionsLocation>${basedir}/src/checkstyle/checkstyle-suppressions.xml</suppressionsLocation>
-          <includeTestSourceDirectory>false</includeTestSourceDirectory>
-          <enableRulesSummary>false</enableRulesSummary>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-pmd-plugin</artifactId>
-        <configuration>
-          <targetJdk>${maven.compiler.target}</targetJdk>
-          <rulesets>
-            <ruleset>${basedir}/src/checkstyle/fileupload_basic.xml</ruleset>
-          </rulesets>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>taglist-maven-plugin</artifactId>
-        <version>3.0.0</version>
-        <configuration>
-          <tagListOptions>
-            <tagClasses>
-              <tagClass>
-                <displayName>Needs Work</displayName>
-                <tags>
-                  <tag>
-                    <matchString>TODO</matchString>
-                    <matchType>exact</matchType>
-                  </tag>
-                  <tag>
-                    <matchString>FIXME</matchString>
-                    <matchType>exact</matchType>
-                  </tag>
-                  <tag>
-                    <matchString>XXX</matchString>
-                    <matchType>exact</matchType>
-                  </tag>
-                </tags>
-              </tagClass>
-              <tagClass>
-                <displayName>Noteable Markers</displayName>
-                <tags>
-                  <tag>
-                    <matchString>NOTE</matchString>
-                    <matchType>exact</matchType>
-                  </tag>
-                  <tag>
-                    <matchString>NOPMD</matchString>
-                    <matchType>exact</matchType>
-                  </tag>
-                  <tag>
-                    <matchString>NOSONAR</matchString>
-                    <matchType>exact</matchType>
-                  </tag>
-                </tags>
-              </tagClass>
-            </tagClasses>
-          </tagListOptions>
-        </configuration>
-      </plugin>
-    </plugins>
-  </reporting>
-
-  <profiles>
-    <profile>
-      <id>setup-checkout</id>
-      <activation>
-        <file>
-          <missing>site-content</missing>
-        </file>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-antrun-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>prepare-checkout</id>
-                <phase>pre-site</phase>
-                <goals>
-                  <goal>run</goal>
-                </goals>
-                <configuration>
-                  <target>
-                    <exec executable="svn">
-                      <arg line="checkout --depth immediates ${commons.scmPubUrl} ${commons.scmPubCheckoutDirectory}"/>
-                    </exec>
-
-                    <exec executable="svn">
-                      <arg line="update --set-depth exclude ${commons.scmPubCheckoutDirectory}/javadocs"/>
-                    </exec>
-
-                    <pathconvert pathsep=" " property="dirs">
-                      <dirset dir="${commons.scmPubCheckoutDirectory}" includes="*"/>
-                    </pathconvert>
-                    <exec executable="svn">
-                      <arg line="update --set-depth infinity ${dirs}"/>
-                    </exec>
-                  </target>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>com.github.spotbugs</groupId>
-            <artifactId>spotbugs-maven-plugin</artifactId>
-            <version>4.7.3.3</version>
-            <configuration>
-              <excludeFilterFile>${basedir}/spotbugs-exclude-filter.xml</excludeFilterFile>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>java9</id>
-      <activation>
-        <jdk>9</jdk>
-      </activation>
-      <properties>
-        <!-- coverall version 4.3.0 does not work with java 9, see https://github.com/trautonen/coveralls-maven-plugin/issues/112 -->
-        <coveralls.skip>true</coveralls.skip>
-      </properties>
-    </profile>
-    <profile>
-      <id>release</id>
-      <properties>
-        <moditect.skip>false</moditect.skip>
-        <maven.compiler.release>8</maven.compiler.release>
-      </properties>
-    </profile>
-  </profiles>
-</project>
diff --git a/wicket-commons-fileupload/spotbugs-exclude-filter.xml b/wicket-commons-fileupload/spotbugs-exclude-filter.xml
deleted file mode 100644
index 9c8cf6a2dc..0000000000
--- a/wicket-commons-fileupload/spotbugs-exclude-filter.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.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.
--->
-
-<!--
-  This file contains some false positive bugs detected by spotbugs. Their
-  false positive nature has been analyzed individually and they have been
-  put here to instruct findbugs it must ignore them.
--->
-<FindBugsFilter
-    xmlns="https://github.com/spotbugs/filter/3.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="https://github.com/spotbugs/filter/3.0.0 https://raw.githubusercontent.com/spotbugs/spotbugs/3.1.0/spotbugs/etc/findbugsfilter.xsd">
-
-    <!-- Reason: Initial commit. Need to refine -->
-    <Match>
-        <Class name="org.apache.wicket.commons.fileupload2.MultipartStream" />
-        <Method name="readHeaders" />
-        <Bug pattern="DM_DEFAULT_ENCODING" />
-    </Match>
-    <Match>
-        <Class name="org.apache.wicket.commons.fileupload2.MultipartStream" />
-        <Bug pattern="MS_PKGPROTECT" />
-    </Match>
-    <Match>
-        <Class name="org.apache.wicket.commons.fileupload2.disk.DiskFileItem" />
-        <Bug pattern="DM_DEFAULT_ENCODING" />
-    </Match>
-    <Match>
-        <Class name="org.apache.wicket.commons.fileupload2.disk.DiskFileItem" />
-        <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
-    </Match>
-    <Match>
-        <Class name="org.apache.wicket.commons.fileupload2.disk.DiskFileItem" />
-        <Method name="getString" />
-        <Bug pattern="DLS_DEAD_LOCAL_STORE" />
-    </Match>
-    <Match>
-        <Class name="org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload" />
-        <Bug pattern="NM_WRONG_PACKAGE" />
-    </Match>
-    <Match>
-        <Class name="org.apache.wicket.commons.fileupload2.util.Streams" />
-        <Method name="asString" />
-        <Bug pattern="DM_DEFAULT_ENCODING" />
-    </Match>
-    <Match>
-        <Bug pattern="EI_EXPOSE_REP,EI_EXPOSE_REP2" />
-    </Match>
-</FindBugsFilter>
diff --git a/wicket-commons-fileupload/src/changes/changes.xml b/wicket-commons-fileupload/src/changes/changes.xml
deleted file mode 100644
index 76fd66babb..0000000000
--- a/wicket-commons-fileupload/src/changes/changes.xml
+++ /dev/null
@@ -1,702 +0,0 @@
-<?xml version="1.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.
--->
-
-<!--
-This file is used by the maven-changes-plugin to generate the release notes.
-Useful ways of finding items to add to this file are:
-
-1.  Add items when you fix a bug or add a feature (this makes the 
-release process easy :-).
-
-2.  Do a Jira search for tickets closed since the previous release.
-
-3.  Use the report generated by the maven-changelog-plugin to see all
-CVS commits.  Set the project.properties' maven.changelog.range 
-property to the number of days since the last release.
-
-
-The <action> type attribute can be add,update,fix,remove.
--->
-
-<document xmlns="http://maven.apache.org/changes/1.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/plugins/maven-changes-plugin/xsd/changes-1.0.0.xsd">
-
-  <properties>
-    <title>Apache Commons FileUpload Release Notes</title>
-    <author email="dev@commons.apache.org">Apache Commons Developers</author>
-  </properties>
-
-  <body>
-    <release version="2.0" date="TBD" description="2.0 Release">
-      <action                        dev="jochen" type="fix">Changing Maven coordinates, and package name, due to binary incompatible changes.</action>
-      <action issue="FILEUPLOAD-293" dev="jochen" type="fix">DiskFileItem.write(File) had been changed to use FileUtils.moveFile internally, preventing an existing file as the target.</action>
-      <action issue="FILEUPLOAD-296" dev="jochen" type="fix" due-to="David Georg Reochelt">Performance gains by reusing an internal buffer.</action>
-      <action issue="FILEUPLOAD-274" dev="jochen" type="fix" due-to="Merbin J Anselm" due-to-email="merbinjanselm@gmail.com">RFC 5987 compliance</action>
-      <action                        dev="ggregory" type="fix" due-to="Emmanuel Lécharny">Slight optim: resuse the index position instead of recomputing it #49.</action>
-      <action issue="FILEUPLOAD-340" dev="mgrigorov" type="fix">Make commons-fileupload2 a JPMS module by adding module-info.class.</action>
-      <action issue="FILEUPLOAD-341" dev="jochen" type="fix" due-to="Martin Grigorov">Move Exception classes out of the impl package.</action>
-      <action                        dev="ggregory" type="fix" due-to="Gary Gregory">Rework exceptions to use propagated exception causes (introduced in Java 1.4).</action>
-      <action                        dev="ggregory" type="fix" due-to="Gary Gregory">All custom exception extend FileUploadException.</action>
-      <action                        dev="ggregory" type="fix" due-to="Gary Gregory">All custom exceptions serialVersionUID value is now 2.</action>
-      <!-- ADD -->
-      <action                        dev="ggregory" type="add" due-to="Gary Gregory">Add github/codeql-action from #144.</action>
-      <action                        dev="jochen" type="add">Add the package org.apache.fileupload2.jaksrvlt, for compliance with Jakarta Servlet API 5.0.</action>
-      <action                        dev="jochen" type="add">Making FileUploadException a subclass of IOException. (Mibor API simplification.)</action>
-      <action                        dev="markt" type="add">Add a configurable limit (disabled by default) for the number of files to upload per request.</action>
-      <!-- REMOVE -->
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated constructors in MultipartStream.</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated RequestContext.getContentLength().</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated JakSrvltRequestContext.getContentLength().</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated PortletRequestContext.getContentLength().</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated ServletRequestContext.getContentLength().</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated FileUploadBase.MAX_HEADER_SIZE.</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated FileUploadBase.createItem(Map, boolean).</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated FileUploadBase.getFieldName(Map).</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated FileUploadBase.getFileName(Map).</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated FileUploadBase.getHeader(Map, String).</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Remove deprecated FileUploadBase.parseHeaders(String).</action>
-      <action                        dev="ggregory" type="remove" due-to="Gary Gregory">Replace org.apache.commons.fileupload2.util.mime.Base64Decoder with java.util.Base64.</action>
-      <!-- UPDATE -->
-      <action                        dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">Bump actions/cache from 2.1.6 to 3.0.8 #128, #140.</action>
-      <action                        dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">Bump actions/checkout from 2.3.4 to 3.0.2 #125.</action>
-      <action                        dev="ggregory" type="update" due-to="Gary Gregory">Bump build actions/setup-java from 1.4.3 to 3.8.0 #142, #175, #180, #182.</action>
-      <action                        dev="jochen" type="update">Bump Java compiler level to 1.8.</action>
-      <action                        dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">Bump tests from commons-io:commons-io 2.6 to 2.11.0, #104.</action>
-      <action                        dev="ggregory" type="update" due-to="Dependabot">Bump junit-jupiter from 5.5.2 to 5.9.1 #31, #130, #156, #166.</action>
-      <action                        dev="ggregory" type="update" due-to="Dependabot">Bump maven-pmd-plugin from 3.13.0 to 3.19.0 #48, #162.</action>
-      <action                        dev="ggregory" type="update" due-to="Gary Gregory">Bump commons.japicmp.version from 0.13.0 to 0.16.0.</action>
-      <action                        dev="ggregory" type="update" due-to="Dependabot">Bump spotbugs-maven-plugin from 4.2.3 to 4.7.3.0 #103, #133, #141, #146, #155, #163, #179.</action>
-      <action                        dev="jochen" type="update" due-to="Dependabot">Bump spotbugs from 4.2.3 to 4.7.3, ignore EI_EXPOSE_REP, and EI_EXPOSE_REP2, #152, #161, #174.</action>
-      <action                        dev="ggregory" type="update" due-to="Dependabot">Bump biz.aQute.bndlib from 6.0.0 to 6.4.0 #129, #181.</action>
-      <action                        dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">Bump commons-parent from 52 to 56, #167, #183, #194.</action>
-      <action                        dev="ggregory" type="update" due-to="Dependabot">Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #160.</action>
-    </release>
-    <release version="1.4" date="2018-12-23" description="1.4 Release">
-      <action issue="FILEUPLOAD-292" dev="chtompki" type="update">Don't create un-needed resources in FileUploadBase.java</action>
-      <action issue="FILEUPLOAD-282" dev="chtompki" type="update">Upversion complier.source, compiler.target to 1.6</action>
-      <action issue="FILEUPLOAD-252" dev="tn" type="fix">DiskFileItem#write() could lose original IO exception</action>
-      <action issue="FILEUPLOAD-258" dev="tn" type="fix">DiskFileItem#getStoreLocation() wrongly returned a File object for items stored in memory</action>
-      <action issue="FILEUPLOAD-242" dev="tn" type="fix">FileUploadBase - should not silently catch and ignore all Throwables</action>
-      <action issue="FILEUPLOAD-257" dev="tn" type="fix">Fix Javadoc 1.8.0 errors</action>
-      <action issue="FILEUPLOAD-234" dev="tn" type="fix">Fix section "Resource cleanup" of the user guide</action>
-      <action issue="FILEUPLOAD-237" dev="tn" type="fix">Fix streaming example: use FileItem.getInputStream() instead of openStream()</action>
-      <action issue="FILEUPLOAD-248" dev="ecki" type="fix">DiskFileItem might suppress critical IOExceptions on rename - use FileUtil.move instead</action>
-      <action issue="FILEUPLOAD-251" dev="sebb" type="fix">DiskFileItem#getTempFile() is broken</action>
-      <action issue="FILEUPLOAD-250" dev="sebb" type="fix">FileUploadBase - potential resource leak - InputStream not closed on exception</action>
-      <action issue="FILEUPLOAD-244" dev="sebb" type="fix">DiskFileItem.readObject fails to close FileInputStream</action>
-      <action issue="FILEUPLOAD-246" dev="sebb" type="update">FileUpload should use IOUtils.closeQuietly where relevant</action>
-      <action issue="FILEUPLOAD-245" dev="sebb" type="fix">DiskFileItem.get() may not fully read the data</action>
-      <action issue="FILEUPLOAD-243" dev="sebb" type="update" due-to="Ville Skyttä">Make some MultipartStream private fields final</action>
-      <action                        dev="ecki" type="add">Site: added security report</action>
-      <action                        dev="markt" due-to="Felix Schumacher">Improve performance for large multi-part boundaries</action>
-      <action issue="FILEUPLOAD-286" dev="jochen" due-to="maxxedev" due-to-email="maxxedev@gmail.com">Added the default character set to the DiskFileItem.</action>
-      <action issue="FILEUPLOAD-288" dev="jochen" due-to="fangwentong" due-to-email="fangwentong2012@gmail.com">Avoid using File.exists() on temporary files, if we know that the file has been created.</action>
-      <action dev="jochen" due-to="Pascal Schumacher">Added .travis.yml, to fix build issues on Github.</action>
-    </release>
-
-    <release version="1.3.3" description="Bugfix release for 1.3.3" date="2017-06-13">
-      <action issue="FILEUPLOAD-279" dev="jochen" type="fix">
-        DiskDileItem can actually no longer be deserialized, unless a system property is set to true.
-      </action>
-    </release>
-
-    <release version="1.3.2" description="Bugfix release for 1.3.1" date="2016.05-26">
-      <action issue="FILEUPLOAD-272" dev="jochen" type="update">
-        SECURITY - CVE-2016-3092. Performance Improvement in MultipartStream.
-      </action>
-    </release>
-
-    <release version="1.3.2" description=
-"This is a security and maintenance release that includes an important security 
-fix as well. Compared to 1.3.1, no other changes have been made." date="2014-02-07">
-	  <action dev="jochen" type="fix">
-	    SECURITY - CVE-2016-3092. Specially crafted input can trigger a DoS, if the
-	    size of the MIME boundard is close to the size of the buffer in MultipartStream.
-	    (Similar to CVE-2014-0050.)
-	  </action>
-    </release>
-    <release version="1.3.1" description=
-"This is a security and maintenance release that includes an important security 
-fix as well as a small number of bugfixes." date="2014-02-07">
-      <action dev="markt" type="fix">
-        SECURITY - CVE-2014-0050. Specially crafted input can trigger a DoS if the
-        buffer used by the MultipartStream is not big enough. When constructing
-        MultipartStream enforce the requirements for buffer size by throwing an
-        IllegalArgumentException if the requested buffer size is too small. This
-        prevents the DoS. 
-      </action>
-      <action dev="markt" type="fix" due-to="Arun Babu Neelicattu" due-to-email="abn@redhat.com">
-        When deserializing DiskFileItems ensure that the repository location, if
-        any, is a valid one.
-      </action>
-      <action dev="markt" type="fix">
-        Correct example in usage documentation so it compiles.
-      </action>
-    </release>
-    
-    <release version="1.3" description="maintenance release, JDK1.5 update" date="2013-03-27">
-      <!-- important notes -->
-      <action dev="markt" type="fix">
-        SECURITY - CVE-2013-0248. Update the Javadoc and documentation to make
-        it clear that setting a repository is required for a secure
-        configuration if there are local, untrusted users.
-      </action>
-      <!-- Sub-task -->
-      <action issue="FILEUPLOAD-216" dev="simonetripodi" type="update">
-        Update the project tree dirs according to default Maven conventions
-      </action>
-      <action issue="FILEUPLOAD-217" dev="simonetripodi" type="update">
-        drop JDK1.3 support and update to Java5
-      </action>
-      <action issue="FILEUPLOAD-218" dev="simonetripodi" type="update">
-        Update version in POM
-      </action>
-      <action issue="FILEUPLOAD-219" dev="simonetripodi" type="update">
-        upgrade tests to JUnit 4
-      </action>
-      <action issue="FILEUPLOAD-220" dev="simonetripodi" type="update">
-        replace package.html with package-info.java
-      </action>
-      <action issue="FILEUPLOAD-221" dev="simonetripodi" type="update">
-        FileItemHeadersImpl can now use LinkedHashMap
-      </action>
-      <action issue="FILEUPLOAD-222" dev="simonetripodi" type="update">
-        Mark @deprecated classes/methods with @Deprecated annotation
-      </action>
-      <action issue="FILEUPLOAD-233" dev="sebb" type="fix" due-to="Simone Tripodi">
-        Base64Decoder doesn't correctly implement RFC 4648
-      </action>
-      <!-- Bug -->
-      <action issue="FILEUPLOAD-143" dev="jochen" type="fix" due-to="Luke Scott">
-        "Stream ended unexpectedly" when posting from a Flash client
-      </action>
-      <action issue="FILEUPLOAD-173" dev="simonetripodi" type="fix" due-to="Bjorn Harvold">
-        Manifest for OSGi has invalid syntax
-      </action>
-      <action issue="FILEUPLOAD-183" dev="simonetripodi" type="fix" due-to="Roman Arkadijovych Muntyanu">
-        commons-io dependency does not get loaded by maven if only dependency to commons-fileupload is specified
-      </action>
-      <action issue="FILEUPLOAD-185" dev="simonetripodi" type="fix" due-to="Sebb">
-        https://commons.apache.org/fileupload/index.html is out of date
-      </action>
-      <action issue="FILEUPLOAD-186" dev="simonetripodi" type="fix" due-to="Sebb">
-        https://commons.apache.org/fileupload/index.html should not mention nightly builds
-      </action>
-      <action issue="FILEUPLOAD-189" dev="simonetripodi" type="fix" due-to="Gregor K">
-        DiskFileItemFactory use of FileCleaningTracker is documented or coded wrong - proposal submitted by Jan Novotný
-      </action>
-      <action issue="FILEUPLOAD-195" dev="simonetripodi" type="fix" due-to="Juliano Alves">
-        Error reading the file size larger than 2 gb - pull request from Gergely
-      </action>
-      <action issue="FILEUPLOAD-197" dev="simonetripodi" type="fix" due-to="David Wolverton">
-        ServletFileUpload isMultipartContent method does not support HTTP PUT - thanks Roy T. Fielding and Jochen  Wiedmann
-      </action>
-      <action issue="FILEUPLOAD-199" dev="simonetripodi" type="fix" due-to="Mark Thomas">
-        Uploads have unexpected results for files with non-ASCII names - support RFC2047 - thanks Thomas Neidhart
-      </action>
-      <action issue="FILEUPLOAD-202" dev="tn" type="fix" due-to="tina">
-        Exceptions resulting from upload size limitations (fileSizeMax, sizeMax)
-        are now correctly propagated to the caller (these could be encountered
-        formerly as MalformedStreamException: "Stream ended unexpectedly"). 
-      </action>
-      <action issue="FILEUPLOAD-204" dev="jochen" type="fix" due-to="Hakju Oh">
-        FileItem.getHeaders() returns always null.
-      </action>
-      <action issue="FILEUPLOAD-212" dev="tn" type="fix" due-to="Damian Kolasa">
-        The sizeMax parameter within FileUpload is now correctly enforced if
-        no content length header is provided. 
-      </action>
-      <action issue="FILEUPLOAD-214" dev="simonetripodi" type="fix" due-to="Matthew Runo">
-        ServletFileUpload only accepts POST requests
-      </action>
-      <action issue="FILEUPLOAD-228" dev="simonetripodi" type="fix" due-to="Thomas Neidhart">
-        (Servlet|Portlet)RequestContext#contentLength() must return request.getContentLength() if Content-length header is not available
-      </action>
-      <action issue="FILEUPLOAD-229" dev="simonetripodi" type="fix" due-to="seb">
-        toLowerCase() is Locale-dependent; should use toLowerCase(Locale.ENGLISH) instead
-      </action>
-      <action issue="FILEUPLOAD-229" dev="sebb,simonetripodi" type="fix" due-to="seb">
-        There are no unit tests for the new utils.mime classes
-      </action>
-      <!-- Improvement -->
-      <action issue="FILEUPLOAD-182" dev="simonetripodi" type="add" due-to="Chris Lott">
-        Documentation: add simple HTML form example to fileupload user guide
-      </action>
-      <action issue="FILEUPLOAD-207" dev="simonetripodi" type="add" due-to="frank">
-        enhance file read/write performance - patch provided by frank
-      </action>
-      <action issue="FILEUPLOAD-209" dev="simonetripodi" type="add" due-to="Fernando Ribeiro">
-        Add Support for Generic Types
-      </action>
-      <action issue="FILEUPLOAD-210" dev="simonetripodi" type="add" due-to="Fernando Ribeiro">
-        Process HTTP Requests Into Maps
-      </action>
-      <action issue="FILEUPLOAD-223" dev="simonetripodi" type="update" due-to="">
-        Update commons-io dependency to latest version that supports JDK1.5
-      </action>
-      <action issue="FILEUPLOAD-224" dev="simonetripodi" type="update">
-        Avoid string concatenations while parsing headers, use buffers instead
-      </action>
-      <action issue="FILEUPLOAD-225" dev="simonetripodi" type="update">
-        Replace java.rmi.server.UID() with java.util.UUID
-      </action>
-      <action issue="FILEUPLOAD-226" dev="sebb" type="update">
-        DiskFileItem.counter could be converted to AtomicInteger (or AtomicLong?)
-      </action>
-      <action issue="FILEUPLOAD-227" dev="sebb" type="update">
-        Private immutable fields which could be final
-      </action>
-      <!-- Task -->
-      <action issue="FILEUPLOAD-201" dev="simonetripodi" type="update">
-        Update to JDK 1.5 and bump IO dependency to 2.0.1
-      </action>
-      <action issue="FILEUPLOAD-215" dev="simonetripodi" type="update">
-        version 1.3 improvement tasks
-      </action>
-    </release>
-
-    <release version="1.2.2" date="2010-07-29">
-      <action dev="jochen" type="fix"
-          due-to="Daniel Fabian" due-to-email="dfabian@google.com">
-        Added a check for file names containing a NULL characters. Such file
-        names are now triggering an InvalidFileNameException since the file name
-        cannot be used as provided to create the file since it will be truncated
-        at the NUL character on most (all?) operating systems. E.g. a file name
-        like "test.foo0.bar" would result in "test.foo" being created.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-160"
-          due-to="Stepan Koltsov" due-to-email="yozh@mx1.ru">
-        Temporary files have not been deleted, if an error
-        occurred in FileUploadBase.parseRequest();
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-158"
-          due-to="Stepan Koltsov" due-to-email="yozh@mx1.ru">
-        Fixed example in MultipartStream Javadocs.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-157"
-          due-to="Paul Spurr" due-to-email="pspurr@gmail.com">
-        Ensured, that the ProgressListener is called for all
-        items.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-156">
-        Made the ProgressNotifier public.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-155"
-          due-to="J&#246;rg Heinicke" due-to-email="joerg.heinicke@gmx.de">
-        Multiple documentation fixes.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-152"
-          due-to="Duzakropka" due-to-email="duzakropka.@gmail.com">
-        Fixed the error message for FileSizeLimitExceededException
-        from "too many characters" to "too many bytes".
-      </action>
-      <action dev="jochen" type="add" issue="FILEUPLOAD-154">
-        A FileSizeLimitExceededException does now contain the
-        file and field name of the item, which caused the problem.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-130"
-          due-to="Guillaume Cottenceau" due-to-email="cottenc@gmail.com">
-        The FileItemHeader stuff hasn't been actually working.
-      </action>
-    </release>
-
-    <release version="1.2.1" date="2008-01-18">
-      <action dev="jochen" type="fix">
-        Upgrade to commons-io-1.4-SNAPSHOT, in order to use the new
-        FileCleaningTracker and fix issues with FileCleaner.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-129">
-        Made the MockHttpServletRequest comply to the servlet 2.4 specification
-        by applying
-        http://www.sourcelabs.com/dashboards/sash-1.2/patches/commons-fileupload-1.1-1/SUP-520.diff
-      </action>
-      <action dev="jochen" type="add" issue="FILEUPLOAD-130"
-          due-to="Michael Macaluso" due-to-email="michael.public@wavecorp.com">
-        Added support for accessing the file item headers.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-116"
-          due-to="Amichai Rothman" due-to-email="amichai2@amichais.net">
-        A MalformedStreamException is now thrown, if the size of an items
-        headers exceeds HEADER_PART_SIZE_MAX;
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-134"
-          due-to="Thomas Vandahl" due-to-email="tv@apache.org">
-        DiskFileItem.toString() could throw an NPE.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-135"
-          due-to="Alexander Sova" due-to-email="bird@noir.crocodile.org">
-        Short files could cause an unexpected end of the item stream.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-145">
-        A FileSizeLimitExceededException was deferred until the complete
-        file has been uploaded. Additionally, the FileSizeLimitException
-        is now thrown immediately, if the attachments headers contain
-        a content-length value, which exceeds the configured limit.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-153"
-          due-to="Gary Gregory" due-to-email="ggregory@seagullsw.com">
-        Fixed a classpath problem when building with Sun JDK 1.3.1
-        and Ant.
-      </action>
-    </release>
-
-	<release version="1.2" date="2007-02-13">
-      <action dev="jochen" type="fix" due-to="Aaron Freeman"
-           due-to-email="aaron@sendthisfile.com">
-        Made Streams.asString static.
-      </action>
-	  <action dev="jochen" type="update" issue="FILEUPLOAD-109">
-	    Eliminated duplicate code.
-	  </action>
-	  <action dev="jochen" type="add" issue="FILEUPLOAD-112">
-	    Added a streaming API.
-	  </action>
-	  <action dev="jochen" type="fix" issue="FILEUPLOAD-93">
-	    Eliminated the necessity of a content-length header.
-	  </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-108"
-          due-to="Amichai Rothman" due-to-email="amichai2@amichais.net">
-        Eliminated the limitation of a maximum size for a single
-        header line. (The total size of all headers is already
-        limited, so there's no need for another limit.)      
-      </action>
-      <action dev="jochen" type="add" issue="FILEUPLOAD-87">
-        Added the ProgressListener, which allows to implement a
-        progress bar.
-      </action>
-      <action dev="jochen" type="add" issue="FILEUPLOAD-111"
-          due-to="Amichai Rothman" due-to-email="amichai2@amichais.net">
-        Added support for header continuation lines.
-      </action>
-      <action dev="jochen" type="add" issue="FILEUPLOAD-88"
-          due-to="Andrey Aristarkhov" due-to-email="aristarkhov@bitechnology.ru">
-        It is now possible to limit the actual file size and not
-        the request size.
-      </action>
-      <action dev="jochen" type="add" issue="FILEUPLOAD-120"
-          due-to="Henry Yandell" due-to-email="bayard@apache.org">
-        Added the FileCleanerCleanup as an example for how to close
-        down the FileCleaner's reaper thread nicely.
-      </action>
-      <action dev="jochen" type="fix" issue="FILEUPLOAD-123">
-        A descriptive NPE is now thrown, if the FileItemFactory
-        has not been set.
-      </action>
-	</release>
-
-    <release version="1.1.1" date="2006-06-08" description="Bugfix release">
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-20">
-        Cache disk file item size when it is moved to a new location.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-30">
-        File names were being inadvertently converted to lower case.
-      </action>
-
-    </release>
-
-    <release version="1.1" date="2005-12-24" description="Portlet support, substantial refactoring and numerous bug fixes">
-
-      <action dev="martinc" type="update">
-        Updates for FileUpload 1.1-RC1.
-      </action>
-
-      <action dev="martinc" type="add">
-        Added release notes for FileUpload 1.1.
-      </action>
-
-      <action dev="martinc" type="update">
-        Update the User Guide to document the "right" way of using FileUpload
-        1.1, rather than the older, and thus deprecated, ways that are
-        compatible with FileUpload 1.0.
-      </action>
-
-      <action dev="martinc" type="add">
-        Add this change log, including all changes since the Commons FileUpload
-        1.0 release.
-      </action>
-
-      <action dev="martinc" type="update">
-        Update Commons IO dependency to version 1.1.
-      </action>
-
-      <action dev="martinc" type="add">
-        Add custom PMD configuration.
-      </action>
-
-      <action dev="martinc" type="update">
-        Make inner exception classes static, which they should have been all
-        along.
-      </action>
-
-      <action dev="martinc" type="fix">
-        Fix Checkstyle warnings.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-29" due-to="Rahul Akolkar">
-        Remove Javadoc warnings.
-      </action>
-
-      <action dev="martinc" type="update">
-        Build updates:
-        <ul>
-          <li>
-            Include NOTICE.txt in the jar file and distributions.
-          </li>
-          <li>
-            Include xdocs in source distribution.
-          </li>
-          <li>
-            Create MD5 checksums for distributions.
-          </li>
-        </ul>
-      </action>
-
-      <action dev="martinc" type="add">
-        Add custom Checkstyle configuration.
-      </action>
-
-      <action dev="martinc" type="update">
-        Update dependencies in POM, and add comments and scope.
-      </action>
-
-      <action dev="martinc" type="update">
-        Standardise on @throws instead of having a mixture of that and
-        @exception.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-50" due-to="Niall Pemberton">
-        Make DiskFileItem serializable. Thanks to Niall Pemberton for the
-        suggestion and patch.
-      </action>
-
-      <action dev="martinc" type="update">
-        Make the temporary file names unique across class loaders, not just
-        within them, by including a UID in the file name.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-77">
-        Include the actual and permitted sizes in both the exception message
-        and the exception itself.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-13">
-        If an explicit header encoding is not specified, use the one from the
-        appropriate context (i.e. ServletRequest or ActionRequest).
-      </action>
-
-      <action dev="martinc" type="add">
-        Add getCharacterEncoding to the request context.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-83">
-        Null check and case insensitivity fixes.
-      </action>
-
-      <action dev="martinc" type="update">
-        Web site updates:
-        <ul>
-          <li>
-            Add detail pages for Source Repository and Issue Tracking, based on
-            those for IO and Validator.
-          </li>
-          <li>
-            Improvements to FileUpload home page, based on similar recent
-            changes to IO and Validator home pages.
-          </li>
-          <li>
-            The Bugzilla component name has a space in it. Fix the URLs.
-          </li>
-          <li>
-            Add an FAQ page, using the Maven plugin to generate it.
-          </li>
-        </ul>
-      </action>
-
-      <action dev="dion" type="fix" issue="COMMONSSITE-2">
-        Fixes to POMs
-      </action>
-
-      <action dev="mrdon" type="update">
-        Setting source and target for Java 1.3
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-37">
-        Fix typos in Javadoc code examples.
-      </action>
-
-      <action dev="martinc" type="fix">
-        Fix typos in exception messages.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-5">
-        Obtain request content type from container instead of headers.
-      </action>
-
-      <action dev="sullis" type="update">
-        New mock objects from Jetspeed-2, and new FileUpload test cases.
-      </action>
-
-      <action dev="sullis" type="add">
-        added toString() methods
-      </action>
-
-      <action dev="martinc" type="add">
-        Fix up the existing package.html file and add new ones for the newly
-        introduced packages. Fairly minimal, but with a link to the user guide.
-      </action>
-
-      <action dev="martinc" type="update">
-        Substantial refactoring and additions:
-        <ul>
-          <li>
-            The core package is now independent of servlet / portlet / other
-            distinctions, as well as persistence schemes, other than deprecated
-            classes and methods retained for backwards compatibility.
-          </li>
-          <li>
-            Servlet specific functionality has been moved to a new 'servlet'
-            package. Existing users should migrate to this as soon as possible,
-            since the servlet specific functionality in the generic package
-            will be removed in the release after FileUpload 1.1.
-          </li>
-          <li>
-            Support for portlets (JSR 168) has been added, in a new 'portlet'
-            package. This is not well tested at this point, and feedback would
-            be very much appreciated. (This also resolves bug #23620.)
-          </li>
-          <li>
-            The disk-based file item implementation has been moved into a 'disk'
-            package, and renamed from Default* to Disk* to reflect what it
-            really is. The Default* classes have been retained in the top level
-            package for backwards compatibility, but are now deprecated, and
-            will be removed in the release after FileUpload 1.1.
-          </li>
-          <li>
-            The isMultipartRequest method is an unfortunate casualty of this
-            refactoring. That method should really be moved to ServletFileUpload,
-            but since the method is static, it can only exist in either
-            FileUploadBase or ServletFileUpload. Backwards compatibility dictates
-            the former for now, but the latter is the desired state, which
-            implies some future breakage. Fair warning...
-          </li>
-        </ul>
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-4">
-        Specify the encoding (ISO-8859-1) when converting the boundary to a
-        byte array.
-      </action>
-
-      <action dev="martinc" type="update">
-        Convert to Sun coding guidelines.
-      </action>
-
-      <action dev="martinc" type="update">
-        DeferredFileOutputStream moved to Commons IO.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-16" due-to="Justin Sampson">
-        Workaround for Mac IE5 bug. Thanks to Justin Sampson for the patch and
-        tests for this vexing issue.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-104">
-        Handle unquoted header parameters.
-      </action>
-
-      <action dev="martinc" type="add" issue="FILEUPLOAD-78">
-        Some documentation on interaction with virus scanners.
-      </action>
-
-      <action dev="martinc" type="add" issue="FILEUPLOAD-31" due-to="Justin Sampson">
-        More unit tests from Justin Sampson.
-      </action>
-
-      <action dev="martinc" type="update" issue="FILEUPLOAD-95">
-        Use FileCleaner from Commons IO to clean up temp files, rather than
-        File.deleteOnExit(), which can cause serious problems in long-running
-        processes.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-53">
-        Check that HTTP method is POST as part of multipart check.
-      </action>
-
-      <action dev="martinc" type="add">
-        Switch to Commons IO version of DeferredFileOutputStream. Adding IO as
-        a dependency will allow us to take advantage of other classes in that
-        component to fix additional FileUpload bugs.
-      </action>
-
-      <action dev="martinc" type="add" issue="FILEUPLOAD-40">
-        handle quoted boundary specification.
-      </action>
-
-      <action dev="martinc" type="add" issue="FILEUPLOAD-18">
-        use case-independent comparisons for encoding types.
-      </action>
-
-      <action dev="martinc" type="fix">
-        Fix comments to avoid break iterator complaints.
-      </action>
-
-      <action dev="martinc" type="fix" due-to="Yuji Yamano">
-        Fix typos in comments.
-      </action>
-
-      <action dev="martinc" type="add" issue="FILEUPLOAD-101" due-to="Oleg Kalnichevski">
-        Add support for character sets specified for individual parts.
-      </action>
-
-      <action dev="scolebourne" type="update">
-        Change to Apache License 2.0
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-22">
-        Correct the comment for the no-args constructor to reflect the fact
-        that a factory needs to be set before parsing uploads.
-      </action>
-
-      <action dev="martinc" type="update">
-        Collapse some all but duplicated code.
-      </action>
-
-      <action dev="jmcnally" type="fix" issue="FILEUPLOAD-72">
-        Fix example showing FileItem.write to use a File object.
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-21" due-to="Peter Chase">
-        Check for null before attempting to close streams in write().
-      </action>
-
-      <action dev="martinc" type="fix" issue="FILEUPLOAD-67" due-to="Paul Dalton">
-        Correction to sample code in the docs.
-      </action>
-
-    </release>
-
-    <release version="1.0" date="2003-06-26" description="Initial release">
-    </release>
-  
-    
-  </body>
-
-</document>
diff --git a/wicket-commons-fileupload/src/changes/release-notes.vm b/wicket-commons-fileupload/src/changes/release-notes.vm
deleted file mode 100644
index 0769f29515..0000000000
--- a/wicket-commons-fileupload/src/changes/release-notes.vm
+++ /dev/null
@@ -1,113 +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.
-              ${project.name} ${version} RELEASE NOTES
-
-The ${developmentTeam} is pleased to announce the release of ${project.name} ${version}.
-
-The Apache Commons FileUpload component provides a simple yet flexible means of
-adding support for multipart file upload functionality to servlets and web
-applications. Version 1.3 onwards requires Java 6 or later.
-
-No client code changes are required to migrate from version 1.3.0 to 1.3.1.
-
-
-## N.B. the available variables are described here:
-## http://maven.apache.org/plugins/maven-changes-plugin/examples/using-a-custom-announcement-template.html
-##
-## Hack to get line breaks to work in release description. For this to work, each line break in the
-## release description attribute in changes.xml needs to be preceded by a single space.
-#set( $desc = $release.description )
-#set( $desc2 = $desc.replace($esc.newline, "  ") )
-#set( $d = $desc2.replace("  ",$esc.newline) )
-${d}
-
-## set up indent sizes. Only change indent1
-#set($props=${project.properties})
-#set($jiralen=$props.get("commons.jira.id").length())
-## indent1 =   POOL-nnnn:
-#set($blanklen=$jiralen+6)## +6 for "-nnnn:"
-## must be at least as long as the longest JIRA id
-#set($blanks="                                  ")
-#set($indent1=$blanks.substring(0,$blanklen))
-## indent2 allows for issue wrapper
-#set($indent2="$indent1   ")
-##
-#macro ( processaction )
-## Use replaceAll to fix up LF-only line ends on Windows.
-#set($action=$actionItem.getAction().replaceAll("\n","
-"))
-## Fix up indentation for multi-line action descriptions
-#set($action=$action.replaceAll("(?m)^  +",$indent2))
-#if ($actionItem.getIssue())
-#set($issue="$actionItem.getIssue():")
-## Pad shorter issue numbers
-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end
-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end
-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end
-#else
-#set($issue=$indent1)
-#end
-#if ($actionItem.getDueTo())
-#set($dueto=" Thanks to $actionItem.getDueTo().")
-#else
-#set($dueto="")
-#end
-o $issue ${action}$dueto
-#set($action="")
-#set($issue="")
-#set($dueto="")
-#end
-##
-#if ($release.getActions().size() == 0)
-No changes defined in this version.
-#else
-Changes in version ${version} include:
-
-#if ($release.getActions('add').size() !=0)
-New features:
-#foreach($actionItem in $release.getActions('add'))
-#processaction()
-#end 
-#end
-
-#if ($release.getActions('fix').size() !=0)
-Fixed Bugs:
-#foreach($actionItem in $release.getActions('fix'))
-#processaction()
-#end
-#end
-
-#if ($release.getActions('update').size() !=0)
-Changes:
-#foreach($actionItem in $release.getActions('update'))
-#processaction()
-#end
-#end
-
-#if ($release.getActions('remove').size() !=0)
-Removed:
-#foreach($actionItem in $release.getActions('remove'))
-#processaction()
-#end
-#end
-## End of main loop
-#end
-
-For complete information on ${project.name}, including instructions on how to submit bug reports,
-patches, or suggestions for improvement, see the ${project.name} website:
-
-${project.url}
diff --git a/wicket-commons-fileupload/src/checkstyle/checkstyle-suppressions.xml b/wicket-commons-fileupload/src/checkstyle/checkstyle-suppressions.xml
deleted file mode 100644
index e40eb4e3eb..0000000000
--- a/wicket-commons-fileupload/src/checkstyle/checkstyle-suppressions.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE suppressions PUBLIC
-     "-//Checkstyle//DTD SuppressionFilter Configuration 1.0//EN"
-     "https://checkstyle.org/dtds/suppressions_1_0.dtd">
-<!--
-   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.
--->
-<suppressions>
-  <suppress checks="[a-zA-Z0-9]*" files=".+\.properties" />
-</suppressions>
diff --git a/wicket-commons-fileupload/src/checkstyle/fileupload_basic.xml b/wicket-commons-fileupload/src/checkstyle/fileupload_basic.xml
deleted file mode 100644
index e4f2260190..0000000000
--- a/wicket-commons-fileupload/src/checkstyle/fileupload_basic.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.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.
--->
-
-<ruleset name="FileUpload Basic Rules">
-  <description>PMD Basic Ruleset minus the EmptyCatchBlock rule.</description>
-
-  <rule ref="category/java/errorprone.xml">
-    <exclude name="EmptyCatchBlock"/>
-  </rule>
-</ruleset>
diff --git a/wicket-commons-fileupload/src/checkstyle/fileupload_checks.xml b/wicket-commons-fileupload/src/checkstyle/fileupload_checks.xml
deleted file mode 100644
index 686e015ef7..0000000000
--- a/wicket-commons-fileupload/src/checkstyle/fileupload_checks.xml
+++ /dev/null
@@ -1,233 +0,0 @@
-<?xml version="1.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.
--->
-
-<!DOCTYPE module PUBLIC
-    "-//Checkstyle//DTD Checkstyle Configuration 1.2//EN"
-    "https://checkstyle.org/dtds/configuration_1_2.dtd">
-
-<!--
-  Checkstyle configuration for Commons FileUpload. FileUpload uses the Sun
-  coding guidelines, so this file is almost the same as Maven's sun_checks.xml
-  file. The only changes from that file are:
-
-    - Use a RegexpHeader check instead of a regular Header check, since the
-      copyright years can vary per source file.
-
-    - Disable the HiddenField module, since FileUpload has always used the
-      "this.foo = foo" pattern, which is not recognised by this module.
-
-    - Disable the DesignForExtension module, since fixing those complaints
-      would result in backwards incompatible API changes.
-
-    - Disable the FinalParameters module, since fixing those complaints
-      would result in backwards incompatible API changes.
--->
-<!--
-
-  Checkstyle configuration that checks the sun coding conventions from:
-
-    - the Java Language Specification at
-      http://java.sun.com/docs/books/jls/second_edition/html/index.html
-
-    - the Sun Code Conventions at http://java.sun.com/docs/codeconv/
-
-    - the Javadoc guidelines at
-      http://java.sun.com/j2se/javadoc/writingdoccomments/index.html
-
-    - the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html
-
-    - some best practices
-
-  Checkstyle is very configurable. Be sure to read the documentation at
-  http://checkstyle.sf.net (or in your downloaded distribution).
-
-  Most Checks are configurable, be sure to consult the documentation.
-
-  To completely disable a check, just comment it out or delete it from the file.
-
-  Finally, it is worth reading the documentation.
-
--->
-
-<module name="Checker">
-
-    <!-- Checks whether files end with a new line.                        -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
-    <module name="NewlineAtEndOfFile"/>
-
-    <!-- Checks that property files contain the same keys.         -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
-    <module name="Translation"/>
-
-
-    <!-- Checks for Size Violations.                    -->
-    <!-- See http://checkstyle.sf.net/config_sizes.html -->
-    <module name="FileLength"/>
-
-    <!-- No tabs allowed! -->
-    <module name="FileTabCharacter"/>
-
-    <!-- Require package Javadoc -->
-    <module name="JavadocPackage"/>
-
-
-    <property name="cacheFile" value="${checkstyle.cache.file}"/>
-
-    <!-- Begin Custom for FileUpload -->
-    <module name="LineLength">
-        <property name="max" value="160"/>
-        <property name="ignorePattern" value="^ \* @version .*$"/>
-    </module>
-
-    <module name="TreeWalker">
-
-        <module name="FinalLocalVariable">
-            <property name="tokens" value="VARIABLE_DEF,PARAMETER_DEF"/>
-            <property name="validateEnhancedForLoopVariable" value="true"/>
-        </module>
-
-        <!-- Allow comments to suppress checks -->
-        <module name="SuppressionCommentFilter"/>
-
-        <module name="SuppressWithNearbyCommentFilter">
-          <property name="commentFormat" value="CHECKSTYLE IGNORE (\w+) FOR NEXT (\d+) LINES?"/>
-          <property name="checkFormat" value="$1"/>
-          <property name="influenceFormat" value="$2"/>
-        </module>
-
-
-
-        <!-- Allow comments to suppress checks
-        <module name="FileContentsHolder"/>-->
-
-        <!-- Checks for Javadoc comments.                     -->
-        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
-        <module name="JavadocMethod">
-          <property name="accessModifiers" value="protected"/>
-        </module>
-        <module name="JavadocType"/>
-        <module name="JavadocVariable"/>
-        <module name="JavadocStyle"/>
-
-
-        <!-- Checks for Naming Conventions.                  -->
-        <!-- See http://checkstyle.sf.net/config_naming.html -->
-        <module name="ConstantName"/>
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MemberName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-
-
-        <!-- Checks for Headers                              -->
-        <!-- See http://checkstyle.sf.net/config_header.html -->
-        <!-- <module name="Header">                          -->
-            <!-- The follow property value demonstrates the ability     -->
-            <!-- to have access to ANT properties. In this case it uses -->
-            <!-- the ${basedir} property to allow Checkstyle to be run  -->
-            <!-- from any directory within a project. See property      -->
-            <!-- expansion,                                             -->
-            <!-- http://checkstyle.sf.net/config.html#properties        -->
-            <!-- <property                                              -->
-            <!--     name="headerFile"                                  -->
-            <!--     value="${basedir}/java.header"/>                   -->
-            <!-- <property name="headerFile" value="${checkstyle.header.file}"/> -->
-        <!-- </module> -->
-
-        <!-- Checks for imports                              -->
-        <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports"/>
-
-        <!-- End Custom for FileUpload -->
-        <module name="MethodLength"/>
-        <module name="ParameterNumber"/>
-
-
-        <!-- Checks for whitespace                               -->
-        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
-        <module name="EmptyForIteratorPad"/>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap"/>
-        <module name="ParenPad"/>
-        <module name="TypecastParenPad"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-
-        <module name="GenericWhitespace"/>
-
-        <!-- Modifier Checks                                    -->
-        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-
-        <!-- Checks for blocks. You know, those {}'s         -->
-        <!-- See http://checkstyle.sf.net/config_blocks.html -->
-        <module name="AvoidNestedBlocks"/>
-        <!-- Begin Custom for FileUpload -->
-        <module name="EmptyBlock">
-          <property name="option" value="text"/>
-        </module>
-        <!-- End Custom for FileUpload -->
-        <module name="LeftCurly"/>
-        <module name="NeedBraces"/>
-        <module name="RightCurly"/>
-
-
-        <!-- Checks for common coding problems               -->
-        <!-- See http://checkstyle.sf.net/config_coding.html -->
-        <module name="EmptyStatement"/>
-        <module name="EqualsHashCode"/>
-        <!-- Disabled for FileUpload: module name="HiddenField"/ -->
-        <module name="IllegalInstantiation"/>
-        <module name="InnerAssignment"/>
-        <module name="MagicNumber"/>
-        <module name="MissingSwitchDefault"/>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-
-        <!-- Checks for class design                         -->
-        <!-- See http://checkstyle.sf.net/config_design.html -->
-        <!-- Disabled for FileUpload: module name="DesignForExtension"/ -->
-        <module name="FinalClass"/>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier"/>
-
-
-        <!-- Miscellaneous other checks.                   -->
-        <!-- See http://checkstyle.sf.net/config_misc.html -->
-        <module name="ArrayTypeStyle"/>
-        <!-- Disabled for FileUpload: module name="FinalParameters"/ -->
-        <module name="RegexpSinglelineJava">
-            <property name="format" value="\s+$"/>
-            <property name="message" value="Line has trailing spaces."/>
-        </module>
-        <module name="TodoComment"/>
-        <module name="UpperEll"/>
-
-    </module>
-
-</module>
diff --git a/wicket-commons-fileupload/src/checkstyle/license-header.txt b/wicket-commons-fileupload/src/checkstyle/license-header.txt
deleted file mode 100644
index 290c957f8d..0000000000
--- a/wicket-commons-fileupload/src/checkstyle/license-header.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/\*\s*
- \*\s*Licensed to the Apache Software Foundation \(ASF\) under one or more
- \*\s*contributor license agreements.  See the NOTICE file distributed with
- \*\s*this work for additional information regarding copyright ownership\.
- \*\s*The ASF licenses this file to You under the Apache License, Version 2\.0
- \*\s*\(the "License"\); you may not use this file except in compliance with
- \*\s*the License\.  You may obtain a copy of the License at
- \*\s*
- \*\s*http://www\.apache\.org/licenses/LICENSE\-2\.0
- \*\s*
- \*\s*Unless required by applicable law or agreed to in writing, software
- \*\s*distributed under the License is distributed on an "AS IS" BASIS,
- \*\s*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
- \*\s*See the License for the specific language governing permissions and
- \*\s*limitations under the License\.
- \*/\s*
diff --git a/wicket-commons-fileupload/src/main/assembly/bin.xml b/wicket-commons-fileupload/src/main/assembly/bin.xml
deleted file mode 100644
index 353e51aa84..0000000000
--- a/wicket-commons-fileupload/src/main/assembly/bin.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-  <id>bin</id>
-  <formats>
-    <format>tar.gz</format>
-    <format>zip</format>
-  </formats>
-  <baseDirectory>${project.build.finalName}-bin</baseDirectory>
-  <includeSiteDirectory>true</includeSiteDirectory>
-  <fileSets>
-    <fileSet>
-      <includes>
-        <include>LICENSE.txt</include>
-        <include>NOTICE.txt</include>
-        <include>RELEASE-NOTES.txt</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>target</directory>
-      <outputDirectory></outputDirectory>
-      <includes>
-        <include>*.jar</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>target/site/apidocs</directory>
-      <outputDirectory>apidocs</outputDirectory>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/wicket-commons-fileupload/src/main/assembly/src.xml b/wicket-commons-fileupload/src/main/assembly/src.xml
deleted file mode 100644
index 2254e22c48..0000000000
--- a/wicket-commons-fileupload/src/main/assembly/src.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
-  <id>src</id>
-  <formats>
-    <format>tar.gz</format>
-    <format>zip</format>
-  </formats>
-  <baseDirectory>${project.build.finalName}-src</baseDirectory>
-  <fileSets>
-    <fileSet>
-      <directory>${basedir}</directory>
-      <excludes>
-        <exclude>**/.classpath</exclude>
-        <exclude>**/.project</exclude>
-        <exclude>**/.settings/</exclude>
-        <exclude>**/.checkstyle/</exclude>
-        <exclude>**/doap_*.rdf</exclude>
-        <exclude>**/bin/</exclude>
-        <exclude>**/.externalToolBuilders/</exclude>
-        <exclude>**/${project.build.directory}/</exclude>
-        <exclude>**/download*.cgi</exclude>
-      </excludes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/wicket-commons-fileupload/src/main/java/module-info.java b/wicket-commons-fileupload/src/main/java/module-info.java
deleted file mode 100644
index 81c2f28c6e..0000000000
--- a/wicket-commons-fileupload/src/main/java/module-info.java
+++ /dev/null
@@ -1,28 +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.
- */
-
- module org.apache.wicket.commons.fileupload {
-	requires org.apache.commons.io;
-	requires java.naming;
-	requires jakarta.servlet;
-
-	exports org.apache.wicket.commons.fileupload2;
-	exports org.apache.wicket.commons.fileupload2.pub;
-	exports org.apache.wicket.commons.fileupload2.util;
-	exports org.apache.wicket.commons.fileupload2.disk;
-	exports org.apache.wicket.commons.fileupload2.jaksrvlt;
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/AbstractFileUpload.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/AbstractFileUpload.java
deleted file mode 100644
index 3e90a48bcb..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/AbstractFileUpload.java
+++ /dev/null
@@ -1,556 +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.wicket.commons.fileupload2;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Objects;
-
-import org.apache.wicket.commons.fileupload2.impl.FileItemIteratorImpl;
-import org.apache.wicket.commons.fileupload2.pub.FileUploadFileCountLimitException;
-import org.apache.wicket.commons.fileupload2.util.FileItemHeadersImpl;
-import org.apache.commons.io.IOUtils;
-
-/**
- * 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
- * org.apache.wicket.commons.fileupload2.FileItem}s 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>
- */
-public abstract class AbstractFileUpload {
-
-    /**
-     * HTTP content type header name.
-     */
-    public static final String CONTENT_TYPE = "Content-type";
-
-    /**
-     * HTTP content disposition header name.
-     */
-    public static final String CONTENT_DISPOSITION = "Content-disposition";
-
-    /**
-     * HTTP content length header name.
-     */
-    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";
-
-    /**
-     * Utility method that determines whether the request contains multipart
-     * content.
-     * <p>
-     * <strong>NOTE:</strong> This method will be moved to the
-     * {@code ServletFileUpload} class after the FileUpload 1.1 release.
-     * Unfortunately, since this method is static, it is not possible to
-     * provide its replacement until this method is removed.
-     * </p>
-     * @param ctx The request context to be evaluated. Must be non-null.
-     * @return {@code true} if the request is multipart;
-     *         {@code false} otherwise.
-     */
-    public static final boolean isMultipartContent(final RequestContext ctx) {
-        final String contentType = ctx.getContentType();
-        if (contentType == null) {
-            return false;
-        }
-        return contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART);
-    }
-
-    /**
-     * The maximum size permitted for the complete request, as opposed to
-     * {@link #fileSizeMax}. A value of -1 indicates no maximum.
-     */
-    private long sizeMax = -1;
-
-    /**
-     * The maximum size permitted for a single uploaded file, as opposed
-     * to {@link #sizeMax}. A value of -1 indicates no maximum.
-     */
-    private long fileSizeMax = -1;
-
-    /**
-     * The maximum permitted number of files that may be uploaded in a single
-     * request. A value of -1 indicates no maximum.
-     */
-    private long fileCountMax = -1;
-
-    /**
-     * The content encoding to use when reading part headers.
-     */
-    private String headerEncoding;
-
-    /**
-     * The progress listener.
-     */
-    private ProgressListener listener;
-
-    /**
-     * Gets the boundary from the {@code Content-type} header.
-     *
-     * @param contentType The value of the content type header from which to
-     *                    extract the boundary value.
-     * @return The boundary, as a byte array.
-     */
-    public byte[] getBoundary(final String contentType) {
-        final ParameterParser parser = new ParameterParser();
-        parser.setLowerCaseNames(true);
-        // Parameter parser can handle null input
-        final Map<String, String> params = parser.parse(contentType, new char[] {';', ','});
-        final String boundaryStr = params.get("boundary");
-
-        if (boundaryStr == null) {
-            return null;
-        }
-        final byte[] boundary;
-        boundary = boundaryStr.getBytes(StandardCharsets.ISO_8859_1);
-        return boundary;
-    }
-
-    /**
-     * Gets the field name from the {@code Content-disposition}
-     * header.
-     *
-     * @param headers A {@code Map} containing the HTTP request headers.
-     * @return The field name for the current {@code encapsulation}.
-     */
-    public String getFieldName(final FileItemHeaders headers) {
-        return getFieldName(headers.getHeader(CONTENT_DISPOSITION));
-    }
-
-    /**
-     * Gets the field name, which is given by the content-disposition
-     * header.
-     *
-     * @param contentDisposition The content-dispositions header value.
-     * @return The field jake
-     */
-    private String getFieldName(final String contentDisposition) {
-        String fieldName = null;
-        if (contentDisposition != null
-                && contentDisposition.toLowerCase(Locale.ENGLISH).startsWith(FORM_DATA)) {
-            final ParameterParser parser = new ParameterParser();
-            parser.setLowerCaseNames(true);
-            // Parameter parser can handle null input
-            final Map<String, String> params = parser.parse(contentDisposition, ';');
-            fieldName = params.get("name");
-            if (fieldName != null) {
-                fieldName = fieldName.trim();
-            }
-        }
-        return fieldName;
-    }
-
-    /**
-     * Gets the maximum number of files allowed in a single request.
-     *
-     * @return The maximum number of files allowed in a single request.
-     */
-    public long getFileCountMax() {
-        return fileCountMax;
-    }
-
-    /**
-     * Gets the factory class used when creating file items.
-     *
-     * @return The factory class for new file items.
-     */
-    public abstract FileItemFactory getFileItemFactory();
-
-    /**
-     * Gets the file name from the {@code Content-disposition}
-     * header.
-     *
-     * @param headers The HTTP headers object.
-     *
-     * @return The file name for the current {@code encapsulation}.
-     */
-    public String getFileName(final FileItemHeaders headers) {
-        return getFileName(headers.getHeader(CONTENT_DISPOSITION));
-    }
-
-    /**
-     * Gets the given content-disposition headers file name.
-     * @param contentDisposition The content-disposition headers value.
-     * @return The file name
-     */
-    private String getFileName(final String contentDisposition) {
-        String fileName = null;
-        if (contentDisposition != null) {
-            final String cdl = contentDisposition.toLowerCase(Locale.ENGLISH);
-            if (cdl.startsWith(FORM_DATA) || cdl.startsWith(ATTACHMENT)) {
-                final ParameterParser parser = new ParameterParser();
-                parser.setLowerCaseNames(true);
-                // Parameter parser can handle null input
-                final Map<String, String> params = parser.parse(contentDisposition, ';');
-                if (params.containsKey("filename")) {
-                    fileName = params.get("filename");
-                    if (fileName != null) {
-                        fileName = fileName.trim();
-                    } else {
-                        // Even if there is no value, the parameter is present,
-                        // so we return an empty file name rather than no file
-                        // name.
-                        fileName = "";
-                    }
-                }
-            }
-        }
-        return fileName;
-    }
-
-    /**
-     * Gets the maximum allowed size of a single uploaded file,
-     * as opposed to {@link #getSizeMax()}.
-     *
-     * @see #setFileSizeMax(long)
-     * @return Maximum size of a single uploaded file.
-     */
-    public long getFileSizeMax() {
-        return fileSizeMax;
-    }
-
-    /**
-     * Gets the character encoding used when reading the headers of an
-     * individual part. When not specified, or {@code null}, the request
-     * encoding is used. If that is also not specified, or {@code null},
-     * the platform default encoding is used.
-     *
-     * @return The encoding used to read part headers.
-     */
-    public String getHeaderEncoding() {
-        return headerEncoding;
-    }
-
-    /**
-     * Gets an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
-     * compliant {@code multipart/form-data} stream.
-     *
-     * @param ctx The context for the request to be parsed.
-     * @return An iterator to instances of {@code FileItemStream}
-     *         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 FileItemIterator getItemIterator(final RequestContext ctx) throws FileUploadException, IOException {
-        return new FileItemIteratorImpl(this, ctx);
-    }
-
-    /**
-     * Parses the {@code header-part} and returns as key/value
-     * pairs.
-     * <p>
-     * If there are multiple headers of the same names, the name
-     * will map to a comma-separated list containing the values.
-     * </p>
-     * @param headerPart The {@code header-part} of the current
-     *                   {@code encapsulation}.
-     * @return A {@code Map} containing the parsed HTTP request headers.
-     */
-    public FileItemHeaders getParsedHeaders(final String headerPart) {
-        final int len = headerPart.length();
-        final FileItemHeadersImpl headers = newFileItemHeaders();
-        int start = 0;
-        for (;;) {
-            int end = parseEndOfLine(headerPart, start);
-            if (start == end) {
-                break;
-            }
-            final StringBuilder header = new StringBuilder(headerPart.substring(start, end));
-            start = end + 2;
-            while (start < len) {
-                int nonWs = start;
-                while (nonWs < len) {
-                    final char c = headerPart.charAt(nonWs);
-                    if (c != ' '  &&  c != '\t') {
-                        break;
-                    }
-                    ++nonWs;
-                }
-                if (nonWs == start) {
-                    break;
-                }
-                // Continuation line found
-                end = parseEndOfLine(headerPart, nonWs);
-                header.append(' ').append(headerPart, nonWs, end);
-                start = end + 2;
-            }
-            parseHeaderLine(headers, header.toString());
-        }
-        return headers;
-    }
-
-    /**
-     * Gets the progress listener.
-     *
-     * @return The progress listener, if any, or null.
-     */
-    public ProgressListener getProgressListener() {
-        return listener;
-    }
-
-    /**
-     * Gets the maximum allowed size of a complete request, as opposed
-     * to {@link #getFileSizeMax()}.
-     *
-     * @return The maximum allowed size, in bytes. The default value of
-     *   -1 indicates, that there is no limit.
-     * @see #setSizeMax(long)
-     *
-     */
-    public long getSizeMax() {
-        return sizeMax;
-    }
-
-    /**
-     * Creates a new instance of {@link FileItemHeaders}.
-     * @return The new instance.
-     */
-    protected FileItemHeadersImpl newFileItemHeaders() {
-        return new FileItemHeadersImpl();
-    }
-
-    /**
-     * Skips bytes until the end of the current line.
-     *
-     * @param headerPart The headers, which are being parsed.
-     * @param end Index of the last byte, which has yet been
-     *   processed.
-     * @return Index of the \r\n sequence, which indicates
-     *   end of line.
-     */
-    private int parseEndOfLine(final String headerPart, final int end) {
-        int index = end;
-        for (;;) {
-            final int offset = headerPart.indexOf('\r', index);
-            if (offset == -1  ||  offset + 1 >= headerPart.length()) {
-                throw new IllegalStateException(
-                    "Expected headers to be terminated by an empty line.");
-            }
-            if (headerPart.charAt(offset + 1) == '\n') {
-                return offset;
-            }
-            index = offset + 1;
-        }
-    }
-
-    /**
-     * Parses the next header line.
-     *
-     * @param headers String with all headers.
-     * @param header Map where to store the current header.
-     */
-    private void parseHeaderLine(final FileItemHeadersImpl headers, final String header) {
-        final int colonOffset = header.indexOf(':');
-        if (colonOffset == -1) {
-            // This header line is malformed, skip it.
-            return;
-        }
-        final String headerName = header.substring(0, colonOffset).trim();
-        final String headerValue =
-            header.substring(colonOffset + 1).trim();
-        headers.addHeader(headerName, headerValue);
-    }
-
-    /**
-     * Parses an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
-     * compliant {@code multipart/form-data} stream.
-     *
-     * @param ctx The context for the 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.
-     * @since 1.3
-     */
-    public Map<String, List<FileItem>> parseParameterMap(final RequestContext ctx)
-            throws FileUploadException {
-        final List<FileItem> items = parseRequest(ctx);
-        final Map<String, List<FileItem>> itemsMap = new HashMap<>(items.size());
-
-        for (final FileItem fileItem : items) {
-            final String fieldName = fileItem.getFieldName();
-            final List<FileItem> mappedItems = itemsMap.computeIfAbsent(fieldName, k -> new ArrayList<>());
-
-            mappedItems.add(fileItem);
-        }
-
-        return itemsMap;
-    }
-
-    /**
-     * Parses an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
-     * compliant {@code multipart/form-data} stream.
-     *
-     * @param ctx The context for the 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 List<FileItem> parseRequest(final RequestContext ctx)
-            throws FileUploadException {
-        final List<FileItem> items = new ArrayList<>();
-        boolean successful = false;
-        try {
-            final FileItemIterator iter = getItemIterator(ctx);
-            final FileItemFactory fileItemFactory = Objects.requireNonNull(getFileItemFactory(), "No FileItemFactory has been set.");
-            final byte[] buffer = new byte[IOUtils.DEFAULT_BUFFER_SIZE];
-            while (iter.hasNext()) {
-                if (items.size() == fileCountMax) {
-                    // The next item will exceed the limit.
-                    throw new FileUploadFileCountLimitException(ATTACHMENT, getFileCountMax(), items.size());
-                }
-                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);
-                items.add(fileItem);
-                try (InputStream inputStream = item.openStream();
-                        OutputStream outputStream = fileItem.getOutputStream()) {
-                    IOUtils.copyLarge(inputStream, outputStream, buffer);
-                } catch (final FileUploadException e) {
-                    throw e;
-                } catch (final IOException e) {
-                    throw new FileUploadException(String.format("Processing of %s request failed. %s", MULTIPART_FORM_DATA, e.getMessage()), e);
-                }
-                fileItem.setHeaders(item.getHeaders());
-            }
-            successful = true;
-            return items;
-        } catch (final FileUploadException e) {
-            throw e;
-        } catch (final IOException e) {
-            throw new FileUploadException(e.getMessage(), e);
-        } finally {
-            if (!successful) {
-                for (final FileItem fileItem : items) {
-                    try {
-                        fileItem.delete();
-                    } catch (final Exception ignored) {
-                        // ignored TODO perhaps add to tracker delete failure list somehow?
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Sets the maximum number of files allowed per request.
-     *
-     * @param fileCountMax The new limit. {@code -1} means no limit.
-     */
-    public void setFileCountMax(final long fileCountMax) {
-        this.fileCountMax = fileCountMax;
-    }
-
-    /**
-     * Sets the factory class to use when creating file items.
-     *
-     * @param factory The factory class for new file items.
-     */
-    public abstract void setFileItemFactory(FileItemFactory factory);
-
-    /**
-     * Sets the maximum allowed size of a single uploaded file,
-     * as opposed to {@link #getSizeMax()}.
-     *
-     * @see #getFileSizeMax()
-     * @param fileSizeMax Maximum size of a single uploaded file.
-     */
-    public void setFileSizeMax(final long fileSizeMax) {
-        this.fileSizeMax = fileSizeMax;
-    }
-
-    /**
-     * Specifies the character encoding to be used when reading the headers of
-     * individual part. When not specified, or {@code null}, the request
-     * encoding is used. If that is also not specified, or {@code null},
-     * the platform default encoding is used.
-     *
-     * @param encoding The encoding used to read part headers.
-     */
-    public void setHeaderEncoding(final String encoding) {
-        headerEncoding = encoding;
-    }
-
-    /**
-     * Sets the progress listener.
-     *
-     * @param listener The progress listener, if any. Defaults to null.
-     */
-    public void setProgressListener(final ProgressListener listener) {
-        this.listener = listener;
-    }
-
-    /**
-     * Sets the maximum allowed size of a complete request, as opposed
-     * to {@link #setFileSizeMax(long)}.
-     *
-     * @param sizeMax The maximum allowed size, in bytes. The default value of
-     *   -1 indicates, that there is no limit.
-     * @see #getSizeMax()
-     */
-    public void setSizeMax(final long sizeMax) {
-        this.sizeMax = sizeMax;
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/AbstractRequestContext.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/AbstractRequestContext.java
deleted file mode 100644
index 85b8988822..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/AbstractRequestContext.java
+++ /dev/null
@@ -1,72 +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.wicket.commons.fileupload2;
-
-import java.util.function.Function;
-import java.util.function.LongSupplier;
-
-public abstract class AbstractRequestContext implements RequestContext {
-
-    /**
-     * Supplies the content length default.
-     */
-    private final LongSupplier contentLengthDefault;
-
-    /**
-     * Supplies the content length string.
-     */
-    private final Function<String, String> contentLengthString;
-
-    /**
-     * Constructs a new instance.
-     *
-     * @param contentLengthString  How to get the content length string.
-     * @param contentLengthDefault How to get the content length default.
-     */
-    protected AbstractRequestContext(final Function<String, String> contentLengthString, final LongSupplier contentLengthDefault) {
-        super();
-        this.contentLengthString = contentLengthString;
-        this.contentLengthDefault = contentLengthDefault;
-    }
-
-    /**
-     * Gets the content length of the request.
-     *
-     * @return The content length of the request.
-     * @since 1.3
-     */
-    @Override
-    public long getContentLength() {
-        try {
-            return Long.parseLong(contentLengthString.apply(AbstractFileUpload.CONTENT_LENGTH));
-        } catch (final NumberFormatException e) {
-            return contentLengthDefault.getAsLong();
-        }
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return a string representation of this object.
-     */
-    @Override
-    public String toString() {
-        return String.format("%s [ContentLength=%s, ContentType=%s]", getClass().getSimpleName(), getContentLength(), getContentType());
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItem.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItem.java
deleted file mode 100644
index c6f12bf809..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItem.java
+++ /dev/null
@@ -1,174 +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.wicket.commons.fileupload2;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UncheckedIOException;
-import java.io.UnsupportedEncodingException;
-
-/**
- * <p>
- * 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 org.apache.wicket.commons.fileupload2.FileUpload FileUpload} instance (see
- * {@link org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload
- * #parseRequest(javax.servlet.http.HttpServletRequest)}), you may either request all contents
- * of the file at once using {@link #get()} or request an {@link java.io.InputStream InputStream} with {@link #getInputStream()} and process the file without
- * attempting to load it into memory, which may come handy with large files.
- * </p>
- * <p>
- * While this interface does not extend {@code javax.activation.DataSource} per se (to avoid a seldom used dependency), several of the defined methods are
- * specifically defined with the same signatures as methods in that interface. This allows an implementation of this interface to also implement
- * {@code javax.activation.DataSource} with minimal additional work.
- * </p>
- * @since 1.3 additionally implements FileItemHeadersSupport
- */
-public interface FileItem extends FileItemHeadersSupport {
-
-    /**
-     * Deletes the underlying storage for a file item, including deleting any associated temporary disk file. Although this storage will be deleted
-     * automatically when the {@code FileItem} instance is garbage collected, this method can be used to ensure that this is done at an earlier time, thus
-     * preserving system resources.
-     */
-    void delete();
-
-    /**
-     * Returns the contents of the file item as an array of bytes.
-     *
-     * @return The contents of the file item as an array of bytes.
-     *
-     * @throws UncheckedIOException if an I/O error occurs
-     */
-    byte[] get() throws UncheckedIOException;
-
-    /**
-     * Gets the content type passed by the browser or {@code null} if not defined.
-     *
-     * @return The content type passed by the browser or {@code null} if not defined.
-     */
-    String getContentType();
-
-    /**
-     * Gets the name of the field in the multipart form corresponding to this file item.
-     *
-     * @return The name of the form field.
-     */
-    String getFieldName();
-
-    /**
-     * Gets an {@link java.io.InputStream InputStream} that can be used to retrieve the contents of the file.
-     *
-     * @return An {@link java.io.InputStream InputStream} that can be used to retrieve the contents of the file.
-     *
-     * @throws IOException if an error occurs.
-     */
-    InputStream getInputStream() throws IOException;
-
-    /**
-     * Gets the original file name in the client's file system, as provided by the browser (or other client software). In most cases, this will be the base file
-     * name, without path information. However, some clients, such as the Opera browser, do include path information.
-     *
-     * @return The original file name in the client's file system.
-     * @throws InvalidFileNameException The file name contains a NUL character, which might be an indicator of a security attack. If you intend to use the file
-     *                                  name anyways, catch the exception and use InvalidFileNameException#getName().
-     */
-    String getName();
-
-    /**
-     * Gets an {@link java.io.OutputStream OutputStream} that can be used for storing the contents of the file.
-     *
-     * @return An {@link java.io.OutputStream OutputStream} that can be used for storing the contents of the file.
-     *
-     * @throws IOException if an error occurs.
-     */
-    OutputStream getOutputStream() throws IOException;
-
-    /**
-     * Gets the size of the file item.
-     *
-     * @return The size of the file item, in bytes.
-     */
-    long getSize();
-
-    /**
-     * Gets the contents of the file item as a String, using the default character encoding. This method uses {@link #get()} to retrieve the contents of the
-     * item.
-     *
-     * @return The contents of the item, as a string.
-     */
-    String getString();
-
-    /**
-     * Gets the contents of the file item as a String, using the specified encoding. This method uses {@link #get()} to retrieve the contents of the item.
-     *
-     * @param encoding The character encoding to use.
-     *
-     * @return The contents of the item, as a string.
-     *
-     * @throws UnsupportedEncodingException if the requested character encoding is not available.
-     * @throws IOException                  if an I/O error occurs
-     */
-    String getString(String encoding) throws UnsupportedEncodingException, IOException;
-
-    /**
-     * Tests whether or not a {@code FileItem} instance represents a simple form field.
-     *
-     * @return {@code true} if the instance represents a simple form field; {@code false} if it represents an uploaded file.
-     */
-    boolean isFormField();
-
-    /**
-     * Tests a hint as to whether or not the file contents will be read from memory.
-     *
-     * @return {@code true} if the file contents will be read from memory; {@code false} otherwise.
-     */
-    boolean isInMemory();
-
-    /**
-     * Sets the field name used to reference this file item.
-     *
-     * @param name The name of the form field.
-     */
-    void setFieldName(String name);
-
-    /**
-     * Sets whether or not a {@code FileItem} instance represents a simple form field.
-     *
-     * @param state {@code true} if the instance represents a simple form field; {@code false} if it represents an uploaded file.
-     */
-    void setFormField(boolean state);
-
-    /**
-     * Writes an uploaded item to disk.
-     * <p>
-     * The client code is not concerned with whether or not the item is stored in memory, or on disk in a temporary location. They just want to write the
-     * uploaded item to a file.
-     * </p>
-     * <p>
-     * This method is not guaranteed to succeed if called more than once for the same item. This allows a particular implementation to use, for example, file
-     * renaming, where possible, rather than copying all of the underlying data, thus gaining a significant performance benefit.
-     * </p>
-     * @param file The {@code File} into which the uploaded item should be stored.
-     * @throws IOException if an error occurs.
-     */
-    void write(File file) throws IOException;
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemFactory.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemFactory.java
deleted file mode 100644
index 0c2fda3e2b..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemFactory.java
+++ /dev/null
@@ -1,39 +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.wicket.commons.fileupload2;
-
-/**
- * Creates {@link FileItem} instances.
- * <p>
- * Factories can provide their own custom configuration, over and above that provided by the default file upload implementation.
- * </p>
- */
-public interface FileItemFactory {
-
-    /**
-     * Creates a new {@link FileItem} instance from the supplied parameters and any local factory configuration.
-     *
-     * @param fieldName   The name of the form field.
-     * @param contentType The content type of the form field.
-     * @param isFormField {@code true} if this is a plain form field; {@code false} otherwise.
-     * @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);
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemHeaders.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemHeaders.java
deleted file mode 100644
index b12a183e2e..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemHeaders.java
+++ /dev/null
@@ -1,60 +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.wicket.commons.fileupload2;
-
-import java.util.Iterator;
-
-/**
- * This class provides support for accessing the headers for a file or form item that was received within a {@code multipart/form-data} POST request.
- *
- * @since 1.2.1
- */
-public interface FileItemHeaders {
-
-    /**
-     * Gets the value of the specified part header as a {@code String}.
-     * <p>
-     * If the part did not include a header of the specified name, this method return {@code null}. If there are multiple headers with the same name, this
-     * method returns the first header in the item. The header name is case insensitive.
-     * </p>
-     *
-     * @param name a {@code String} specifying the header name
-     * @return a {@code String} containing the value of the requested header, or {@code null} if the item does not have a header of that name
-     */
-    String getHeader(String name);
-
-    /**
-     * Gets an {@code Iterator} of all the header names.
-     *
-     * @return an {@code Iterator} containing all of the names of headers provided with this file item. If the item does not have any headers return an empty
-     *         {@code Iterator}
-     */
-    Iterator<String> getHeaderNames();
-
-    /**
-     * Gets all the values of the specified item header as an {@code Iterator} of {@code String} objects.
-     * <p>
-     * If the item did not include any headers of the specified name, this method returns an empty {@code Iterator}. The header name is case insensitive.
-     * </p>
-     *
-     * @param name a {@code String} specifying the header name
-     * @return an {@code Iterator} containing the values of the requested header. If the item does not have any headers of that name, return an empty
-     *         {@code Iterator}
-     */
-    Iterator<String> getHeaders(String name);
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemHeadersSupport.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemHeadersSupport.java
deleted file mode 100644
index 43b88bae4a..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemHeadersSupport.java
+++ /dev/null
@@ -1,46 +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.wicket.commons.fileupload2;
-
-/**
- * Accepts headers for an item type.
- *
- * @see FileItem
- * @see FileItemStream
- * @since 1.2.1
- */
-public interface FileItemHeadersSupport {
-
-    /**
-     * Gets the collection of headers defined locally within this item.
-     *
-     * @return the {@link FileItemHeaders} present for this item.
-     */
-    FileItemHeaders getHeaders();
-
-    /**
-     * Sets the headers read from within an item.  Implementations of
-     * {@link FileItem} or {@link FileItemStream} should implement this
-     * interface to be able to get the raw headers found within the item
-     * header block.
-     *
-     * @param headers the instance that holds onto the headers
-     *         for this instance.
-     */
-    void setHeaders(FileItemHeaders headers);
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemIterator.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemIterator.java
deleted file mode 100644
index 5fe356a5ba..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemIterator.java
+++ /dev/null
@@ -1,107 +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.wicket.commons.fileupload2;
-
-import java.io.IOException;
-import java.util.List;
-
-import javax.naming.SizeLimitExceededException;
-
-import org.apache.wicket.commons.fileupload2.pub.FileUploadByteCountLimitException;
-
-/**
- * An iterator, as returned by
- * {@link AbstractFileUpload#getItemIterator(RequestContext)}.
- */
-public interface FileItemIterator {
-
-    List<FileItem> getFileItems() throws FileUploadException, IOException;
-
-    /**
-     * Gets the maximum size of a single file. An {@link FileUploadByteCountLimitException}
-     * will be thrown, if there is an uploaded file, which is exceeding this value.
-     * By default, this value will be copied from the {@link AbstractFileUpload#getFileSizeMax()
-     * FileUploadBase} object, however, the user may replace the default value with a
-     * request specific value by invoking {@link #setFileSizeMax(long)} on this object.
-     * @return The maximum size of a single, uploaded file. The value -1 indicates "unlimited".
-     */
-    long getFileSizeMax();
-
-    /**
-     * Gets the maximum size of the complete HTTP request. A {@link SizeLimitExceededException}
-     * will be thrown, if the HTTP request will exceed this value.
-     * By default, this value will be copied from the {@link AbstractFileUpload#getSizeMax()
-     * FileUploadBase} object, however, the user may replace the default value with a
-     * request specific value by invoking {@link #setSizeMax(long)} on this object.
-     * @return The maximum size of the complete HTTP request. The value -1 indicates "unlimited".
-     */
-    long getSizeMax();
-
-    /**
-     * Tests whether another instance of {@link FileItemStream}
-     * is available.
-     *
-     * @throws FileUploadException Parsing or processing the
-     *   file item failed.
-     * @throws IOException Reading the file item failed.
-     * @return True, if one or more additional file items
-     *   are available, otherwise false.
-     */
-    boolean hasNext() throws FileUploadException, IOException;
-
-    /**
-     * 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
-     *   file item failed.
-     * @throws IOException Reading the file item failed.
-     * @return FileItemStream instance, which provides
-     *   access to the next file item.
-     */
-    FileItemStream next() throws FileUploadException, IOException;
-
-    /**
-     * Sets the maximum size of a single file. An {@link FileUploadByteCountLimitException}
-     * will be thrown, if there is an uploaded file, which is exceeding this value.
-     * By default, this value will be copied from the {@link AbstractFileUpload#getFileSizeMax()
-     * FileUploadBase} object, however, the user may replace the default value with a
-     * request specific value by invoking {@link #setFileSizeMax(long)} on this object, so
-     * there is no need to configure it here.
-     * <p>
-     * <em>Note:</em> Changing this value doesn't affect files, that have already been uploaded.
-     * </p>
-     * @param fileSizeMax The maximum size of a single, uploaded file. The value -1 indicates "unlimited".
-     */
-    void setFileSizeMax(long fileSizeMax);
-
-    /**
-     * Sets the maximum size of the complete HTTP request. A {@link SizeLimitExceededException}
-     * will be thrown, if the HTTP request will exceed this value.
-     * By default, this value will be copied from the {@link AbstractFileUpload#getSizeMax()
-     * FileUploadBase} object, however, the user may replace the default value with a
-     * request specific value by invoking {@link #setSizeMax(long)} on this object.
-     * <p>
-     * <em>Note:</em> Setting the maximum size on this object will work only, if the iterator is not
-     * yet initialized. In other words: If the methods {@link #hasNext()}, {@link #next()} have not
-     * yet been invoked.
-     * </p>
-     * @param sizeMax The maximum size of the complete HTTP request. The value -1 indicates "unlimited".
-     */
-    void setSizeMax(long sizeMax);
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemStream.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemStream.java
deleted file mode 100644
index 09fb49b6e9..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItemStream.java
+++ /dev/null
@@ -1,106 +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.wicket.commons.fileupload2;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Provides access to a file or form item that was
- * received within a {@code multipart/form-data} POST request.
- * <p>
- * The items contents are retrieved by calling {@link #openStream()}.
- * </p>
- * <p>Instances of this class are created by accessing the
- * iterator, returned by
- * {@link AbstractFileUpload#getItemIterator(RequestContext)}.
- * </p>
- * <p><em>Note</em>: There is an interaction between the iterator and
- * its associated instances of {@link FileItemStream}: By invoking
- * {@link java.util.Iterator#hasNext()} on the iterator, you discard all data,
- * which hasn't been read so far from the previous data.
- * </p>
- */
-public interface FileItemStream extends FileItemHeadersSupport {
-
-    /**
-     * This exception is thrown, if an attempt is made to read
-     * data from the {@link InputStream}, which has been returned
-     * by {@link FileItemStream#openStream()}, after
-     * {@link java.util.Iterator#hasNext()} has been invoked on the
-     * iterator, which created the {@link FileItemStream}.
-     */
-    class ItemSkippedException extends IOException {
-
-        /**
-         * The exceptions serial version UID, which is being used
-         * when serializing an exception instance.
-         */
-        private static final long serialVersionUID = 2;
-
-    }
-
-    /**
-     * Gets the content type passed by the browser or {@code null} if
-     * not defined.
-     *
-     * @return The content type passed by the browser or {@code null} if
-     *         not defined.
-     */
-    String getContentType();
-
-    /**
-     * Gets the name of the field in the multipart form corresponding to
-     * this file item.
-     *
-     * @return The name of the form field.
-     */
-    String getFieldName();
-
-    /**
-     * Gets the original file name in the client's file system, as provided by
-     * the browser (or other client software). In most cases, this will be the
-     * base file name, without path information. However, some clients, such as
-     * the Opera browser, do include path information.
-     *
-     * @return The original file name in the client's file system.
-     */
-    String getName();
-
-    /**
-     * Tests whether or not a {@code FileItem} instance represents
-     * a simple form field.
-     *
-     * @return {@code true} if the instance represents a simple form
-     *         field; {@code false} if it represents an uploaded file.
-     */
-    boolean isFormField();
-
-    /**
-     * Opens an {@link InputStream}, which allows to read the
-     * items contents.
-     *
-     * @return The input stream, from which the items data may
-     *   be read.
-     * @throws IllegalStateException The method was already invoked on
-     * this item. It is not possible to recreate the data stream.
-     * @throws IOException An I/O error occurred.
-     * @see ItemSkippedException
-     */
-    InputStream openStream() throws IOException;
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileUpload.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileUpload.java
deleted file mode 100644
index ffa7a79965..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileUpload.java
+++ /dev/null
@@ -1,83 +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.wicket.commons.fileupload2;
-
-/**
- * <p>High level API for processing file uploads.</p>
- *
- * <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 org.apache.wicket.commons.fileupload2.FileItem FileItems} 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>
- */
-public class FileUpload 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;
-    }
-
-    /**
-     * 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/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileUploadException.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileUploadException.java
deleted file mode 100644
index 517302f77d..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileUploadException.java
+++ /dev/null
@@ -1,57 +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.wicket.commons.fileupload2;
-
-import java.io.IOException;
-
-/**
- * Signals errors encountered while processing the request.
- */
-public class FileUploadException extends IOException {
-
-    /**
-     * Serial version UID, being used, if the exception is serialized.
-     */
-    private static final long serialVersionUID = 2;
-
-    /**
-     * Constructs a new instance.
-     */
-    public FileUploadException() {
-    }
-
-    /**
-     * Constructs an instance with a given detail message.
-     *
-     * @param message The detail message (which is saved for later retrieval by the {@link #getMessage()} method)
-     */
-    public FileUploadException(final String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs an instance with the given detail message and cause.
-     *
-     * @param message The detail message (which is saved for later retrieval by the {@link #getMessage()} method)
-     * @param cause   The cause (which is saved for later retrieval by the {@link #getCause()} method). (A null value is permitted, and indicates that the cause
-     *                is nonexistent or unknown.)
-     */
-    public FileUploadException(final String message, final Throwable cause) {
-        super(message, cause);
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/InvalidFileNameException.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/InvalidFileNameException.java
deleted file mode 100644
index 73593f8ab8..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/InvalidFileNameException.java
+++ /dev/null
@@ -1,62 +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.wicket.commons.fileupload2;
-
-/**
- * Signals an invalid file name.
- * A file name is invalid, if it contains a NUL character.
- * Attackers might use this to circumvent security checks:
- * For example, a malicious user might upload a file with the name
- * "foo.exe\0.png". This file name might pass security checks (i.e.
- * checks for the extension ".png"), while, depending on the underlying
- * C library, it might create a file named "foo.exe", as the NUL
- * character is the string terminator in C.
- */
-public class InvalidFileNameException extends RuntimeException {
-
-    /**
-     * Serial version UID, being used, if the exception
-     * is serialized.
-     */
-    private static final long serialVersionUID = 2;
-
-    /**
-     * The file name causing the exception.
-     */
-    private final String name;
-
-    /**
-     * Constructs a new instance.
-     *
-     * @param name The file name causing the exception.
-     * @param message A human readable error message.
-     */
-    public InvalidFileNameException(final String name, final String message) {
-        super(message);
-        this.name = name;
-    }
-
-    /**
-     * Gets the invalid file name.
-     *
-     * @return the invalid file name.
-     */
-    public String getName() {
-        return name;
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/MultipartStream.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/MultipartStream.java
deleted file mode 100644
index 4d0e94c934..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/MultipartStream.java
+++ /dev/null
@@ -1,910 +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.wicket.commons.fileupload2;
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-
-import org.apache.wicket.commons.fileupload2.pub.FileUploadSizeException;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.output.NullOutputStream;
-
-/**
- * Low-level API for processing file uploads.
- *
- * <p>
- * This class can be used to process data streams conforming to MIME 'multipart' format as defined in <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC
- * 1867</a>. Arbitrarily large amounts of data in the stream can be processed under constant memory usage.
- * </p>
- * <p>
- * The format of the stream is defined in the following way:
- * </p>
- * <code>
- *   multipart-body := preamble 1*encapsulation close-delimiter epilogue<br>
- *   encapsulation := delimiter body CRLF<br>
- *   delimiter := "--" boundary CRLF<br>
- *   close-delimiter := "--" boundary "--"<br>
- *   preamble := &lt;ignore&gt;<br>
- *   epilogue := &lt;ignore&gt;<br>
- *   body := header-part CRLF body-part<br>
- *   header-part := 1*header CRLF<br>
- *   header := header-name ":" header-value<br>
- *   header-name := &lt;printable ascii characters except ":"&gt;<br>
- *   header-value := &lt;any ascii characters except CR &amp; LF&gt;<br>
- *   body-data := &lt;arbitrary data&gt;<br>
- * </code>
- *
- * <p>
- * Note that body-data can contain another mulipart entity. There is limited support for single pass processing of such nested streams. The nested stream is
- * <strong>required</strong> to have a boundary token of the same length as the parent stream (see {@link #setBoundary(byte[])}).
- * </p>
- * <p>
- * Here is an example of usage of this class:
- * </p>
- * <pre>
- * try {
- *     MultipartStream multipartStream = new MultipartStream(input, boundary);
- *     boolean nextPart = multipartStream.skipPreamble();
- *     OutputStream output;
- *     while (nextPart) {
- *         String header = multipartStream.readHeaders();
- *         // process headers
- *         // create some output stream
- *         multipartStream.readBodyData(output);
- *         nextPart = multipartStream.readBoundary();
- *     }
- * } catch (MultipartStream.MalformedStreamException e) {
- *     // the stream failed to follow required syntax
- * } catch (IOException e) {
- *     // a read or write error occurred
- * }
- * </pre>
- */
-public class MultipartStream {
-
-    /**
-     * Signals an attempt to set an invalid boundary token.
-     */
-    public static class FileUploadBoundaryException extends FileUploadException {
-
-        /**
-         * The UID to use when serializing this instance.
-         */
-        private static final long serialVersionUID = 2;
-
-        /**
-         * Constructs an instance with the specified detail message.
-         *
-         * @param message The detail message (which is saved for later retrieval by the {@link #getMessage()} method)
-         */
-        public FileUploadBoundaryException(final String message) {
-            super(message);
-        }
-
-    }
-
-    /**
-     * An {@link InputStream} for reading an items contents.
-     */
-    public class ItemInputStream extends InputStream {
-
-        /**
-         * Offset when converting negative bytes to integers.
-         */
-        private static final int BYTE_POSITIVE_OFFSET = 256;
-
-        /**
-         * The number of bytes, which have been read so far.
-         */
-        private long total;
-
-        /**
-         * The number of bytes, which must be hold, because they might be a part of the boundary.
-         */
-        private int pad;
-
-        /**
-         * The current offset in the buffer.
-         */
-        private int pos;
-
-        /**
-         * Whether the stream is already closed.
-         */
-        private boolean closed;
-
-        /**
-         * Creates a new instance.
-         */
-        ItemInputStream() {
-            findSeparator();
-        }
-
-        /**
-         * Returns the number of bytes, which are currently available, without blocking.
-         *
-         * @throws IOException An I/O error occurs.
-         * @return Number of bytes in the buffer.
-         */
-        @Override
-        public int available() throws IOException {
-            if (pos == -1) {
-                return tail - head - pad;
-            }
-            return pos - head;
-        }
-
-        /**
-         * Closes the input stream.
-         *
-         * @throws IOException An I/O error occurred.
-         */
-        @Override
-        public void close() throws IOException {
-            close(false);
-        }
-
-        /**
-         * Closes the input stream.
-         *
-         * @param closeUnderlying Whether to close the underlying stream (hard close)
-         * @throws IOException An I/O error occurred.
-         */
-        public void close(final boolean closeUnderlying) throws IOException {
-            if (closed) {
-                return;
-            }
-            if (closeUnderlying) {
-                closed = true;
-                input.close();
-            } else {
-                for (;;) {
-                    int av = available();
-                    if (av == 0) {
-                        av = makeAvailable();
-                        if (av == 0) {
-                            break;
-                        }
-                    }
-                    skip(av);
-                }
-            }
-            closed = true;
-        }
-
-        /**
-         * Called for finding the separator.
-         */
-        private void findSeparator() {
-            pos = MultipartStream.this.findSeparator();
-            if (pos == -1) {
-                if (tail - head > keepRegion) {
-                    pad = keepRegion;
-                } else {
-                    pad = tail - head;
-                }
-            }
-        }
-
-        /**
-         * Gets the number of bytes, which have been read by the stream.
-         *
-         * @return Number of bytes, which have been read so far.
-         */
-        public long getBytesRead() {
-            return total;
-        }
-
-        public boolean isClosed() {
-            return closed;
-        }
-
-        /**
-         * Attempts to read more data.
-         *
-         * @return Number of available bytes
-         * @throws IOException An I/O error occurred.
-         */
-        private int makeAvailable() throws IOException {
-            if (pos != -1) {
-                return 0;
-            }
-
-            // Move the data to the beginning of the buffer.
-            total += tail - head - pad;
-            System.arraycopy(buffer, tail - pad, buffer, 0, pad);
-
-            // Refill buffer with new data.
-            head = 0;
-            tail = pad;
-
-            for (;;) {
-                final int bytesRead = input.read(buffer, tail, bufSize - tail);
-                if (bytesRead == -1) {
-                    // The last pad amount is left in the buffer.
-                    // Boundary can't be in there so signal an error
-                    // condition.
-                    final String msg = "Stream ended unexpectedly";
-                    throw new MalformedStreamException(msg);
-                }
-                if (notifier != null) {
-                    notifier.noteBytesRead(bytesRead);
-                }
-                tail += bytesRead;
-
-                findSeparator();
-                final int av = available();
-
-                if (av > 0 || pos != -1) {
-                    return av;
-                }
-            }
-        }
-
-        /**
-         * Reads the next byte in the stream.
-         *
-         * @return The next byte in the stream, as a non-negative integer, or -1 for EOF.
-         * @throws IOException An I/O error occurred.
-         */
-        @Override
-        public int read() throws IOException {
-            if (closed) {
-                throw new FileItemStream.ItemSkippedException();
-            }
-            if (available() == 0 && makeAvailable() == 0) {
-                return -1;
-            }
-            ++total;
-            final int b = buffer[head++];
-            if (b >= 0) {
-                return b;
-            }
-            return b + BYTE_POSITIVE_OFFSET;
-        }
-
-        /**
-         * Reads bytes into the given buffer.
-         *
-         * @param b   The destination buffer, where to write to.
-         * @param off Offset of the first byte in the buffer.
-         * @param len Maximum number of bytes to read.
-         * @return Number of bytes, which have been actually read, or -1 for EOF.
-         * @throws IOException An I/O error occurred.
-         */
-        @Override
-        public int read(final byte[] b, final int off, final int len) throws IOException {
-            if (closed) {
-                throw new FileItemStream.ItemSkippedException();
-            }
-            if (len == 0) {
-                return 0;
-            }
-            int res = available();
-            if (res == 0) {
-                res = makeAvailable();
-                if (res == 0) {
-                    return -1;
-                }
-            }
-            res = Math.min(res, len);
-            System.arraycopy(buffer, head, b, off, res);
-            head += res;
-            total += res;
-            return res;
-        }
-
-        /**
-         * Skips the given number of bytes.
-         *
-         * @param bytes Number of bytes to skip.
-         * @return The number of bytes, which have actually been skipped.
-         * @throws IOException An I/O error occurred.
-         */
-        @Override
-        public long skip(final long bytes) throws IOException {
-            if (closed) {
-                throw new FileItemStream.ItemSkippedException();
-            }
-            int av = available();
-            if (av == 0) {
-                av = makeAvailable();
-                if (av == 0) {
-                    return 0;
-                }
-            }
-            final long res = Math.min(av, bytes);
-            head += res;
-            return res;
-        }
-
-    }
-
-    /**
-     * Signals that the input stream fails to follow the required syntax.
-     */
-    public static class MalformedStreamException extends IOException {
-
-        /**
-         * The UID to use when serializing this instance.
-         */
-        private static final long serialVersionUID = 2;
-
-        /**
-         * Constructs an {@code MalformedStreamException} with the specified detail message.
-         *
-         * @param message The detail message.
-         */
-        public MalformedStreamException(final String message) {
-            super(message);
-        }
-
-        /**
-         * Constructs an {@code MalformedStreamException} with the specified detail message.
-         *
-         * @param message The detail message.
-         * @param cause   The cause (which is saved for later retrieval by the {@link #getCause()} method). (A null value is permitted, and indicates that the
-         *                cause is nonexistent or unknown.)
-         */
-        public MalformedStreamException(final String message, final Throwable cause) {
-            super(message, cause);
-        }
-
-    }
-
-    /**
-     * Internal class, which is used to invoke the {@link ProgressListener}.
-     */
-    public static class ProgressNotifier {
-
-        /**
-         * The listener to invoke.
-         */
-        private final ProgressListener progressListener;
-
-        /**
-         * Number of expected bytes, if known, or -1.
-         */
-        private final long contentLength;
-
-        /**
-         * Number of bytes, which have been read so far.
-         */
-        private long bytesRead;
-
-        /**
-         * Number of items, which have been read so far.
-         */
-        private int items;
-
-        /**
-         * Creates a new instance with the given listener and content length.
-         *
-         * @param progressListener      The listener to invoke.
-         * @param contentLength The expected content length.
-         */
-        public ProgressNotifier(final ProgressListener progressListener, final long contentLength) {
-            this.progressListener = progressListener;
-            this.contentLength = contentLength;
-        }
-
-        /**
-         * Called to indicate that bytes have been read.
-         *
-         * @param byteCount Number of bytes, which have been read.
-         */
-        void noteBytesRead(final int byteCount) {
-            /*
-             * Indicates, that the given number of bytes have been read from the input stream.
-             */
-            bytesRead += byteCount;
-            notifyListener();
-        }
-
-        /**
-         * Called to indicate, that a new file item has been detected.
-         */
-        public void noteItem() {
-            ++items;
-            notifyListener();
-        }
-
-        /**
-         * Called for notifying the listener.
-         */
-        private void notifyListener() {
-            if (progressListener != null) {
-                progressListener.update(bytesRead, contentLength, items);
-            }
-        }
-
-    }
-
-    /**
-     * The Carriage Return ASCII character value.
-     */
-    public static final byte CR = 0x0D;
-
-    /**
-     * The Line Feed ASCII character value.
-     */
-    public static final byte LF = 0x0A;
-
-    /**
-     * The dash (-) ASCII character value.
-     */
-    public static final byte DASH = 0x2D;
-
-    /**
-     * The maximum length of {@code header-part} that will be processed (10 kilobytes = 10240 bytes.).
-     */
-    public static final int HEADER_PART_SIZE_MAX = 10240;
-
-    /**
-     * The default length of the buffer used for processing a request.
-     */
-    protected static final int DEFAULT_BUFSIZE = 4096;
-
-    /**
-     * A byte sequence that marks the end of {@code header-part} ({@code CRLFCRLF}).
-     */
-    protected static final byte[] HEADER_SEPARATOR = { CR, LF, CR, LF };
-
-    /**
-     * A byte sequence that that follows a delimiter that will be followed by an encapsulation ({@code CRLF}).
-     */
-    protected static final byte[] FIELD_SEPARATOR = { CR, LF };
-
-    /**
-     * A byte sequence that that follows a delimiter of the last encapsulation in the stream ({@code --}).
-     */
-    protected static final byte[] STREAM_TERMINATOR = { DASH, DASH };
-
-    /**
-     * A byte sequence that precedes a boundary ({@code CRLF--}).
-     */
-    protected static final byte[] BOUNDARY_PREFIX = { CR, LF, DASH, DASH };
-
-    /**
-     * Compares {@code count} first bytes in the arrays {@code a} and {@code b}.
-     *
-     * @param a     The first array to compare.
-     * @param b     The second array to compare.
-     * @param count How many bytes should be compared.
-     * @return {@code true} if {@code count} first bytes in arrays {@code a} and {@code b} are equal.
-     */
-    public static boolean arrayEquals(final byte[] a, final byte[] b, final int count) {
-        for (int i = 0; i < count; i++) {
-            if (a[i] != b[i]) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * The input stream from which data is read.
-     */
-    private final InputStream input;
-
-    /**
-     * The length of the boundary token plus the leading {@code CRLF--}.
-     */
-    private int boundaryLength;
-
-    /**
-     * The amount of data, in bytes, that must be kept in the buffer in order to detect delimiters reliably.
-     */
-    private final int keepRegion;
-
-    /**
-     * The byte sequence that partitions the stream.
-     */
-    private final byte[] boundary;
-
-    /**
-     * The table for Knuth-Morris-Pratt search algorithm.
-     */
-    private final int[] boundaryTable;
-
-    /**
-     * The length of the buffer used for processing the request.
-     */
-    private final int bufSize;
-
-    /**
-     * The buffer used for processing the request.
-     */
-    private final byte[] buffer;
-
-    /**
-     * The index of first valid character in the buffer. <br>
-     * 0 <= head < bufSize
-     */
-    private int head;
-
-    /**
-     * The index of last valid character in the buffer + 1. <br>
-     * 0 <= tail <= bufSize
-     */
-    private int tail;
-
-    /**
-     * The content encoding to use when reading headers.
-     */
-    private String headerEncoding;
-
-    /**
-     * The progress notifier, if any, or null.
-     */
-    private final ProgressNotifier notifier;
-
-
-
-    /**
-     * Constructs a {@code MultipartStream} with a custom size buffer.
-     * <p>
-     * Note that the buffer must be at least big enough to contain the boundary string, plus 4 characters for CR/LF and double dash, plus at least one byte of
-     * data. Too small a buffer size setting will degrade performance.
-     * </p>
-     * @param input     The {@code InputStream} to serve as a data source.
-     * @param boundary  The token used for dividing the stream into {@code encapsulations}.
-     * @param bufferSize   The size of the buffer to be used, in bytes.
-     * @param notifier The notifier, which is used for calling the progress listener, if any.
-     * @throws IllegalArgumentException If the buffer size is too small.
-     * @since 1.3.1
-     */
-    public MultipartStream(final InputStream input, final byte[] boundary, final int bufferSize, final ProgressNotifier notifier) {
-
-        if (boundary == null) {
-            throw new IllegalArgumentException("boundary may not be null");
-        }
-        // We prepend CR/LF to the boundary to chop trailing CR/LF from
-        // body-data tokens.
-        this.boundaryLength = boundary.length + BOUNDARY_PREFIX.length;
-        if (bufferSize < this.boundaryLength + 1) {
-            throw new IllegalArgumentException("The buffer size specified for the MultipartStream is too small");
-        }
-
-        this.input = input;
-        this.bufSize = Math.max(bufferSize, boundaryLength * 2);
-        this.buffer = new byte[this.bufSize];
-        this.notifier = notifier;
-
-        this.boundary = new byte[this.boundaryLength];
-        this.boundaryTable = new int[this.boundaryLength + 1];
-        this.keepRegion = this.boundary.length;
-
-        System.arraycopy(BOUNDARY_PREFIX, 0, this.boundary, 0, BOUNDARY_PREFIX.length);
-        System.arraycopy(boundary, 0, this.boundary, BOUNDARY_PREFIX.length, boundary.length);
-        computeBoundaryTable();
-
-        head = 0;
-        tail = 0;
-    }
-
-    /**
-     * Constructs a {@code MultipartStream} with a default size buffer.
-     *
-     * @param input     The {@code InputStream} to serve as a data source.
-     * @param boundary  The token used for dividing the stream into {@code encapsulations}.
-     * @param progressNotifier An object for calling the progress listener, if any.
-     * @see #MultipartStream(InputStream, byte[], int, ProgressNotifier)
-     */
-    public MultipartStream(final InputStream input, final byte[] boundary, final ProgressNotifier progressNotifier) {
-        this(input, boundary, DEFAULT_BUFSIZE, progressNotifier);
-    }
-
-    /**
-     * Computes the table used for Knuth-Morris-Pratt search algorithm.
-     */
-    private void computeBoundaryTable() {
-        int position = 2;
-        int candidate = 0;
-
-        boundaryTable[0] = -1;
-        boundaryTable[1] = 0;
-
-        while (position <= boundaryLength) {
-            if (boundary[position - 1] == boundary[candidate]) {
-                boundaryTable[position] = candidate + 1;
-                candidate++;
-                position++;
-            } else if (candidate > 0) {
-                candidate = boundaryTable[candidate];
-            } else {
-                boundaryTable[position] = 0;
-                position++;
-            }
-        }
-    }
-
-    /**
-     * Reads {@code body-data} from the current {@code encapsulation} and discards it.
-     * <p>
-     * Use this method to skip encapsulations you don't need or don't understand.
-     * </p>
-     * @return The amount of data discarded.
-     * @throws MalformedStreamException if the stream ends unexpectedly.
-     * @throws IOException              if an i/o error occurs.
-     */
-    public long discardBodyData() throws MalformedStreamException, IOException {
-        return readBodyData(NullOutputStream.NULL_OUTPUT_STREAM);
-    }
-
-    /**
-     * Searches for a byte of specified value in the {@code buffer}, starting at the specified {@code position}.
-     *
-     * @param value The value to find.
-     * @param pos   The starting position for searching.
-     *
-     * @return The position of byte found, counting from beginning of the {@code buffer}, or {@code -1} if not found.
-     */
-    protected int findByte(final byte value, final int pos) {
-        for (int i = pos; i < tail; i++) {
-            if (buffer[i] == value) {
-                return i;
-            }
-        }
-
-        return -1;
-    }
-
-    /**
-     * Searches for the {@code boundary} in the {@code buffer} region delimited by {@code head} and {@code tail}.
-     *
-     * @return The position of the boundary found, counting from the beginning of the {@code buffer}, or {@code -1} if not found.
-     */
-    protected int findSeparator() {
-
-        int bufferPos = this.head;
-        int tablePos = 0;
-
-        while (bufferPos < this.tail) {
-            while (tablePos >= 0 && buffer[bufferPos] != boundary[tablePos]) {
-                tablePos = boundaryTable[tablePos];
-            }
-            bufferPos++;
-            tablePos++;
-            if (tablePos == boundaryLength) {
-                return bufferPos - boundaryLength;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * Gets the character encoding used when reading the headers of an individual part. When not specified, or {@code null}, the platform default encoding
-     * is used.
-     *
-     * @return The encoding used to read part headers.
-     */
-    public String getHeaderEncoding() {
-        return headerEncoding;
-    }
-
-    /**
-     * Creates a new {@link ItemInputStream}.
-     *
-     * @return A new instance of {@link ItemInputStream}.
-     */
-    public ItemInputStream newInputStream() {
-        return new ItemInputStream();
-    }
-
-    /**
-     * Reads {@code body-data} from the current {@code encapsulation} and writes its contents into the output {@code Stream}.
-     * <p>
-     * Arbitrary large amounts of data can be processed by this method using a constant size buffer. (see
-     * {@link #MultipartStream(InputStream,byte[],int, MultipartStream.ProgressNotifier) constructor}).
-     * </p>
-     * @param output The {@code Stream} to write data into. May be null, in which case this method is equivalent to {@link #discardBodyData()}.
-     * @return the amount of data written.
-     * @throws MalformedStreamException if the stream ends unexpectedly.
-     * @throws IOException              if an i/o error occurs.
-     */
-    public long readBodyData(final OutputStream output) throws MalformedStreamException, IOException {
-        try (ItemInputStream inputStream = newInputStream()) {
-            return IOUtils.copyLarge(inputStream, output);
-        }
-    }
-
-    /**
-     * Skips a {@code boundary} token, and checks whether more {@code encapsulations} are contained in the stream.
-     *
-     * @return {@code true} if there are more encapsulations in this stream; {@code false} otherwise.
-     * @throws FileUploadSizeException  if the bytes read from the stream exceeded the size limits
-     * @throws MalformedStreamException if the stream ends unexpectedly or fails to follow required syntax.
-     */
-    public boolean readBoundary() throws FileUploadSizeException, MalformedStreamException {
-        final byte[] marker = new byte[2];
-        final boolean nextChunk;
-
-        head += boundaryLength;
-        try {
-            marker[0] = readByte();
-            if (marker[0] == LF) {
-                // Work around IE5 Mac bug with input type=image.
-                // Because the boundary delimiter, not including the trailing
-                // CRLF, must not appear within any file (RFC 2046, section
-                // 5.1.1), we know the missing CR is due to a buggy browser
-                // rather than a file containing something similar to a
-                // boundary.
-                return true;
-            }
-
-            marker[1] = readByte();
-            if (arrayEquals(marker, STREAM_TERMINATOR, 2)) {
-                nextChunk = false;
-            } else if (arrayEquals(marker, FIELD_SEPARATOR, 2)) {
-                nextChunk = true;
-            } else {
-                throw new MalformedStreamException("Unexpected characters follow a boundary");
-            }
-        } catch (final FileUploadSizeException e) {
-            throw e;
-        } catch (final IOException e) {
-            throw new MalformedStreamException("Stream ended unexpectedly", e);
-        }
-        return nextChunk;
-    }
-
-    /**
-     * Reads a byte from the {@code buffer}, and refills it as necessary.
-     *
-     * @return The next byte from the input stream.
-     * @throws IOException if there is no more data available.
-     */
-    public byte readByte() throws IOException {
-        // Buffer depleted ?
-        if (head == tail) {
-            head = 0;
-            // Refill.
-            tail = input.read(buffer, head, bufSize);
-            if (tail == -1) {
-                // No more data available.
-                throw new IOException("No more data is available");
-            }
-            if (notifier != null) {
-                notifier.noteBytesRead(tail);
-            }
-        }
-        return buffer[head++];
-    }
-
-    /**
-     * Reads the {@code header-part} of the current {@code encapsulation}.
-     * <p>
-     * Headers are returned verbatim to the input stream, including the trailing {@code CRLF} marker. Parsing is left to the application.
-     * </p>
-     * <p>
-     * <strong>TODO</strong> allow limiting maximum header size to protect against abuse.
-     * </p>
-     * @return The {@code header-part} of the current encapsulation.
-     * @throws FileUploadSizeException  if the bytes read from the stream exceeded the size limits.
-     * @throws MalformedStreamException if the stream ends unexpectedly.
-     */
-    public String readHeaders() throws FileUploadSizeException, MalformedStreamException {
-        int i = 0;
-        byte b;
-        // to support multi-byte characters
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        int size = 0;
-        while (i < HEADER_SEPARATOR.length) {
-            try {
-                b = readByte();
-            } catch (final FileUploadSizeException e) {
-                // wraps a FileUploadSizeException, re-throw as it will be unwrapped later
-                throw e;
-            } catch (final IOException e) {
-                throw new MalformedStreamException("Stream ended unexpectedly", e);
-            }
-            if (++size > HEADER_PART_SIZE_MAX) {
-                throw new MalformedStreamException(
-                        String.format("Header section has more than %s bytes (maybe it is not properly terminated)", HEADER_PART_SIZE_MAX));
-            }
-            if (b == HEADER_SEPARATOR[i]) {
-                i++;
-            } else {
-                i = 0;
-            }
-            baos.write(b);
-        }
-
-        String headers;
-        if (headerEncoding != null) {
-            try {
-                headers = baos.toString(headerEncoding);
-            } catch (final UnsupportedEncodingException e) {
-                // Fall back to platform default if specified encoding is not
-                // supported.
-                headers = baos.toString();
-            }
-        } else {
-            headers = baos.toString();
-        }
-
-        return headers;
-    }
-
-    /**
-     * Changes the boundary token used for partitioning the stream.
-     * <p>
-     * This method allows single pass processing of nested multipart streams.
-     * </p>
-     * <p>
-     * The boundary token of the nested stream is {@code required} to be of the same length as the boundary token in parent stream.
-     * </p>
-     * <p>
-     * Restoring the parent stream boundary token after processing of a nested stream is left to the application.
-     * </p>
-     * @param boundary The boundary to be used for parsing of the nested stream.
-     * @throws FileUploadBoundaryException if the {@code boundary} has a different length than the one being currently parsed.
-     */
-    public void setBoundary(final byte[] boundary) throws FileUploadBoundaryException {
-        if (boundary.length != boundaryLength - BOUNDARY_PREFIX.length) {
-            throw new FileUploadBoundaryException("The length of a boundary token cannot be changed");
-        }
-        System.arraycopy(boundary, 0, this.boundary, BOUNDARY_PREFIX.length, boundary.length);
-        computeBoundaryTable();
-    }
-
-    /**
-     * Sets the character encoding to be used when reading the headers of individual parts. When not specified, or {@code null}, the platform default
-     * encoding is used.
-     *
-     * @param encoding The encoding used to read part headers.
-     */
-    public void setHeaderEncoding(final String encoding) {
-        headerEncoding = encoding;
-    }
-
-    /**
-     * Finds the beginning of the first {@code encapsulation}.
-     *
-     * @return {@code true} if an {@code encapsulation} was found in the stream.
-     * @throws IOException if an i/o error occurs.
-     */
-    public boolean skipPreamble() throws IOException {
-        // First delimiter may be not preceded with a CRLF.
-        System.arraycopy(boundary, 2, boundary, 0, boundary.length - 2);
-        boundaryLength = boundary.length - 2;
-        computeBoundaryTable();
-        try {
-            // Discard all data up to the delimiter.
-            discardBodyData();
-
-            // Read boundary - if succeeded, the stream contains an
-            // encapsulation.
-            return readBoundary();
-        } catch (final MalformedStreamException e) {
-            return false;
-        } finally {
-            // Restore delimiter.
-            System.arraycopy(boundary, 0, boundary, 2, boundary.length - 2);
-            boundaryLength = boundary.length;
-            boundary[0] = CR;
-            boundary[1] = LF;
-            computeBoundaryTable();
-        }
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/ParameterParser.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/ParameterParser.java
deleted file mode 100644
index b2ba876fae..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/ParameterParser.java
+++ /dev/null
@@ -1,333 +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.wicket.commons.fileupload2;
-
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.wicket.commons.fileupload2.util.mime.MimeUtility;
-import org.apache.wicket.commons.fileupload2.util.mime.RFC2231Utility;
-
-/**
- * A simple parser intended to parse sequences of name/value pairs.
- * <p>
- * Parameter values are expected to be enclosed in quotes if they
- * contain unsafe characters, such as '=' characters or separators.
- * Parameter values are optional and can be omitted.
- * </p>
- * <p>
- * {@code param1 = value; param2 = "anything goes; really"; param3}
- * </p>
- */
-public class ParameterParser {
-
-    /**
-     * String to be parsed.
-     */
-    private char[] chars = null;
-
-    /**
-     * Current position in the string.
-     */
-    private int pos = 0;
-
-    /**
-     * Maximum position in the string.
-     */
-    private int len = 0;
-
-    /**
-     * Start of a token.
-     */
-    private int i1 = 0;
-
-    /**
-     * End of a token.
-     */
-    private int i2 = 0;
-
-    /**
-     * Whether names stored in the map should be converted to lower case.
-     */
-    private boolean lowerCaseNames = false;
-
-    /**
-     * Default ParameterParser constructor.
-     */
-    public ParameterParser() {
-    }
-
-    /**
-     * A helper method to process the parsed token. This method removes
-     * leading and trailing blanks as well as enclosing quotation marks,
-     * when necessary.
-     *
-     * @param quoted {@code true} if quotation marks are expected,
-     *               {@code false} otherwise.
-     * @return the token
-     */
-    private String getToken(final boolean quoted) {
-        // Trim leading white spaces
-        while ((i1 < i2) && (Character.isWhitespace(chars[i1]))) {
-            i1++;
-        }
-        // Trim trailing white spaces
-        while ((i2 > i1) && (Character.isWhitespace(chars[i2 - 1]))) {
-            i2--;
-        }
-        // Strip away quotation marks if necessary
-        if (quoted
-            && ((i2 - i1) >= 2)
-            && (chars[i1] == '"')
-            && (chars[i2 - 1] == '"')) {
-            i1++;
-            i2--;
-        }
-        String result = null;
-        if (i2 > i1) {
-            result = new String(chars, i1, i2 - i1);
-        }
-        return result;
-    }
-
-    /**
-     * Tests if there any characters left to parse.
-     *
-     * @return {@code true} if there are unparsed characters,
-     *         {@code false} otherwise.
-     */
-    private boolean hasChar() {
-        return this.pos < this.len;
-    }
-
-    /**
-     * Tests {@code true} if parameter names are to be converted to lower
-     * case when name/value pairs are parsed.
-     *
-     * @return {@code true} if parameter names are to be
-     * converted to lower case when name/value pairs are parsed.
-     * Otherwise returns {@code false}
-     */
-    public boolean isLowerCaseNames() {
-        return this.lowerCaseNames;
-    }
-
-    /**
-     * Tests if the given character is present in the array of characters.
-     *
-     * @param ch the character to test for presence in the array of characters
-     * @param charray the array of characters to test against
-     * @return {@code true} if the character is present in the array of
-     *   characters, {@code false} otherwise.
-     */
-    private boolean isOneOf(final char ch, final char[] charray) {
-        boolean result = false;
-        for (final char element : charray) {
-            if (ch == element) {
-                result = true;
-                break;
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Extracts a map of name/value pairs from the given array of
-     * characters. Names are expected to be unique.
-     *
-     * @param charArray the array of characters that contains a sequence of
-     * name/value pairs
-     * @param separator the name/value pairs separator
-     * @return a map of name/value pairs
-     */
-    public Map<String, String> parse(final char[] charArray, final char separator) {
-        if (charArray == null) {
-            return new HashMap<>();
-        }
-        return parse(charArray, 0, charArray.length, separator);
-    }
-
-    /**
-     * Extracts a map of name/value pairs from the given array of
-     * characters. Names are expected to be unique.
-     *
-     * @param charArray the array of characters that contains a sequence of
-     * name/value pairs
-     * @param offset - the initial offset.
-     * @param length - the length.
-     * @param separator the name/value pairs separator
-     * @return a map of name/value pairs
-     */
-    public Map<String, String> parse(
-        final char[] charArray,
-        final int offset,
-        final int length,
-        final char separator) {
-
-        if (charArray == null) {
-            return new HashMap<>();
-        }
-        final HashMap<String, String> params = new HashMap<>();
-        this.chars = charArray.clone();
-        this.pos = offset;
-        this.len = length;
-
-        String paramName;
-        String paramValue;
-        while (hasChar()) {
-            paramName = parseToken(new char[] {
-                    '=', separator });
-            paramValue = null;
-            if (hasChar() && (charArray[pos] == '=')) {
-                pos++; // skip '='
-                paramValue = parseQuotedToken(new char[] {
-                        separator });
-
-                if (paramValue != null) {
-                    try {
-                        paramValue = RFC2231Utility.hasEncodedValue(paramName) ? RFC2231Utility.decodeText(paramValue)
-                                : MimeUtility.decodeText(paramValue);
-                    } catch (final UnsupportedEncodingException e) {
-                        // let's keep the original value in this case
-                    }
-                }
-            }
-            if (hasChar() && (charArray[pos] == separator)) {
-                pos++; // skip separator
-            }
-            if ((paramName != null) && !paramName.isEmpty()) {
-                paramName = RFC2231Utility.stripDelimiter(paramName);
-                if (this.lowerCaseNames) {
-                    paramName = paramName.toLowerCase(Locale.ENGLISH);
-                }
-                params.put(paramName, paramValue);
-            }
-        }
-        return params;
-    }
-
-    /**
-     * Extracts a map of name/value pairs from the given string. Names are
-     * expected to be unique.
-     *
-     * @param str the string that contains a sequence of name/value pairs
-     * @param separator the name/value pairs separator
-     * @return a map of name/value pairs
-     */
-    public Map<String, String> parse(final String str, final char separator) {
-        if (str == null) {
-            return new HashMap<>();
-        }
-        return parse(str.toCharArray(), separator);
-    }
-
-    /**
-     * Extracts a map of name/value pairs from the given string. Names are
-     * expected to be unique. Multiple separators may be specified and
-     * the earliest found in the input string is used.
-     *
-     * @param str the string that contains a sequence of name/value pairs
-     * @param separators the name/value pairs separators
-     * @return a map of name/value pairs
-     */
-    public Map<String, String> parse(final String str, final char[] separators) {
-        if (separators == null || separators.length == 0) {
-            return new HashMap<>();
-        }
-        char separator = separators[0];
-        if (str != null) {
-            int idx = str.length();
-            for (final char separator2 : separators) {
-                final int tmp = str.indexOf(separator2);
-                if (tmp != -1 && tmp < idx) {
-                    idx = tmp;
-                    separator = separator2;
-                }
-            }
-        }
-        return parse(str, separator);
-    }
-
-    /**
-     * Parses out a token until any of the given terminators
-     * is encountered outside the quotation marks.
-     *
-     * @param terminators the array of terminating characters. Any of these
-     * characters when encountered outside the quotation marks signify the end
-     * of the token
-     * @return the token
-     */
-    private String parseQuotedToken(final char[] terminators) {
-        char ch;
-        i1 = pos;
-        i2 = pos;
-        boolean quoted = false;
-        boolean charEscaped = false;
-        while (hasChar()) {
-            ch = chars[pos];
-            if (!quoted && isOneOf(ch, terminators)) {
-                break;
-            }
-            if (!charEscaped && ch == '"') {
-                quoted = !quoted;
-            }
-            charEscaped = (!charEscaped && ch == '\\');
-            i2++;
-            pos++;
-
-        }
-        return getToken(true);
-    }
-
-    /**
-     * Parses out a token until any of the given terminators
-     * is encountered.
-     *
-     * @param terminators the array of terminating characters. Any of these
-     * characters when encountered signify the end of the token
-     * @return the token
-     */
-    private String parseToken(final char[] terminators) {
-        char ch;
-        i1 = pos;
-        i2 = pos;
-        while (hasChar()) {
-            ch = chars[pos];
-            if (isOneOf(ch, terminators)) {
-                break;
-            }
-            i2++;
-            pos++;
-        }
-        return getToken(false);
-    }
-
-    /**
-     * Sets the flag if parameter names are to be converted to lower case when
-     * name/value pairs are parsed.
-     *
-     * @param b {@code true} if parameter names are to be
-     * converted to lower case when name/value pairs are parsed.
-     * {@code false} otherwise.
-     */
-    public void setLowerCaseNames(final boolean b) {
-        this.lowerCaseNames = b;
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/ProgressListener.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/ProgressListener.java
deleted file mode 100644
index 1f9411d013..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/ProgressListener.java
+++ /dev/null
@@ -1,33 +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.wicket.commons.fileupload2;
-
-/**
- * Receives progress information. May be used to display a progress bar.
- */
-public interface ProgressListener {
-
-    /**
-     * Updates the listeners status information.
-     *
-     * @param bytesRead     The total number of bytes, which have been read so far.
-     * @param contentLength The total number of bytes, which are being read. May be -1, if this number is unknown.
-     * @param items         The number of the field, which is currently being read. (0 = no item so far, 1 = first item is being read, ...)
-     */
-    void update(long bytesRead, long contentLength, int items);
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/RequestContext.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/RequestContext.java
deleted file mode 100644
index 6df9311b5e..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/RequestContext.java
+++ /dev/null
@@ -1,62 +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.wicket.commons.fileupload2;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Abstracts access to the request information needed for file uploads.
- * <p>
- * This interface should be implemented for each type of request that may be handled by FileUpload, such as servlets and portlets.
- * </p>
- * @since 1.1
- */
-public interface RequestContext {
-
-    /**
-     * Gets the character encoding for the request.
-     *
-     * @return The character encoding for the request.
-     */
-    String getCharacterEncoding();
-
-    /**
-     * Gets the content length of the request.
-     *
-     * @return The content length of the request.
-     * @since 1.3
-     */
-    long getContentLength();
-
-    /**
-     * Gets the content type of the request.
-     *
-     * @return The content type of the request.
-     */
-    String getContentType();
-
-    /**
-     * Gets the input stream for the request.
-     *
-     * @return The input stream for the request.
-     *
-     * @throws IOException if a problem occurs.
-     */
-    InputStream getInputStream() throws IOException;
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItem.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItem.java
deleted file mode 100644
index 0c8300bd08..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItem.java
+++ /dev/null
@@ -1,619 +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.wicket.commons.fileupload2.disk;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UncheckedIOException;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.wicket.commons.fileupload2.FileItem;
-import org.apache.wicket.commons.fileupload2.FileItemHeaders;
-import org.apache.wicket.commons.fileupload2.FileUploadException;
-import org.apache.wicket.commons.fileupload2.InvalidFileNameException;
-import org.apache.wicket.commons.fileupload2.ParameterParser;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.output.DeferredFileOutputStream;
-
-/**
- * The default implementation of the
- * {@link org.apache.wicket.commons.fileupload2.FileItem FileItem} interface.
- *
- * <p>
- * After retrieving an instance of this class from a {@link
- * DiskFileItemFactory} instance (see
- * {@link org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload
- * #parseRequest(javax.servlet.http.HttpServletRequest)}), you may
- * either request all contents of file at once using {@link #get()} or
- * request an {@link java.io.InputStream InputStream} with
- * {@link #getInputStream()} and process the file without attempting to load
- * it into memory, which may come handy with large files.
- * </p>
- * <p>
- * Temporary files, which are created for file items, should be
- * deleted later on. The best way to do this is using a
- * {@link org.apache.commons.io.FileCleaningTracker}, which you can set on the
- * {@link DiskFileItemFactory}. However, if you do use such a tracker,
- * then you must consider the following: Temporary files are automatically
- * deleted as soon as they are no longer needed. (More precisely, when the
- * corresponding instance of {@link java.io.File} is garbage collected.)
- * This is done by the so-called reaper thread, which is started and stopped
- * automatically by the {@link org.apache.commons.io.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>
- *
- * @since 1.1
- */
-public class DiskFileItem implements FileItem {
-
-    /**
-     * Default content charset to be used when no explicit charset
-     * parameter is provided by the sender. Media subtypes of the
-     * "text" type are defined to have a default charset value of
-     * "ISO-8859-1" when received via HTTP.
-     */
-    public static final String DEFAULT_CHARSET = StandardCharsets.ISO_8859_1.name();
-
-    /**
-     * UID used in unique file name generation.
-     */
-    private static final String UID = UUID.randomUUID().toString().replace('-', '_');
-
-    /**
-     * Counter used in unique identifier generation.
-     */
-    private static final AtomicInteger COUNTER = new AtomicInteger(0);
-
-    /**
-     * Returns an identifier that is unique within the class loader used to
-     * load this class, but does not have random-like appearance.
-     *
-     * @return A String with the non-random looking instance identifier.
-     */
-    private static String getUniqueId() {
-        final int limit = 100000000;
-        final int current = COUNTER.getAndIncrement();
-        String id = Integer.toString(current);
-
-        // If you manage to get more than 100 million of ids, you'll
-        // start getting ids longer than 8 characters.
-        if (current < limit) {
-            id = ("00000000" + id).substring(id.length());
-        }
-        return id;
-    }
-
-    /**
-     * The name of the form field as provided by the browser.
-     */
-    private String fieldName;
-
-    /**
-     * The content type passed by the browser, or {@code null} if
-     * not defined.
-     */
-    private final String contentType;
-
-    /**
-     * Whether or not this item is a simple form field.
-     */
-    private boolean isFormField;
-
-    /**
-     * The original file name in the user's file system.
-     */
-    private final String fileName;
-
-    /**
-     * The size of the item, in bytes. This is used to cache the size when a
-     * file item is moved from its original location.
-     */
-    private long size = -1;
-
-    /**
-     * The threshold above which uploads will be stored on disk.
-     */
-    private final int sizeThreshold;
-
-    /**
-     * The directory in which uploaded files will be stored, if stored on disk.
-     */
-    private final File repository;
-
-    /**
-     * Cached contents of the file.
-     */
-    private byte[] cachedContent;
-
-    /**
-     * Output stream for this item.
-     */
-    private transient DeferredFileOutputStream dfos;
-
-    /**
-     * The temporary file to use.
-     */
-    private transient File tempFile;
-
-    /**
-     * The file items headers.
-     */
-    private FileItemHeaders headers;
-
-    /**
-     * Default content charset to be used when no explicit charset
-     * parameter is provided by the sender.
-     */
-    private String defaultCharset = DEFAULT_CHARSET;
-
-    /**
-     * Constructs a new {@code DiskFileItem} instance.
-     *
-     * @param fieldName     The name of the form field.
-     * @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 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, final File repository) {
-        this.fieldName = fieldName;
-        this.contentType = contentType;
-        this.isFormField = isFormField;
-        this.fileName = fileName;
-        this.sizeThreshold = sizeThreshold;
-        this.repository = repository;
-    }
-
-    /**
-     * Deletes the underlying storage for a file item, including deleting any associated temporary disk file.
-     * This method can be used to ensure that this is done at an earlier time, thus preserving system resources.
-     */
-    @Override
-    public void delete() {
-        cachedContent = null;
-        final File outputFile = getStoreLocation();
-        if (outputFile != null && !isInMemory() && outputFile.exists()) {
-            if (!outputFile.delete()) {
-                final String desc = "Cannot delete " + outputFile.toString();
-                throw new UncheckedIOException(desc, new IOException(desc));
-            }
-        }
-    }
-
-    /**
-     * Gets the contents of the file as an array of bytes.  If the
-     * contents of the file were not yet cached in memory, they will be
-     * loaded from the disk storage and cached.
-     *
-     * @return The contents of the file as an array of bytes
-     * or {@code null} if the data cannot be read
-     * @throws UncheckedIOException if an I/O error occurs
-     */
-    @Override
-    public byte[] get() throws UncheckedIOException {
-        if (isInMemory()) {
-            if (cachedContent == null && dfos != null) {
-                cachedContent = dfos.getData();
-            }
-            return cachedContent != null ? cachedContent.clone() : new byte[0];
-        }
-
-        final byte[] fileData = new byte[(int) getSize()];
-
-        try (InputStream fis = Files.newInputStream(dfos.getFile().toPath())) {
-            IOUtils.readFully(fis, fileData);
-        } catch (final IOException e) {
-            throw new UncheckedIOException(e);
-        }
-        return fileData;
-    }
-
-    /**
-     * Gets the content charset passed by the agent or {@code null} if
-     * not defined.
-     *
-     * @return The content charset passed by the agent or {@code null} if
-     *         not defined.
-     */
-    public String getCharSet() {
-        final ParameterParser parser = new ParameterParser();
-        parser.setLowerCaseNames(true);
-        // Parameter parser can handle null input
-        final Map<String, String> params = parser.parse(getContentType(), ';');
-        return params.get("charset");
-    }
-
-    /**
-     * Gets the content type passed by the agent or {@code null} if
-     * not defined.
-     *
-     * @return The content type passed by the agent or {@code null} if
-     *         not defined.
-     */
-    @Override
-    public String getContentType() {
-        return contentType;
-    }
-
-    /**
-     * Gets the default charset for use when no explicit charset
-     * parameter is provided by the sender.
-     *
-     * @return the default charset
-     */
-    public String getDefaultCharset() {
-        return defaultCharset;
-    }
-
-    /**
-     * Gets the name of the field in the multipart form corresponding to
-     * this file item.
-     *
-     * @return The name of the form field.
-     * @see #setFieldName(String)
-     */
-    @Override
-    public String getFieldName() {
-        return fieldName;
-    }
-
-    /**
-     * Gets the file item headers.
-     *
-     * @return The file items headers.
-     */
-    @Override
-    public FileItemHeaders getHeaders() {
-        return headers;
-    }
-
-    /**
-     * Gets an {@link java.io.InputStream InputStream} that can be
-     * used to retrieve the contents of the file.
-     *
-     * @return An {@link java.io.InputStream InputStream} that can be
-     *         used to retrieve the contents of the file.
-     * @throws IOException if an error occurs.
-     */
-    @Override
-    public InputStream getInputStream()
-        throws IOException {
-        if (!isInMemory()) {
-            return Files.newInputStream(dfos.getFile().toPath());
-        }
-
-        if (cachedContent == null) {
-            cachedContent = dfos.getData();
-        }
-        return new ByteArrayInputStream(cachedContent);
-    }
-
-    /**
-     * Gets the original file name in the client's file system.
-     *
-     * @return The original file name in the client's file system.
-     * @throws org.apache.wicket.commons.fileupload2.InvalidFileNameException The file name contains a NUL character,
-     *   which might be an indicator of a security attack. If you intend to
-     *   use the file name anyways, catch the exception and use
-     *   {@link org.apache.wicket.commons.fileupload2.InvalidFileNameException#getName()}.
-     */
-    @Override
-    public String getName() {
-        return DiskFileItem.checkFileName(fileName);
-    }
-
-    /**
-     * Gets an {@link java.io.OutputStream OutputStream} that can
-     * be used for storing the contents of the file.
-     *
-     * @return An {@link java.io.OutputStream OutputStream} that can be used
-     *         for storing the contents of the file.
-     */
-    @Override
-    public OutputStream getOutputStream() {
-        if (dfos == null) {
-            final File outputFile = getTempFile();
-            dfos = new DeferredFileOutputStream(sizeThreshold, outputFile);
-        }
-        return dfos;
-    }
-
-    /**
-     * Gets the size of the file.
-     *
-     * @return The size of the file, in bytes.
-     */
-    @Override
-    public long getSize() {
-        if (size >= 0) {
-            return size;
-        }
-        if (cachedContent != null) {
-            return cachedContent.length;
-        }
-        if (dfos.isInMemory()) {
-            return dfos.getData().length;
-        }
-        return dfos.getFile().length();
-    }
-
-    /**
-     * Gets the {@link java.io.File} object for the {@code FileItem}'s
-     * data's temporary location on the disk. Note that for
-     * {@code FileItem}s that have their data stored in memory,
-     * this method will return {@code null}. When handling large
-     * files, you can use {@link java.io.File#renameTo(java.io.File)} to
-     * move the file to new location without copying the data, if the
-     * source and destination locations reside within the same logical
-     * volume.
-     *
-     * @return The data file, or {@code null} if the data is stored in
-     *         memory.
-     */
-    public File getStoreLocation() {
-        if (dfos == null) {
-            return null;
-        }
-        if (isInMemory()) {
-            return null;
-        }
-        return dfos.getFile();
-    }
-
-    /**
-     * Gets the contents of the file as a String, using the default
-     * character encoding.  This method uses {@link #get()} to retrieve the
-     * contents of the file.
-     * <p>
-     * <b>TODO</b> Consider making this method throw UnsupportedEncodingException.
-     * </p>
-     * @return The contents of the file, as a string.
-     */
-    @Override
-    public String getString() {
-        try {
-            final byte[] rawData = get();
-            String charset = getCharSet();
-            if (charset == null) {
-                charset = defaultCharset;
-            }
-            return new String(rawData, charset);
-        } catch (final IOException e) {
-            return "";
-        }
-    }
-
-    /**
-     * Gets the contents of the file as a String, using the specified
-     * encoding.  This method uses {@link #get()} to retrieve the
-     * contents of the file.
-     *
-     * @param charset The charset to use.
-     * @return The contents of the file, as a string.
-     * @throws UnsupportedEncodingException if the requested character
-     *                                      encoding is not available.
-     */
-    @Override
-    public String getString(final String charset)
-        throws UnsupportedEncodingException, IOException {
-        return new String(get(), charset);
-    }
-
-    /**
-     * 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} instance;
-     * the file will be deleted when the instance is garbage collected.
-     * <p>
-     * <b>Note: Subclasses that override this method must ensure that they return the
-     * same File each time.</b>
-     * </p>
-     * @return The {@link java.io.File File} to be used for temporary storage.
-     */
-    protected File getTempFile() {
-        if (tempFile == null) {
-            File tempDir = repository;
-            if (tempDir == null) {
-                tempDir = FileUtils.getTempDirectory();
-            }
-            final String tempFileName = String.format("upload_%s_%s.tmp", UID, getUniqueId());
-            tempFile = new File(tempDir, tempFileName);
-        }
-        return tempFile;
-    }
-
-    /**
-     * Tests whether or not a {@code FileItem} instance represents
-     * a simple form field.
-     *
-     * @return {@code true} if the instance represents a simple form
-     *         field; {@code false} if it represents an uploaded file.
-     * @see #setFormField(boolean)
-     */
-    @Override
-    public boolean isFormField() {
-        return isFormField;
-    }
-
-    /**
-     * Provides a hint as to whether or not the file contents will be read
-     * from memory.
-     *
-     * @return {@code true} if the file contents will be read
-     *         from memory; {@code false} otherwise.
-     */
-    @Override
-    public boolean isInMemory() {
-        if (cachedContent != null) {
-            return true;
-        }
-        return dfos.isInMemory();
-    }
-
-    /**
-     * Sets the default charset for use when no explicit charset
-     * parameter is provided by the sender.
-     *
-     * @param charset the default charset
-     */
-    public void setDefaultCharset(final String charset) {
-        defaultCharset = charset;
-    }
-
-    /**
-     * Sets the field name used to reference this file item.
-     *
-     * @param fieldName The name of the form field.
-     * @see #getFieldName()
-     */
-    @Override
-    public void setFieldName(final String fieldName) {
-        this.fieldName = fieldName;
-    }
-
-    /**
-     * Specifies whether or not a {@code FileItem} instance represents
-     * a simple form field.
-     *
-     * @param state {@code true} if the instance represents a simple form
-     *              field; {@code false} if it represents an uploaded file.
-     * @see #isFormField()
-     */
-    @Override
-    public void setFormField(final boolean state) {
-        isFormField = state;
-    }
-
-    /**
-     * Sets the file item headers.
-     *
-     * @param headers The file items headers.
-     */
-    @Override
-    public void setHeaders(final FileItemHeaders headers) {
-        this.headers = headers;
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return a string representation of this object.
-     */
-    @Override
-    public String toString() {
-        return String.format("name=%s, StoreLocation=%s, size=%s bytes, isFormField=%s, FieldName=%s", getName(), getStoreLocation(), getSize(), isFormField(),
-                getFieldName());
-    }
-
-    /**
-     * Writes an uploaded item to disk.
-     * <p>
-     * The client code is not concerned with whether or not the item is stored in memory, or on disk in a temporary location. They just want to write the
-     * uploaded item to a file.
-     * </p>
-     * <p>
-     * This implementation first attempts to rename the uploaded item to the specified destination file, if the item was originally written to disk. Otherwise,
-     * the data will be copied to the specified file.
-     * </p>
-     * <p>
-     * This method is only guaranteed to work <em>once</em>, the first time it is invoked for a particular item. This is because, in the event that the method
-     * renames a temporary file, that file will no longer be available to copy or rename again at a later time.
-     * </p>
-     * @param file The {@code File} into which the uploaded item should be stored.
-     * @throws IOException if an error occurs.
-     */
-    @Override
-    public void write(final File file) throws IOException {
-        if (isInMemory()) {
-            try (OutputStream fout = Files.newOutputStream(file.toPath())) {
-                fout.write(get());
-            } catch (final IOException e) {
-                throw new IOException("Unexpected output data", e);
-            }
-        } else {
-            final File outputFile = getStoreLocation();
-            if (outputFile == null) {
-                /*
-                 * For whatever reason we cannot write the file to disk.
-                 */
-                throw new FileUploadException("Cannot write uploaded file to disk.");
-            }
-            // Save the length of the file
-            size = outputFile.length();
-            /*
-             * The uploaded file is being stored on disk in a temporary location so move it to the desired file.
-             */
-            if (file.exists() && !file.delete()) {
-                throw new FileUploadException("Cannot write uploaded file to disk.");
-            }
-            FileUtils.moveFile(outputFile, file);
-        }
-    }
-
-    /**
-     * Checks, whether the given file name is valid in the sense,
-     * that it doesn't contain any NUL characters. If the file name
-     * is valid, it will be returned without any modifications. Otherwise,
-     * an {@link InvalidFileNameException} is raised.
-     *
-     * @param fileName The file name to check
-     * @return Unmodified file name, if valid.
-     * @throws InvalidFileNameException The file name was found to be invalid.
-     */
-    public static String checkFileName(final String fileName) {
-        if (fileName != null  &&  fileName.indexOf('\u0000') != -1) {
-            // fileName.replace("\u0000", "\\0")
-            final StringBuilder sb = new StringBuilder();
-            for (int i = 0;  i < fileName.length();  i++) {
-                final char c = fileName.charAt(i);
-                switch (c) {
-                    case 0:
-                        sb.append("\\0");
-                        break;
-                    default:
-                        sb.append(c);
-                        break;
-                }
-            }
-            throw new InvalidFileNameException(fileName,
-                    "Invalid file name: " + sb);
-        }
-        return fileName;
-    }
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItemFactory.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItemFactory.java
deleted file mode 100644
index e7bc14f933..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItemFactory.java
+++ /dev/null
@@ -1,240 +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.wicket.commons.fileupload2.disk;
-
-import java.io.File;
-
-import org.apache.wicket.commons.fileupload2.FileItem;
-import org.apache.wicket.commons.fileupload2.FileItemFactory;
-import org.apache.commons.io.FileCleaningTracker;
-
-/**
- * The default {@link org.apache.wicket.commons.fileupload2.FileItemFactory}
- * implementation.
- * <p>
- * This implementation creates
- * {@link org.apache.wicket.commons.fileupload2.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>
- * <p>
- * 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>
- * </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
- * 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(File)} MUST be used to configure a repository location
- * that is not publicly writable. In a Servlet container the location identified
- * by the ServletContext attribute {@code javax.servlet.context.tempdir}
- * may be used.
- * </p>
- * <p>
- * Temporary files, which are created for file items, should be
- * deleted later on. The best way to do this is using a
- * {@link FileCleaningTracker}, which you can set on the
- * {@link DiskFileItemFactory}. However, if you do use such a tracker,
- * then you must consider the following: Temporary files are automatically
- * deleted as soon as they are no longer needed. (More precisely, when the
- * corresponding instance of {@link java.io.File} is garbage collected.)
- * This is done by 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>
- *
- * @since 1.1
- */
-public class DiskFileItemFactory implements FileItemFactory {
-
-    /**
-     * The default threshold above which uploads will be stored on disk.
-     */
-    public static final int DEFAULT_SIZE_THRESHOLD = 10240;
-
-    /**
-     * The directory in which uploaded files will be stored, if stored on disk.
-     */
-    private File repository;
-
-    /**
-     * The threshold above which uploads will be stored on disk.
-     */
-    private int sizeThreshold = DEFAULT_SIZE_THRESHOLD;
-
-    /**
-     * The instance of {@link FileCleaningTracker}, which is responsible
-     * for deleting temporary files.
-     * <p>
-     * May be null, if tracking files is not required.
-     * </p>
-     */
-    private FileCleaningTracker fileCleaningTracker;
-
-    /**
-     * Default content charset to be used when no explicit charset
-     * parameter is provided by the sender.
-     */
-    private String 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.
-     */
-    public DiskFileItemFactory(final int sizeThreshold, final File repository) {
-        this.sizeThreshold = sizeThreshold;
-        this.repository = repository;
-    }
-
-    /**
-     * Creates a new {@link org.apache.wicket.commons.fileupload2.disk.DiskFileItem}
-     * instance from the supplied parameters and the local factory
-     * configuration.
-     *
-     * @param fieldName   The name of the form field.
-     * @param contentType The content type of the form field.
-     * @param isFormField {@code true} if this is a plain form field;
-     *                    {@code false} otherwise.
-     * @param fileName    The name of the uploaded file, if any, as supplied
-     *                    by the browser or other client.
-     * @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);
-        result.setDefaultCharset(defaultCharset);
-        final FileCleaningTracker tracker = getFileCleaningTracker();
-        if (tracker != null) {
-            tracker.track(result.getTempFile(), result);
-        }
-        return result;
-    }
-
-    /**
-     * Gets the default charset for use when no explicit charset
-     * parameter is provided by the sender.
-     *
-     * @return the default charset
-     */
-    public String getDefaultCharset() {
-        return defaultCharset;
-    }
-
-    /**
-     * Gets the tracker, which is responsible for deleting temporary
-     * files.
-     *
-     * @return An instance of {@link FileCleaningTracker}, or null
-     *   (default), if temporary files aren't tracked.
-     */
-    public FileCleaningTracker getFileCleaningTracker() {
-        return fileCleaningTracker;
-    }
-
-    /**
-     * Gets the directory used to temporarily store files that are larger
-     * than the configured size threshold.
-     *
-     * @return The directory in which temporary files will be located.
-     * @see #setRepository(java.io.File)
-     */
-    public File getRepository() {
-        return repository;
-    }
-
-    /**
-     * Gets the size threshold beyond which files are written directly to
-     * disk. The default value is 10240 bytes.
-     *
-     * @return The size threshold, in bytes.
-     * @see #setSizeThreshold(int)
-     */
-    public int getSizeThreshold() {
-        return sizeThreshold;
-    }
-
-    /**
-     * Sets the default charset for use when no explicit charset
-     * parameter is provided by the sender.
-     * @param charset the default charset
-     */
-    public void setDefaultCharset(final String charset) {
-        defaultCharset = charset;
-    }
-
-    /**
-     * Sets the tracker, which is responsible for deleting temporary
-     * files.
-     *
-     * @param tracker An instance of {@link FileCleaningTracker},
-     *   which will from now on track the created files, or null
-     *   (default), to disable tracking.
-     */
-    public void setFileCleaningTracker(final FileCleaningTracker tracker) {
-        fileCleaningTracker = tracker;
-    }
-
-    /**
-     * Sets the directory used to temporarily store files that are larger
-     * than the configured size threshold.
-     *
-     * @param repository The directory in which temporary files will be located.
-     * @see #getRepository()
-     */
-    public void setRepository(final File repository) {
-        this.repository = repository;
-    }
-
-    /**
-     * Sets the size threshold beyond which files are written directly to disk.
-     *
-     * @param sizeThreshold The size threshold, in bytes.
-     * @see #getSizeThreshold()
-     */
-    public void setSizeThreshold(final int sizeThreshold) {
-        this.sizeThreshold = sizeThreshold;
-    }
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/package-info.java
deleted file mode 100644
index 0276bc1881..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/package-info.java
+++ /dev/null
@@ -1,52 +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.
- */
-
-/**
- *    <p>
- *      A disk-based implementation of the
- *      {@link org.apache.wicket.commons.fileupload2.FileItem FileItem}
- *      interface. This implementation retains smaller items in memory, while
- *      writing larger ones to disk. The threshold between these two is
- *      configurable, as is the location of files that are written to disk.
- *    </p>
- *    <p>
- *      In typical usage, an instance of
- *      {@link org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory DiskFileItemFactory}
- *      would be created, configured, and then passed to a
- *      {@link org.apache.wicket.commons.fileupload2.FileUpload FileUpload}
- *      implementation such as
- *      {@link org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload ServletFileUpload}
- *    </p>
- *    <p>
- *      The following code fragment demonstrates this usage.
- *    </p>
- * <pre>
- *        DiskFileItemFactory factory = new DiskFileItemFactory();
- *        // maximum size that will be stored in memory
- *        factory.setSizeThreshold(4096);
- *        // the location for saving data that is larger than getSizeThreshold()
- *        factory.setRepository(new File("/tmp"));
- *
- *        ServletFileUpload upload = new ServletFileUpload(factory);
- * </pre>
- *    <p>
- *      Please see the FileUpload
- *      <a href="https://commons.apache.org/fileupload/using.html" target="_top">User Guide</a>
- *      for further details and examples of how to use this package.
- *    </p>
- */
-package org.apache.wicket.commons.fileupload2.disk;
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/FileItemIteratorImpl.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/FileItemIteratorImpl.java
deleted file mode 100644
index aefb7d2602..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/FileItemIteratorImpl.java
+++ /dev/null
@@ -1,332 +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.wicket.commons.fileupload2.impl;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.NoSuchElementException;
-import java.util.Objects;
-
-import org.apache.wicket.commons.fileupload2.AbstractFileUpload;
-import org.apache.wicket.commons.fileupload2.FileItem;
-import org.apache.wicket.commons.fileupload2.FileItemHeaders;
-import org.apache.wicket.commons.fileupload2.FileItemIterator;
-import org.apache.wicket.commons.fileupload2.FileItemStream;
-import org.apache.wicket.commons.fileupload2.FileUploadException;
-import org.apache.wicket.commons.fileupload2.MultipartStream;
-import org.apache.wicket.commons.fileupload2.ProgressListener;
-import org.apache.wicket.commons.fileupload2.RequestContext;
-import org.apache.wicket.commons.fileupload2.pub.FileUploadContentTypeException;
-import org.apache.wicket.commons.fileupload2.pub.FileUploadSizeException;
-import org.apache.wicket.commons.fileupload2.util.LimitedInputStream;
-import org.apache.commons.io.IOUtils;
-
-/**
- * The iterator, which is returned by {@link AbstractFileUpload#getItemIterator(RequestContext)}.
- */
-public class FileItemIteratorImpl implements FileItemIterator {
-
-    /**
-     * The file uploads processing utility.
-     *
-     * @see AbstractFileUpload
-     */
-    private final AbstractFileUpload fileUploadBase;
-
-    /**
-     * The request context.
-     *
-     * @see RequestContext
-     */
-    private final RequestContext ctx;
-
-    /**
-     * The maximum allowed size of a complete request.
-     */
-    private long sizeMax;
-
-    /**
-     * The maximum allowed size of a single uploaded file.
-     */
-    private long fileSizeMax;
-
-    /**
-     * The multi part stream to process.
-     */
-    private MultipartStream multiPartStream;
-
-    /**
-     * The notifier, which used for triggering the {@link ProgressListener}.
-     */
-    private MultipartStream.ProgressNotifier progressNotifier;
-
-    /**
-     * The boundary, which separates the various parts.
-     */
-    private byte[] multiPartBoundary;
-
-    /**
-     * 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.
-     */
-    private boolean eof;
-
-    /**
-     * Constructs a new instance.
-     *
-     * @param fileUploadBase Main processor.
-     * @param requestContext The request context.
-     * @throws FileUploadException An error occurred while parsing the request.
-     * @throws IOException         An I/O error occurred.
-     */
-    public FileItemIteratorImpl(final AbstractFileUpload fileUploadBase, final RequestContext requestContext) throws FileUploadException, IOException {
-        this.fileUploadBase = fileUploadBase;
-        this.sizeMax = fileUploadBase.getSizeMax();
-        this.fileSizeMax = fileUploadBase.getFileSizeMax();
-        this.ctx = Objects.requireNonNull(requestContext, "requestContext");
-        this.skipPreamble = true;
-        findNextItem();
-    }
-
-    /**
-     * Finds the next item, if any.
-     *
-     * @return True, if an next item was found, otherwise false.
-     * @throws IOException An I/O error occurred.
-     */
-    private boolean findNextItem() throws FileUploadException, IOException {
-        if (eof) {
-            return false;
-        }
-        if (currentItem != null) {
-            currentItem.close();
-            currentItem = null;
-        }
-        final MultipartStream multi = getMultiPartStream();
-        for (;;) {
-            final boolean nextPart;
-            if (skipPreamble) {
-                nextPart = multi.skipPreamble();
-            } else {
-                nextPart = multi.readBoundary();
-            }
-            if (!nextPart) {
-                if (currentFieldName == null) {
-                    // Outer multipart terminated -> No more data
-                    eof = true;
-                    return false;
-                }
-                // Inner multipart terminated -> Return to parsing the outer
-                multi.setBoundary(multiPartBoundary);
-                currentFieldName = null;
-                continue;
-            }
-            final FileItemHeaders headers = fileUploadBase.getParsedHeaders(multi.readHeaders());
-            if (currentFieldName == null) {
-                // We're parsing the outer multipart
-                final String fieldName = fileUploadBase.getFieldName(headers);
-                if (fieldName != null) {
-                    final String subContentType = headers.getHeader(AbstractFileUpload.CONTENT_TYPE);
-                    if (subContentType != null && subContentType.toLowerCase(Locale.ENGLISH).startsWith(AbstractFileUpload.MULTIPART_MIXED)) {
-                        currentFieldName = fieldName;
-                        // Multiple files associated with this field name
-                        final byte[] subBoundary = fileUploadBase.getBoundary(subContentType);
-                        multi.setBoundary(subBoundary);
-                        skipPreamble = true;
-                        continue;
-                    }
-                    final String fileName = fileUploadBase.getFileName(headers);
-                    currentItem = new FileItemStreamImpl(this, fileName, fieldName, headers.getHeader(AbstractFileUpload.CONTENT_TYPE), fileName == null,
-                            getContentLength(headers));
-                    currentItem.setHeaders(headers);
-                    progressNotifier.noteItem();
-                    itemValid = true;
-                    return true;
-                }
-            } else {
-                final String fileName = fileUploadBase.getFileName(headers);
-                if (fileName != null) {
-                    currentItem = new FileItemStreamImpl(this, fileName, currentFieldName, headers.getHeader(AbstractFileUpload.CONTENT_TYPE), false,
-                            getContentLength(headers));
-                    currentItem.setHeaders(headers);
-                    progressNotifier.noteItem();
-                    itemValid = true;
-                    return true;
-                }
-            }
-            multi.discardBodyData();
-        }
-    }
-
-    private long getContentLength(final FileItemHeaders headers) {
-        try {
-            return Long.parseLong(headers.getHeader(AbstractFileUpload.CONTENT_LENGTH));
-        } catch (final Exception e) {
-            return -1;
-        }
-    }
-
-    @Override
-    public List<FileItem> getFileItems() throws FileUploadException, IOException {
-        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()));
-        }
-        return items;
-    }
-
-    @Override
-    public long getFileSizeMax() {
-        return fileSizeMax;
-    }
-
-    public MultipartStream getMultiPartStream() throws FileUploadException, IOException {
-        if (multiPartStream == null) {
-            init(fileUploadBase, ctx);
-        }
-        return multiPartStream;
-    }
-
-    @Override
-    public long getSizeMax() {
-        return sizeMax;
-    }
-
-    /**
-     * Tests whether another instance of {@link FileItemStream} is available.
-     *
-     * @throws FileUploadException Parsing or processing the file item failed.
-     * @throws IOException         Reading the file item failed.
-     * @return True, if one or more additional file items are available, otherwise false.
-     */
-    @Override
-    public boolean hasNext() throws FileUploadException, IOException {
-        if (eof) {
-            return false;
-        }
-        if (itemValid) {
-            return true;
-        }
-        return findNextItem();
-    }
-
-    protected void init(final AbstractFileUpload fileUploadBase, final RequestContext requestContext) throws FileUploadException, IOException {
-        final String contentType = ctx.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",
-                    AbstractFileUpload.MULTIPART_FORM_DATA, AbstractFileUpload.MULTIPART_MIXED, contentType), contentType);
-        }
-        final long contentLengthInt = ctx.getContentLength();
-        // @formatter:off
-        final long requestSize = RequestContext.class.isAssignableFrom(ctx.getClass())
-                                 // Inline conditional is OK here CHECKSTYLE:OFF
-                                 ? ctx.getContentLength()
-                                 : contentLengthInt;
-                                 // CHECKSTYLE:ON
-        // @formatter:on
-        final InputStream input; // N.B. this is eventually closed in MultipartStream processing
-        if (sizeMax >= 0) {
-            if (requestSize != -1 && requestSize > sizeMax) {
-                throw new FileUploadSizeException(
-                        String.format("the request was rejected because its size (%s) exceeds the configured maximum (%s)", requestSize, sizeMax), sizeMax,
-                        requestSize);
-            }
-            // N.B. this is eventually closed in MultipartStream processing
-            input = new LimitedInputStream(ctx.getInputStream(), sizeMax) {
-                @Override
-                protected void raiseError(final long maxLen, final long count) throws IOException {
-                    throw new FileUploadSizeException(
-                            String.format("The request was rejected because its size (%s) exceeds the configured maximum (%s)", count, maxLen), maxLen, count);
-                }
-            };
-        } else {
-            input = ctx.getInputStream();
-        }
-
-        String charEncoding = fileUploadBase.getHeaderEncoding();
-        if (charEncoding == null) {
-            charEncoding = ctx.getCharacterEncoding();
-        }
-
-        multiPartBoundary = fileUploadBase.getBoundary(contentType);
-        if (multiPartBoundary == null) {
-            IOUtils.closeQuietly(input); // avoid possible resource leak
-            throw new FileUploadException("the request was rejected because no multipart boundary was found");
-        }
-
-        progressNotifier = new MultipartStream.ProgressNotifier(fileUploadBase.getProgressListener(), requestSize);
-        try {
-            multiPartStream = new MultipartStream(input, multiPartBoundary, progressNotifier);
-        } catch (final IllegalArgumentException e) {
-            IOUtils.closeQuietly(input); // avoid possible resource leak
-            throw new FileUploadContentTypeException(String.format("The boundary specified in the %s header is too long", AbstractFileUpload.CONTENT_TYPE), e);
-        }
-        multiPartStream.setHeaderEncoding(charEncoding);
-    }
-
-    /**
-     * 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 file item failed.
-     * @throws IOException                      Reading the file item failed.
-     * @return FileItemStream instance, which provides access to the next file item.
-     */
-    @Override
-    public FileItemStream next() throws FileUploadException, IOException {
-        if (eof || (!itemValid && !hasNext())) {
-            throw new NoSuchElementException();
-        }
-        itemValid = false;
-        return currentItem;
-    }
-
-    @Override
-    public void setFileSizeMax(final long fileSizeMax) {
-        this.fileSizeMax = fileSizeMax;
-    }
-
-    @Override
-    public void setSizeMax(final long sizeMax) {
-        this.sizeMax = sizeMax;
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/FileItemStreamImpl.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/FileItemStreamImpl.java
deleted file mode 100644
index 4fdf3fc756..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/FileItemStreamImpl.java
+++ /dev/null
@@ -1,206 +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.wicket.commons.fileupload2.impl;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.wicket.commons.fileupload2.FileItemHeaders;
-import org.apache.wicket.commons.fileupload2.FileItemStream;
-import org.apache.wicket.commons.fileupload2.FileUploadException;
-import org.apache.wicket.commons.fileupload2.InvalidFileNameException;
-import org.apache.wicket.commons.fileupload2.MultipartStream.ItemInputStream;
-import org.apache.wicket.commons.fileupload2.disk.DiskFileItem;
-import org.apache.wicket.commons.fileupload2.pub.FileUploadByteCountLimitException;
-import org.apache.wicket.commons.fileupload2.util.LimitedInputStream;
-
-/**
- * Default implementation of {@link FileItemStream}.
- */
-public class FileItemStreamImpl implements FileItemStream {
-
-    /**
-     * The File Item iterator implementation.
-     *
-     * @see FileItemIteratorImpl
-     */
-    private final FileItemIteratorImpl fileItemIteratorImpl;
-
-    /**
-     * The file items content type.
-     */
-    private final String contentType;
-
-    /**
-     * The file items field name.
-     */
-    private final String fieldName;
-
-    /**
-     * The file items file name.
-     */
-    private final String fileName;
-
-    /**
-     * Whether the file item is a form field.
-     */
-    private final boolean formField;
-
-    /**
-     * The file items input stream.
-     */
-    private final InputStream inputStream;
-
-    /**
-     * The file items input stream closed flag.
-     */
-    private boolean inputStreamClosed;
-
-    /**
-     * The headers, if any.
-     */
-    private FileItemHeaders headers;
-
-    /**
-     * Creates a new instance.
-     *
-     * @param fileItemIterator The {@link FileItemIteratorImpl iterator}, which returned this file item.
-     * @param fileName             The items file name, or null.
-     * @param fieldName        The items field name.
-     * @param contentType      The items content type, or null.
-     * @param formField        Whether the item is a form field.
-     * @param contentLength    The items content length, if known, or -1
-     * @throws IOException         Creating the file item failed.
-     * @throws FileUploadException Parsing the incoming data stream failed.
-     */
-    public FileItemStreamImpl(final FileItemIteratorImpl fileItemIterator, final String fileName, final String fieldName, final String contentType,
-            final boolean formField, final long contentLength) throws FileUploadException, IOException {
-        this.fileItemIteratorImpl = fileItemIterator;
-        this.fileName = fileName;
-        this.fieldName = fieldName;
-        this.contentType = contentType;
-        this.formField = formField;
-        final long fileSizeMax = fileItemIteratorImpl.getFileSizeMax();
-        if (fileSizeMax != -1 && contentLength != -1 && contentLength > fileSizeMax) {
-            throw new FileUploadByteCountLimitException(String.format("The field %s exceeds its maximum permitted size of %s bytes.", fieldName, fileSizeMax),
-                    contentLength, fileSizeMax, fileName, fieldName);
-        }
-        // OK to construct stream now
-        final ItemInputStream itemInputStream = fileItemIteratorImpl.getMultiPartStream().newInputStream();
-        InputStream istream = itemInputStream;
-        if (fileSizeMax != -1) {
-            istream = new LimitedInputStream(istream, fileSizeMax) {
-                @Override
-                protected void raiseError(final long sizeMax, final long count) throws IOException {
-                    itemInputStream.close(true);
-                    throw new FileUploadByteCountLimitException(
-                            String.format("The field %s exceeds its maximum permitted size of %s bytes.", fieldName, sizeMax), count, sizeMax, fileName,
-                            fieldName);
-                }
-            };
-        }
-        this.inputStream = istream;
-    }
-
-    /**
-     * Closes the file item.
-     *
-     * @throws IOException An I/O error occurred.
-     */
-    public void close() throws IOException {
-        inputStream.close();
-        inputStreamClosed = true;
-    }
-
-    /**
-     * Gets the items content type, or null.
-     *
-     * @return Content type, if known, or null.
-     */
-    @Override
-    public String getContentType() {
-        return contentType;
-    }
-
-    /**
-     * Gets the items field name.
-     *
-     * @return Field name.
-     */
-    @Override
-    public String getFieldName() {
-        return fieldName;
-    }
-
-    /**
-     * Gets the file item headers.
-     *
-     * @return The items header object
-     */
-    @Override
-    public FileItemHeaders getHeaders() {
-        return headers;
-    }
-
-    /**
-     * Gets 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 use the file
-     *                                  name anyways, catch the exception and use InvalidFileNameException#getName().
-     */
-    @Override
-    public String getName() {
-        return DiskFileItem.checkFileName(fileName);
-    }
-
-    /**
-     * Tests whether this is a form field.
-     *
-     * @return True, if the item is a form field, otherwise false.
-     */
-    @Override
-    public boolean isFormField() {
-        return formField;
-    }
-
-    /**
-     * Gets the input stream, which may be used to read the items contents.
-     *
-     * @return Opened input stream.
-     * @throws IOException An I/O error occurred.
-     */
-    @Override
-    public InputStream openStream() throws IOException {
-        if (inputStreamClosed) {
-            throw new FileItemStream.ItemSkippedException();
-        }
-        return inputStream;
-    }
-
-    /**
-     * Sets the file item headers.
-     *
-     * @param headers The items header object
-     */
-    @Override
-    public void setHeaders(final FileItemHeaders headers) {
-        this.headers = headers;
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/package-info.java
deleted file mode 100644
index 08f6df7dd7..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/impl/package-info.java
+++ /dev/null
@@ -1,21 +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.
- */
-
-/**
- * Implementations and exceptions utils.
- */
-package org.apache.wicket.commons.fileupload2.impl;
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileCleaner.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileCleaner.java
deleted file mode 100644
index 9085f3d527..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileCleaner.java
+++ /dev/null
@@ -1,88 +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.wicket.commons.fileupload2.jaksrvlt;
-
-import org.apache.commons.io.FileCleaningTracker;
-
-import jakarta.servlet.ServletContext;
-import jakarta.servlet.ServletContextEvent;
-import jakarta.servlet.ServletContextListener;
-
-/**
- * A servlet context listener, which ensures that the
- * {@link FileCleaningTracker}'s reaper thread is terminated,
- * when the web application is destroyed.
- */
-public class JakSrvltFileCleaner implements ServletContextListener {
-
-    /**
-     * Attribute name, which is used for storing an instance of
-     * {@link FileCleaningTracker} in the web application.
-     */
-    public static final String FILE_CLEANING_TRACKER_ATTRIBUTE
-        = JakSrvltFileCleaner.class.getName() + ".FileCleaningTracker";
-
-    /**
-     * Gets the instance of {@link FileCleaningTracker}, which is
-     * associated with the given {@link ServletContext}.
-     *
-     * @param servletContext The servlet context to query
-     * @return The contexts tracker
-     */
-    public static FileCleaningTracker
-            getFileCleaningTracker(final ServletContext servletContext) {
-        return (FileCleaningTracker)
-            servletContext.getAttribute(FILE_CLEANING_TRACKER_ATTRIBUTE);
-    }
-
-    /**
-     * Sets the instance of {@link FileCleaningTracker}, which is
-     * associated with the given {@link ServletContext}.
-     *
-     * @param servletContext The servlet context to modify
-     * @param tracker The tracker to set
-     */
-    public static void setFileCleaningTracker(final ServletContext servletContext,
-            final FileCleaningTracker tracker) {
-        servletContext.setAttribute(FILE_CLEANING_TRACKER_ATTRIBUTE, tracker);
-    }
-
-    /**
-     * Called when the web application is being destroyed.
-     * Calls {@link FileCleaningTracker#exitWhenFinished()}.
-     *
-     * @param sce The servlet context, used for calling
-     *     {@link #getFileCleaningTracker(ServletContext)}.
-     */
-    @Override
-    public void contextDestroyed(final ServletContextEvent sce) {
-        getFileCleaningTracker(sce.getServletContext()).exitWhenFinished();
-    }
-
-    /**
-     * Called when the web application is initialized. Does
-     * nothing.
-     *
-     * @param sce The servlet context, used for calling
-     *   {@link #setFileCleaningTracker(ServletContext, FileCleaningTracker)}.
-     */
-    @Override
-    public void contextInitialized(final ServletContextEvent sce) {
-        setFileCleaningTracker(sce.getServletContext(),
-                new FileCleaningTracker());
-    }
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileUpload.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileUpload.java
deleted file mode 100644
index 61d9bd2422..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileUpload.java
+++ /dev/null
@@ -1,138 +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.wicket.commons.fileupload2.jaksrvlt;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.wicket.commons.fileupload2.AbstractFileUpload;
-import org.apache.wicket.commons.fileupload2.FileItem;
-import org.apache.wicket.commons.fileupload2.FileItemFactory;
-import org.apache.wicket.commons.fileupload2.FileItemIterator;
-import org.apache.wicket.commons.fileupload2.FileUpload;
-import org.apache.wicket.commons.fileupload2.FileUploadException;
-
-import jakarta.servlet.http.HttpServletRequest;
-
-/**
- * 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(HttpServletRequest)} to acquire a list of {@link
- * org.apache.wicket.commons.fileupload2.FileItem}s 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>
- */
-public class JakSrvltFileUpload extends FileUpload {
-
-    /**
-     * Constant for HTTP POST method.
-     */
-    private static final String POST_METHOD = "POST";
-
-    /**
-     * Utility method that determines whether the request contains multipart
-     * content.
-     *
-     * @param request The servlet request to be evaluated. Must be non-null.
-     *
-     * @return {@code true} if the request is multipart;
-     *         {@code false} otherwise.
-     */
-    public static final boolean isMultipartContent(final HttpServletRequest request) {
-        return POST_METHOD.equalsIgnoreCase(request.getMethod()) && AbstractFileUpload.isMultipartContent(new JakSrvltRequestContext(request));
-    }
-
-    /**
-     * Constructs an uninitialized instance of this class. A factory must be
-     * configured, using {@code setFileItemFactory()}, before attempting
-     * to parse requests.
-     *
-     * @see FileUpload#FileUpload(FileItemFactory)
-     */
-    public JakSrvltFileUpload() {
-    }
-
-    /**
-     * Constructs an instance of this class which uses the supplied factory to
-     * create {@code FileItem} instances.
-     *
-     * @see FileUpload#FileUpload()
-     * @param fileItemFactory The factory to use for creating file items.
-     */
-    public JakSrvltFileUpload(final FileItemFactory fileItemFactory) {
-        super(fileItemFactory);
-    }
-
-    /**
-     * Gets an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
-     * compliant {@code multipart/form-data} file item iterator.
-     *
-     * @param request The servlet request to be parsed.
-     * @return An iterator to instances of {@code FileItemStream}
-     *         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 FileItemIterator getItemIterator(final HttpServletRequest request)
-    throws FileUploadException, IOException {
-        return super.getItemIterator(new JakSrvltRequestContext(request));
-    }
-
-    /**
-     * 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.
-     *
-     * @since 1.3
-     */
-    public Map<String, List<FileItem>> parseParameterMap(final HttpServletRequest request)
-            throws FileUploadException {
-        return parseParameterMap(new JakSrvltRequestContext(request));
-    }
-
-    /**
-     * 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 List<FileItem> parseRequest(final HttpServletRequest request) throws FileUploadException {
-        return parseRequest(new JakSrvltRequestContext(request));
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltRequestContext.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltRequestContext.java
deleted file mode 100644
index a5b9d48b44..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltRequestContext.java
+++ /dev/null
@@ -1,81 +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.wicket.commons.fileupload2.jaksrvlt;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.wicket.commons.fileupload2.AbstractRequestContext;
-
-import jakarta.servlet.http.HttpServletRequest;
-
-/**
- * Provides access to the request information needed for a request made to
- * an HTTP servlet.
- *
- * @since 1.1
- */
-public class JakSrvltRequestContext extends AbstractRequestContext {
-
-    /**
-     * The request for which the context is being provided.
-     */
-    private final HttpServletRequest request;
-
-    /**
-     * Construct a context for this request.
-     *
-     * @param request The request to which this context applies.
-     */
-    public JakSrvltRequestContext(final HttpServletRequest request) {
-        super(request::getHeader, request::getContentLength);
-        this.request = request;
-    }
-
-    /**
-     * Gets the character encoding for the request.
-     *
-     * @return The character encoding for the request.
-     */
-    @Override
-    public String getCharacterEncoding() {
-        return request.getCharacterEncoding();
-    }
-
-    /**
-     * Gets the content type of the request.
-     *
-     * @return The content type of the request.
-     */
-    @Override
-    public String getContentType() {
-        return request.getContentType();
-    }
-
-    /**
-     * Gets the input stream for the request.
-     *
-     * @return The input stream for the request.
-     *
-     * @throws IOException if a problem occurs.
-     */
-    @Override
-    public InputStream getInputStream() throws IOException {
-        return request.getInputStream();
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/package-info.java
deleted file mode 100644
index c4ee385474..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/jaksrvlt/package-info.java
+++ /dev/null
@@ -1,41 +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.
- */
-
-/**
- *    <p>
- *      An implementation of
- *      {@link org.apache.wicket.commons.fileupload2.FileUpload FileUpload}
- *      for use in servlets conforming to the namespace {@code jakarta.servlet}.
- *
- *    </p>
- *    <p>
- *      The following code fragment demonstrates typical usage.
- *    </p>
- * <pre>
- *        DiskFileItemFactory factory = new DiskFileItemFactory();
- *        // Configure the factory here, if desired.
- *        JakSrvltFileUpload upload = new JakSrvltFileUpload(factory);
- *        // Configure the uploader here, if desired.
- *        List fileItems = upload.parseRequest(request);
- * </pre>
- *    <p>
- *      Please see the FileUpload
- *      <a href="https://commons.apache.org/fileupload/using.html" target="_top">User Guide</a>
- *      for further details and examples of how to use this package.
- *    </p>
- */
-package org.apache.wicket.commons.fileupload2.jaksrvlt;
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/package-info.java
deleted file mode 100644
index f960f63e46..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/package-info.java
+++ /dev/null
@@ -1,83 +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.
- */
-
-/**
- * <p>
- * A component for handling HTML file uploads as specified by
- * <a href="http://www.ietf.org/rfc/rfc1867.txt" target="_top">RFC&nbsp;1867</a>.
- * This component provides support for uploads within both servlets (JSR 53)
- * and portlets (JSR 168).
- * </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.wicket.commons.fileupload2.FileUpload FileUpload} such as
- * {@link org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload ServletFileUpload}
-  * together with a factory for
- * {@link org.apache.wicket.commons.fileupload2.FileItem FileItem} instances,
- * such as
- * {@link org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory DiskFileItemFactory}.
- * </p>
- * <p>
- * The following is a brief example of typical usage in a servlet, storing
- * the uploaded files on disk.
- * </p>
- * <pre>public void doPost(HttpServletRequest req, HttpServletResponse res) {
- *   DiskFileItemFactory factory = new DiskFileItemFactory();
- *   // maximum size that will be stored in memory
- *   factory.setSizeThreshold(4096);
- *   // the location for saving data that is larger than getSizeThreshold()
- *   factory.setRepository(new File("/tmp"));
- *
- *   ServletFileUpload upload = new ServletFileUpload(factory);
- *   // maximum size before a FileUploadException will be thrown
- *   upload.setSizeMax(1000000);
- *
- *   List fileItems = upload.parseRequest(req);
- *   // assume we know there are two files. The first file is a small
- *   // text file, the second is unknown and is written to a file on
- *   // the server
- *   Iterator i = fileItems.iterator();
- *   String comment = ((FileItem)i.next()).getString();
- *   FileItem fi = (FileItem)i.next();
- *   // file name on the client
- *   String fileName = fi.getName();
- *   // save comment and file name to database
- *   ...
- *   // write the file
- *   fi.write(new File("/www/uploads/", fileName));
- * }
- * </pre>
- * <p>
- * In the example above, the first file is loaded into memory as a
- * {@code String}. Before calling the {@code getString} method,
- * the data may have been in memory or on disk depending on its size. The
- * second file we assume it will be large and therefore never explicitly
- * load it into memory, though if it is less than 4096 bytes it will be
- * in memory before it is written to its final location. When writing to
- * the final location, if the data is larger than the threshold, an attempt
- * is made to rename the temporary file to the given location.  If it cannot
- * be renamed, it is streamed to the new location.
- * </p>
- * <p>
- * Please see the FileUpload
- * <a href="https://commons.apache.org/fileupload/using.html" target="_top">User Guide</a>
- * for further details and examples of how to use this package.
- * </p>
- */
-package org.apache.wicket.commons.fileupload2;
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadByteCountLimitException.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadByteCountLimitException.java
deleted file mode 100644
index d43b279a8a..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadByteCountLimitException.java
+++ /dev/null
@@ -1,72 +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.wicket.commons.fileupload2.pub;
-
-/**
- * Signals that a file size exceeds the configured maximum.
- */
-public class FileUploadByteCountLimitException extends FileUploadSizeException {
-
-    /**
-     * The exceptions UID, for serializing an instance.
-     */
-    private static final long serialVersionUID = 2;
-
-    /**
-     * File name of the item, which caused the exception.
-     */
-    private final String fileName;
-
-    /**
-     * Field name of the item, which caused the exception.
-     */
-    private final String fieldName;
-
-    /**
-     * Constructs an instance with the specified detail message, and actual and permitted sizes.
-     *
-     * @param message   The detail message (which is saved for later retrieval by the {@link #getMessage()} method)
-     * @param actual    The actual request size.
-     * @param permitted The maximum permitted request size.
-     * @param fileName  File name of the item, which caused the exception.
-     * @param fieldName Field name of the item, which caused the exception.
-     */
-    public FileUploadByteCountLimitException(final String message, final long actual, final long permitted, final String fileName, final String fieldName) {
-        super(message, permitted, actual);
-        this.fileName = fileName;
-        this.fieldName = fieldName;
-    }
-
-    /**
-     * Gets the field name of the item, which caused the exception.
-     *
-     * @return Field name, if known, or null.
-     */
-    public String getFieldName() {
-        return fieldName;
-    }
-
-    /**
-     * Gets the file name of the item, which caused the exception.
-     *
-     * @return File name, if known, or null.
-     */
-    public String getFileName() {
-        return fileName;
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadContentTypeException.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadContentTypeException.java
deleted file mode 100644
index ee29ad561e..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadContentTypeException.java
+++ /dev/null
@@ -1,62 +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.wicket.commons.fileupload2.pub;
-
-import org.apache.wicket.commons.fileupload2.FileUploadException;
-
-/**
- * Signals that a request is not a multipart request.
- */
-public class FileUploadContentTypeException extends FileUploadException {
-
-    /**
-     * The exceptions UID, for serializing an instance.
-     */
-    private static final long serialVersionUID = 2;
-
-    /**
-     * The guilty content type.
-     */
-    private String contentType;
-
-    /**
-     * Constructs an instance with the specified detail message.
-     *
-     * @param message The detail message (which is saved for later retrieval by the {@link #getMessage()} method)
-     * @param contentType The guilty content type.
-     */
-    public FileUploadContentTypeException(final String message, final String contentType) {
-        super(message);
-        this.contentType = contentType;
-    }
-
-    /**
-     * Constructs an instance with the specified detail message and cause.
-     *
-     * @param message
-     *        The detail message (which is saved for later retrieval
-     *        by the {@link #getMessage()} method)
-     * @param cause the original cause
-     */
-    public FileUploadContentTypeException(final String message, final Throwable cause) {
-        super(message, cause);
-    }
-
-    public String getContentType() {
-        return contentType;
-    }
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadFileCountLimitException.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadFileCountLimitException.java
deleted file mode 100644
index 6a3a2965b8..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadFileCountLimitException.java
+++ /dev/null
@@ -1,37 +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.wicket.commons.fileupload2.pub;
-
-/**
- * Signals that a request contains more files than the specified limit.
- */
-public class FileUploadFileCountLimitException extends FileUploadSizeException {
-
-    private static final long serialVersionUID = 2;
-
-    /**
-     * Constructs an instance.
-     *
-     * @param message The detail message (which is saved for later retrieval by the {@link #getMessage()} method)
-     * @param limit   The limit that was exceeded.
-     * @param actual  The actual value.
-     */
-    public FileUploadFileCountLimitException(final String message, final long limit, final long actual) {
-        super(message, limit, actual);
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadSizeException.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadSizeException.java
deleted file mode 100644
index 323b1d1f19..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/FileUploadSizeException.java
+++ /dev/null
@@ -1,72 +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.wicket.commons.fileupload2.pub;
-
-import org.apache.wicket.commons.fileupload2.FileUploadException;
-
-/**
- * Signals that a requests permitted size is exceeded.
- */
-public class FileUploadSizeException extends FileUploadException {
-
-    /**
-     * Serial version UID, being used, if serialized.
-     */
-    private static final long serialVersionUID = 2;
-
-    /**
-     * The actual size of the request.
-     */
-    private final long actual;
-
-    /**
-     * The maximum permitted size of the request.
-     */
-    private final long permitted;
-
-    /**
-     * Constructs an instance.
-     *
-     * @param message   The detail message (which is saved for later retrieval by the {@link #getMessage()} method)
-     * @param permitted The requests size limit.
-     * @param actual    The actual values for the request.
-     */
-    public FileUploadSizeException(final String message, final long permitted, final long actual) {
-        super(message);
-        this.permitted = permitted;
-        this.actual = actual;
-    }
-
-    /**
-     * Gets the actual size of the request.
-     *
-     * @return The actual size of the request.
-     */
-    public long getActualSize() {
-        return actual;
-    }
-
-    /**
-     * Gets the limit size of the request.
-     *
-     * @return The limit size of the request.
-     */
-    public long getPermitted() {
-        return permitted;
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/package-info.java
deleted file mode 100644
index 21af891d85..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/pub/package-info.java
+++ /dev/null
@@ -1,22 +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.
- */
-
-/**
- * Exceptions, and other classes, that are known to be used outside
- * of FileUpload.
- */
-package org.apache.wicket.commons.fileupload2.pub;
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/FileItemHeadersImpl.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/FileItemHeadersImpl.java
deleted file mode 100644
index 514495c8be..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/FileItemHeadersImpl.java
+++ /dev/null
@@ -1,98 +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.wicket.commons.fileupload2.util;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.wicket.commons.fileupload2.FileItemHeaders;
-
-/**
- * Default implementation of the {@link FileItemHeaders} interface.
- *
- * @since 1.2.1
- */
-public class FileItemHeadersImpl implements FileItemHeaders, Serializable {
-
-    /**
-     * Serial version UID, being used, if serialized.
-     */
-    private static final long serialVersionUID = 2;
-
-    /**
-     * Map of {@code String} keys to a {@code List} of {@code String} instances.
-     */
-    private final Map<String, List<String>> headerNameToValueListMap = new LinkedHashMap<>();
-
-    /**
-     * Method to add header values to this instance.
-     *
-     * @param name  name of this header
-     * @param value value of this header
-     */
-    public synchronized void addHeader(final String name, final String value) {
-        final List<String> headerValueList = headerNameToValueListMap.computeIfAbsent(toLowerCase(name), k -> new ArrayList<>());
-        headerValueList.add(value);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public String getHeader(final String name) {
-        final List<String> headerValueList = getList(name);
-        if (null == headerValueList) {
-            return null;
-        }
-        return headerValueList.get(0);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Iterator<String> getHeaderNames() {
-        return headerNameToValueListMap.keySet().iterator();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Iterator<String> getHeaders(final String name) {
-        List<String> headerValueList = getList(name);
-        if (null == headerValueList) {
-            headerValueList = Collections.emptyList();
-        }
-        return headerValueList.iterator();
-    }
-
-    private List<String> getList(final String name) {
-        return headerNameToValueListMap.get(toLowerCase(name));
-    }
-
-    private String toLowerCase(final String value) {
-        return value.toLowerCase(Locale.ENGLISH);
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/LimitedInputStream.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/LimitedInputStream.java
deleted file mode 100644
index f6d82b10e8..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/LimitedInputStream.java
+++ /dev/null
@@ -1,149 +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.wicket.commons.fileupload2.util;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * An input stream, which limits its data size. This stream is
- * used, if the content length is unknown.
- */
-public abstract class LimitedInputStream extends FilterInputStream {
-
-    /**
-     * The maximum size of an item, in bytes.
-     */
-    private final long sizeMax;
-
-    /**
-     * The current number of bytes.
-     */
-    private long count;
-
-    /**
-     * Creates a new instance.
-     *
-     * @param inputStream The input stream, which shall be limited.
-     * @param sizeMax The limit; no more than this number of bytes
-     *   shall be returned by the source stream.
-     */
-    public LimitedInputStream(final InputStream inputStream, final long sizeMax) {
-        super(inputStream);
-        this.sizeMax = sizeMax;
-    }
-
-    /**
-     * Called to check, whether the input streams
-     * limit is reached.
-     *
-     * @throws IOException The given limit is exceeded.
-     */
-    private void checkLimit() throws IOException {
-        if (count > sizeMax) {
-            raiseError(sizeMax, count);
-        }
-    }
-
-    /**
-     * Closes this input stream and releases any system resources
-     * associated with the stream.
-     * This
-     * method simply performs {@code in.close()}.
-     *
-     * @throws  IOException  if an I/O error occurs.
-     * @see        java.io.FilterInputStream#in
-     */
-    @Override
-    public void close() throws IOException {
-        super.close();
-    }
-
-    /**
-     * Called to indicate, that the input streams limit has
-     * been exceeded.
-     *
-     * @param sizeMax The input streams limit, in bytes.
-     * @param count The actual number of bytes.
-     * @throws IOException The called method is expected
-     *   to raise an IOException.
-     */
-    protected abstract void raiseError(long sizeMax, long count)
-            throws IOException;
-
-    /**
-     * Reads the next byte of data from this input stream. The value
-     * byte is returned as an {@code int} in the range
-     * {@code 0} to {@code 255}. If no byte is available
-     * because the end of the stream has been reached, the value
-     * {@code -1} is returned. This method blocks until input data
-     * is available, the end of the stream is detected, or an exception
-     * is thrown.
-     * <p>
-     * This method
-     * simply performs {@code in.read()} and returns the result.
-     * </p>
-     * @return     the next byte of data, or {@code -1} if the end of the
-     *             stream is reached.
-     * @throws  IOException  if an I/O error occurs.
-     * @see        java.io.FilterInputStream#in
-     */
-    @Override
-    public int read() throws IOException {
-        final int res = super.read();
-        if (res != -1) {
-            count++;
-            checkLimit();
-        }
-        return res;
-    }
-
-    /**
-     * Reads up to {@code len} bytes of data from this input stream
-     * into an array of bytes. If {@code len} is not zero, the method
-     * blocks until some input is available; otherwise, no
-     * bytes are read and {@code 0} is returned.
-     * <p>
-     * This method simply performs {@code in.read(b, off, len)}
-     * and returns the result.
-     * </p>
-     * @param      b     the buffer into which the data is read.
-     * @param      off   The start offset in the destination array
-     *                   {@code b}.
-     * @param      len   the maximum number of bytes read.
-     * @return     the total number of bytes read into the buffer, or
-     *             {@code -1} if there is no more data because the end of
-     *             the stream has been reached.
-     * @throws  NullPointerException If {@code b} is {@code null}.
-     * @throws  IndexOutOfBoundsException If {@code off} is negative,
-     * {@code len} is negative, or {@code len} is greater than
-     * {@code b.length - off}
-     * @throws  IOException  if an I/O error occurs.
-     * @see        java.io.FilterInputStream#in
-     */
-    @Override
-    public int read(final byte[] b, final int off, final int len) throws IOException {
-        final int res = super.read(b, off, len);
-        if (res > 0) {
-            count += res;
-            checkLimit();
-        }
-        return res;
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/MimeUtility.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/MimeUtility.java
deleted file mode 100644
index d836e422a4..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/MimeUtility.java
+++ /dev/null
@@ -1,278 +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.wicket.commons.fileupload2.util.mime;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
-import java.util.Base64;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * Utility class to decode MIME texts.
- *
- * @since 1.3
- */
-public final class MimeUtility {
-
-    /**
-     * The marker to indicate text is encoded with BASE64 algorithm.
-     */
-    private static final String BASE64_ENCODING_MARKER = "B";
-
-    /**
-     * The marker to indicate text is encoded with QuotedPrintable algorithm.
-     */
-    private static final String QUOTEDPRINTABLE_ENCODING_MARKER = "Q";
-
-    /**
-     * If the text contains any encoded tokens, those tokens will be marked with "=?".
-     */
-    private static final String ENCODED_TOKEN_MARKER = "=?";
-
-    /**
-     * If the text contains any encoded tokens, those tokens will terminate with "=?".
-     */
-    private static final String ENCODED_TOKEN_FINISHER = "?=";
-
-    /**
-     * The linear whitespace chars sequence.
-     */
-    private static final String LINEAR_WHITESPACE = " \t\r\n";
-
-    /**
-     * Mappings between MIME and Java charset.
-     */
-    private static final Map<String, String> MIME2JAVA = new HashMap<>();
-
-    static {
-        MIME2JAVA.put("iso-2022-cn", "ISO2022CN");
-        MIME2JAVA.put("iso-2022-kr", "ISO2022KR");
-        MIME2JAVA.put("utf-8", "UTF8");
-        MIME2JAVA.put("utf8", "UTF8");
-        MIME2JAVA.put("ja_jp.iso2022-7", "ISO2022JP");
-        MIME2JAVA.put("ja_jp.eucjp", "EUCJIS");
-        MIME2JAVA.put("euc-kr", "KSC5601");
-        MIME2JAVA.put("euckr", "KSC5601");
-        MIME2JAVA.put("us-ascii", "ISO-8859-1");
-        MIME2JAVA.put("x-us-ascii", "ISO-8859-1");
-    }
-
-    /**
-     * Decodes a string of text obtained from a mail header into
-     * its proper form.  The text generally will consist of a
-     * string of tokens, some of which may be encoded using
-     * base64 encoding.
-     *
-     * @param text   The text to decode.
-     *
-     * @return The decoded text string.
-     * @throws UnsupportedEncodingException if the detected encoding in the input text is not supported.
-     */
-    public static String decodeText(final String text) throws UnsupportedEncodingException {
-        // if the text contains any encoded tokens, those tokens will be marked with "=?".  If the
-        // source string doesn't contain that sequent, no decoding is required.
-        if (!text.contains(ENCODED_TOKEN_MARKER)) {
-            return text;
-        }
-
-        int offset = 0;
-        final int endOffset = text.length();
-
-        int startWhiteSpace = -1;
-        int endWhiteSpace = -1;
-
-        final StringBuilder decodedText = new StringBuilder(text.length());
-
-        boolean previousTokenEncoded = false;
-
-        while (offset < endOffset) {
-            char ch = text.charAt(offset);
-
-            // is this a whitespace character?
-            if (LINEAR_WHITESPACE.indexOf(ch) != -1) { // whitespace found
-                startWhiteSpace = offset;
-                while (offset < endOffset) {
-                    // step over the white space characters.
-                    ch = text.charAt(offset);
-                    if (LINEAR_WHITESPACE.indexOf(ch) == -1) {
-                        // record the location of the first non lwsp and drop down to process the
-                        // token characters.
-                        endWhiteSpace = offset;
-                        break;
-                    }
-                    offset++;
-                }
-            } else {
-                // we have a word token.  We need to scan over the word and then try to parse it.
-                final int wordStart = offset;
-
-                while (offset < endOffset) {
-                    // step over the non white space characters.
-                    ch = text.charAt(offset);
-                    if (LINEAR_WHITESPACE.indexOf(ch) != -1) {
-                        break;
-                    }
-                    offset++;
-
-                    //NB:  Trailing whitespace on these header strings will just be discarded.
-                }
-                // pull out the word token.
-                final String word = text.substring(wordStart, offset);
-                // is the token encoded?  decode the word
-                if (word.startsWith(ENCODED_TOKEN_MARKER)) {
-                    try {
-                        // if this gives a parsing failure, treat it like a non-encoded word.
-                        final String decodedWord = decodeWord(word);
-
-                        // are any whitespace characters significant?  Append 'em if we've got 'em.
-                        if (!previousTokenEncoded && startWhiteSpace != -1) {
-                            decodedText.append(text, startWhiteSpace, endWhiteSpace);
-                            startWhiteSpace = -1;
-                        }
-                        // this is definitely a decoded token.
-                        previousTokenEncoded = true;
-                        // and add this to the text.
-                        decodedText.append(decodedWord);
-                        // we continue parsing from here...we allow parsing errors to fall through
-                        // and get handled as normal text.
-                        continue;
-
-                    } catch (final ParseException e) {
-                        // just ignore it, skip to next word
-                    }
-                }
-                // this is a normal token, so it doesn't matter what the previous token was.  Add the white space
-                // if we have it.
-                if (startWhiteSpace != -1) {
-                    decodedText.append(text, startWhiteSpace, endWhiteSpace);
-                    startWhiteSpace = -1;
-                }
-                // this is not a decoded token.
-                previousTokenEncoded = false;
-                decodedText.append(word);
-            }
-        }
-
-        return decodedText.toString();
-    }
-
-    /**
-     * Decodes a string using the RFC 2047 rules for an "encoded-word"
-     * type.  This encoding has the syntax:
-     *
-     * encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
-     *
-     * @param word   The possibly encoded word value.
-     *
-     * @return The decoded word.
-     * @throws ParseException in case of a parse error of the RFC 2047
-     * @throws UnsupportedEncodingException Thrown when Invalid RFC 2047 encoding was found
-     */
-    private static String decodeWord(final String word) throws ParseException, UnsupportedEncodingException {
-        // encoded words start with the characters "=?".  If this not an encoded word, we throw a
-        // ParseException for the caller.
-
-        if (!word.startsWith(ENCODED_TOKEN_MARKER)) {
-            throw new ParseException("Invalid RFC 2047 encoded-word: " + word);
-        }
-
-        final int charsetPos = word.indexOf('?', 2);
-        if (charsetPos == -1) {
-            throw new ParseException("Missing charset in RFC 2047 encoded-word: " + word);
-        }
-
-        // pull out the character set information (this is the MIME name at this point).
-        final String charset = word.substring(2, charsetPos).toLowerCase(Locale.ENGLISH);
-
-        // now pull out the encoding token the same way.
-        final int encodingPos = word.indexOf('?', charsetPos + 1);
-        if (encodingPos == -1) {
-            throw new ParseException("Missing encoding in RFC 2047 encoded-word: " + word);
-        }
-
-        final String encoding = word.substring(charsetPos + 1, encodingPos);
-
-        // and finally the encoded text.
-        final int encodedTextPos = word.indexOf(ENCODED_TOKEN_FINISHER, encodingPos + 1);
-        if (encodedTextPos == -1) {
-            throw new ParseException("Missing encoded text in RFC 2047 encoded-word: " + word);
-        }
-
-        final String encodedText = word.substring(encodingPos + 1, encodedTextPos);
-
-        // seems a bit silly to encode a null string, but easy to deal with.
-        if (encodedText.isEmpty()) {
-            return "";
-        }
-
-        try {
-            // the decoder writes directly to an output stream.
-            final ByteArrayOutputStream out = new ByteArrayOutputStream(encodedText.length());
-
-            final byte[] encodedData = encodedText.getBytes(StandardCharsets.US_ASCII);
-
-            // Base64 encoded?
-            if (encoding.equals(BASE64_ENCODING_MARKER)) {
-                out.write(Base64.getMimeDecoder().decode(encodedData));
-            } else if (encoding.equals(QUOTEDPRINTABLE_ENCODING_MARKER)) { // maybe quoted printable.
-                QuotedPrintableDecoder.decode(encodedData, out);
-            } else {
-                throw new UnsupportedEncodingException("Unknown RFC 2047 encoding: " + encoding);
-            }
-            // get the decoded byte data and convert into a string.
-            final byte[] decodedData = out.toByteArray();
-            return new String(decodedData, javaCharset(charset));
-        } catch (final IOException e) {
-            throw new UnsupportedEncodingException("Invalid RFC 2047 encoding");
-        }
-    }
-
-    /**
-     * Translate a MIME standard character set name into the Java
-     * equivalent.
-     *
-     * @param charset The MIME standard name.
-     *
-     * @return The Java equivalent for this name.
-     */
-    private static String javaCharset(final String charset) {
-        // nothing in, nothing out.
-        if (charset == null) {
-            return null;
-        }
-
-        final String mappedCharset = MIME2JAVA.get(charset.toLowerCase(Locale.ENGLISH));
-        // if there is no mapping, then the original name is used.  Many of the MIME character set
-        // names map directly back into Java.  The reverse isn't necessarily true.
-        if (mappedCharset == null) {
-            return charset;
-        }
-        return mappedCharset;
-    }
-
-    /**
-     * Hidden constructor, this class must not be instantiated.
-     */
-    private MimeUtility() {
-        // do nothing
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/ParseException.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/ParseException.java
deleted file mode 100644
index 944acb4540..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/ParseException.java
+++ /dev/null
@@ -1,38 +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.wicket.commons.fileupload2.util.mime;
-
-/**
- * @since 1.3
- */
-final class ParseException extends Exception {
-
-    /**
-     * The UID to use when serializing this instance.
-     */
-    private static final long serialVersionUID = 2;
-
-    /**
-     * Constructs a new exception with the specified detail message.
-     *
-     * @param message the detail message.
-     */
-    ParseException(final String message) {
-        super(message);
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/QuotedPrintableDecoder.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/QuotedPrintableDecoder.java
deleted file mode 100644
index 34bfa032e3..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/QuotedPrintableDecoder.java
+++ /dev/null
@@ -1,112 +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.wicket.commons.fileupload2.util.mime;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * @since 1.3
- */
-final class QuotedPrintableDecoder {
-
-    /**
-     * The shift value required to create the upper nibble
-     * from the first of 2 byte values converted from ascii hex.
-     */
-    private static final int UPPER_NIBBLE_SHIFT = Byte.SIZE / 2;
-
-    /**
-     * Decodes the encoded byte data writing it to the given output stream.
-     *
-     * @param data   The array of byte data to decode.
-     * @param out    The output stream used to return the decoded data.
-     *
-     * @return the number of bytes produced.
-     * @throws IOException if an IO error occurs
-     */
-    public static int decode(final byte[] data, final OutputStream out) throws IOException {
-        int off = 0;
-        final int length = data.length;
-        final int endOffset = off + length;
-        int bytesWritten = 0;
-
-        while (off < endOffset) {
-            final byte ch = data[off++];
-
-            // space characters were translated to '_' on encode, so we need to translate them back.
-            if (ch == '_') {
-                out.write(' ');
-            } else if (ch == '=') {
-                // we found an encoded character.  Reduce the 3 char sequence to one.
-                // but first, make sure we have two characters to work with.
-                if (off + 1 >= endOffset) {
-                    throw new IOException("Invalid quoted printable encoding; truncated escape sequence");
-                }
-
-                final byte b1 = data[off++];
-                final byte b2 = data[off++];
-
-                // we've found an encoded carriage return.  The next char needs to be a newline
-                if (b1 == '\r') {
-                    if (b2 != '\n') {
-                        throw new IOException("Invalid quoted printable encoding; CR must be followed by LF");
-                    }
-                    // this was a soft linebreak inserted by the encoding.  We just toss this away
-                    // on decode.
-                } else {
-                    // this is a hex pair we need to convert back to a single byte.
-                    final int c1 = hexToBinary(b1);
-                    final int c2 = hexToBinary(b2);
-                    out.write((c1 << UPPER_NIBBLE_SHIFT) | c2);
-                    // 3 bytes in, one byte out
-                    bytesWritten++;
-                }
-            } else {
-                // simple character, just write it out.
-                out.write(ch);
-                bytesWritten++;
-            }
-        }
-
-        return bytesWritten;
-    }
-
-    /**
-     * Converts a hex digit to the binary value it represents.
-     *
-     * @param b the ascii hex byte to convert (0-0, A-F, a-f)
-     * @return the int value of the hex byte, 0-15
-     * @throws IOException if the byte is not a valid hex digit.
-     */
-    private static int hexToBinary(final byte b) throws IOException {
-        // CHECKSTYLE IGNORE MagicNumber FOR NEXT 1 LINE
-        final int i = Character.digit((char) b, 16);
-        if (i == -1) {
-            throw new IOException("Invalid quoted printable encoding: not a valid hex digit: " + b);
-        }
-        return i;
-    }
-
-    /**
-     * Hidden constructor, this class must not be instantiated.
-     */
-    private QuotedPrintableDecoder() {
-        // do nothing
-    }
-
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/RFC2231Utility.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/RFC2231Utility.java
deleted file mode 100644
index 6283ee4dbf..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/RFC2231Utility.java
+++ /dev/null
@@ -1,156 +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.wicket.commons.fileupload2.util.mime;
-
-import java.io.ByteArrayOutputStream;
-import java.io.UnsupportedEncodingException;
-/**
- * Utility class to decode/encode character set on HTTP Header fields based on RFC 2231.
- * This implementation adheres to RFC 5987 in particular, which was defined for HTTP headers
- * <p>
- * RFC 5987 builds on RFC 2231, but has lesser scope like
- * <a href="https://tools.ietf.org/html/rfc5987#section-3.2">mandatory charset definition</a>
- * and <a href="https://tools.ietf.org/html/rfc5987#section-4">no parameter continuation</a>
- * </p>
- * @see <a href="https://tools.ietf.org/html/rfc2231">RFC 2231</a>
- * @see <a href="https://tools.ietf.org/html/rfc5987">RFC 5987</a>
- */
-public final class RFC2231Utility {
-
-    /**
-     * The Hexadecimal values char array.
-     */
-    private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
-    /**
-     * The Hexadecimal representation of 127.
-     */
-    private static final byte MASK = 0x7f;
-    /**
-     * The Hexadecimal representation of 128.
-     */
-    private static final int MASK_128 = 0x80;
-    /**
-     * The Hexadecimal decode value.
-     */
-    private static final byte[] HEX_DECODE = new byte[MASK_128];
-
-    // create a ASCII decoded array of Hexadecimal values
-    static {
-        for (int i = 0; i < HEX_DIGITS.length; i++) {
-            HEX_DECODE[HEX_DIGITS[i]] = (byte) i;
-            HEX_DECODE[Character.toLowerCase(HEX_DIGITS[i])] = (byte) i;
-        }
-    }
-
-    /**
-     * Decodes a string of text obtained from a HTTP header as per RFC 2231
-     *
-     * <b>Eg 1.</b> {@code us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A}
-     * will be decoded to {@code This is ***fun***}
-     *
-     * <b>Eg 2.</b> {@code iso-8859-1'en'%A3%20rate}
-     * will be decoded to {@code £ rate}.
-     *
-     * <b>Eg 3.</b> {@code UTF-8''%c2%a3%20and%20%e2%82%ac%20rates}
-     * will be decoded to {@code £ and € rates}.
-     *
-     * @param encodedText - Text to be decoded has a format of {@code <charset>'<language>'<encoded_value>}
-     * and ASCII only
-     * @return Decoded text based on charset encoding
-     * @throws UnsupportedEncodingException The requested character set wasn't found.
-     */
-    public static String decodeText(final String encodedText) throws UnsupportedEncodingException {
-        final int langDelimitStart = encodedText.indexOf('\'');
-        if (langDelimitStart == -1) {
-            // missing charset
-            return encodedText;
-        }
-        final String mimeCharset = encodedText.substring(0, langDelimitStart);
-        final int langDelimitEnd = encodedText.indexOf('\'', langDelimitStart + 1);
-        if (langDelimitEnd == -1) {
-            // missing language
-            return encodedText;
-        }
-        final byte[] bytes = fromHex(encodedText.substring(langDelimitEnd + 1));
-        return new String(bytes, getJavaCharset(mimeCharset));
-    }
-
-    /**
-     * Converts {@code text} to their corresponding Hex value.
-     *
-     * @param text - ASCII text input
-     * @return Byte array of characters decoded from ASCII table
-     */
-    private static byte[] fromHex(final String text) {
-        final int shift = 4;
-        final ByteArrayOutputStream out = new ByteArrayOutputStream(text.length());
-        for (int i = 0; i < text.length();) {
-            final char c = text.charAt(i++);
-            if (c == '%') {
-                if (i > text.length() - 2) {
-                    break; // unterminated sequence
-                }
-                final byte b1 = HEX_DECODE[text.charAt(i++) & MASK];
-                final byte b2 = HEX_DECODE[text.charAt(i++) & MASK];
-                out.write((b1 << shift) | b2);
-            } else {
-                out.write((byte) c);
-            }
-        }
-        return out.toByteArray();
-    }
-
-    private static String getJavaCharset(final String mimeCharset) {
-        // good enough for standard values
-        return mimeCharset;
-    }
-
-    /**
-     * Tests if asterisk (*) at the end of parameter name to indicate,
-     * if it has charset and language information to decode the value.
-     * @param paramName The parameter, which is being checked.
-     * @return {@code true}, if encoded as per RFC 2231, {@code false} otherwise
-     */
-    public static boolean hasEncodedValue(final String paramName) {
-        if (paramName != null) {
-            return paramName.lastIndexOf('*') == (paramName.length() - 1);
-        }
-        return false;
-    }
-
-    /**
-     * If {@code paramName} has Asterisk (*) at the end, it will be stripped off,
-     * else the passed value will be returned.
-     * @param paramName The parameter, which is being inspected.
-     * @return stripped {@code paramName} of Asterisk (*), if RFC2231 encoded
-     */
-    public static String stripDelimiter(final String paramName) {
-        if (hasEncodedValue(paramName)) {
-            final StringBuilder paramBuilder = new StringBuilder(paramName);
-            paramBuilder.deleteCharAt(paramName.lastIndexOf('*'));
-            return paramBuilder.toString();
-        }
-        return paramName;
-    }
-
-    /**
-     * Private constructor so that no instances can be created. This class
-     * contains only static utility methods.
-     */
-    private RFC2231Utility() {
-    }
-}
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/package-info.java
deleted file mode 100644
index 0500ce3209..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/mime/package-info.java
+++ /dev/null
@@ -1,22 +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.
- */
-
-/**
- * MIME decoder implementation, imported and retailed from
- * <a href="http://svn.apache.org/repos/asf/geronimo/specs/tags/geronimo-javamail_1.4_spec-1.4/">Apache Geronimo</a>.
- */
-package org.apache.wicket.commons.fileupload2.util.mime;
diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/package-info.java
deleted file mode 100644
index 218c469f7c..0000000000
--- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/util/package-info.java
+++ /dev/null
@@ -1,23 +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.
- */
-
-/**
- * This package contains various IO related utility classes
- * or methods, which are basically reusable and not necessarily
- * restricted to the scope of a file upload.
- */
-package org.apache.wicket.commons.fileupload2.util;
diff --git a/wicket-commons-fileupload/src/media/logo.xcf b/wicket-commons-fileupload/src/media/logo.xcf
deleted file mode 100644
index 6a6408e318..0000000000
Binary files a/wicket-commons-fileupload/src/media/logo.xcf and /dev/null differ
diff --git a/wicket-commons-fileupload/src/site/apt/migration.apt.vm b/wicket-commons-fileupload/src/site/apt/migration.apt.vm
deleted file mode 100644
index 4a9ad04516..0000000000
--- a/wicket-commons-fileupload/src/site/apt/migration.apt.vm
+++ /dev/null
@@ -1,140 +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.
-~~
-		---------
-		Migration
-		---------
-
-Migration
-
-   This document provides advice for migration between versions of Commons FileUpload, and between versions
-   of the underlying Servlet API.
-
-# Migrating to Commons FileUpload 2
-
-   Commons Fileupload 2 is the first version, that drops compatibility to previous versions. This means, that
-   you need to adapt your projects as follows:
-
-   1. Upgrade your Java version to 8, or later.
-   
-   2. In your dependency declaration, change the groupId to org.apache.commons, the artifactId to
-      commons-fileupload2, and the version number to ${project.version}.
-
-   3. Change namespace org.apache.commons.fileupload to org.apache.commons.fileupload2.
-   
-      Example: Change
-
-+-------------------------------------------
-   import org.apache.commons.fileupload.servlet.ServletFileUpload;
-+-------------------------------------------
-
-      to
-
-+-------------------------------------------
-   import org.apache.commons.fileupload2.servlet.ServletFileUpload;
-+-------------------------------------------
-
-  4. Existing code like the following might give compiler errors, although it
-     looks perfectly valid:
-
-+-------------------------------------------
-    try {
-        //  Parse a Fileupload request here.
-    } catch (IOException e) {
-        // Handle the IOException
-    } catch (FileUploadException e) {
-        // Handle the FileUploadException
-    }
-+------------------------------------------- 
-
-    With FileUpload 2, this is invalid, because the FileUploadException is now a
-    subclass of the IOException. The solution is simple: Just switch the order,
-    and handle the FileUploadException in the first catch clause, and the IOException
-    in the second clause.
-
-# Migrating to Jakarta Servlet API, Version 5, or later.
-
-  Most existing projects, that are using Commons Fileupload, are based on the Java Servlet API, version
-  two, or later. In Jakarta EE 9, this is going to be replaced with the Jakarta Servlet API, version 5.
-  Basically, this means, that user code is supposed to use the <<jakarta.servlet>> package, rather than
-  the <<javax.servlet>> package.
-
-  For applications, that are using Commons Fileupload, this means, that you need to
-
-  1. Upgrade Commons Fileupload to version 2, or later.
-
-  2. Replace the classes from <<org.apache.commons.fileupload.servlet>>, or
-     <<org.apache.commons.filupload2.servlet>> with the corresponding
-     classes from <<org.apache.commons.fileupload2.jaksrvlt>>. Namely, replace
-
-*------------------------------------------------------------- *----------------------------------------------------------------*
-| <<Old class name>>                                           | <<New class name>>                                             |
-*------------------------------------------------------------- *----------------------------------------------------------------*
-| org.apache.commons.fileupload.servlet.ServletFileUpload      | org.apache.commons.fileupload2.jaksrvlt.JakSrvltFileUpload     |
-| org.apache.commons.fileupload2.servlet.ServletFileUpload     |                                                                |
-*------------------------------------------------------------- *----------------------------------------------------------------*
-| org.apache.commons.fileupload.servlet.ServletRequestContext  | org.apache.commons.fileupload2.jaksrvlt.JakSrvltRequestContext |
-| org.apache.commons.fileupload2.servlet.ServletRequestContext |                                                                |
-*--------------------------------------------------------------*----------------------------------------------------------------*
-| org.apache.commons.fileupload2.servlet.FileCleanerCleanup    | org.apache.commons.fileupload2.jaksrvlt.JakSrvltFileCleaner    |
-*--------------------------------------------------------------*----------------------------------------------------------------*
-
-## Example
-
-The following example demonstrates, how to use Commons Fileupload with the Java Servlet API, version 5:
-
-+-------------------------------------------
-    import java.io.IOException;
-    import java.util.List;
-
-    import org.apache.commons.fileupload2.FileItem;
-    import org.apache.commons.fileupload2.FileItemFactory;
-    import org.apache.commons.fileupload2.FileUpload;
-    import org.apache.commons.fileupload2.FileUploadException;
-    import org.apache.commons.fileupload2.disk.DiskFileItemFactory;
-    import org.apache.commons.fileupload2.jaksrvlt.JakSrvltFileUpload;
-    import org.apache.commons.fileupload2.jaksrvlt.JakSrvltRequestContext;
-
-    import jakarta.servlet.ServletException;
-    import jakarta.servlet.http.HttpServlet;
-    import jakarta.servlet.http.HttpServletRequest;
-    import jakarta.servlet.http.HttpServletResponse;
-    public class SampleServlet extends HttpServlet {
-	    private static final long serialVersionUID = -8899322882932916888L;
-
-	    @Override
-	    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-		    if (JakSrvltFileUpload.isMultipartContent(req)) {
-			    final FileItemFactory fileItemfactory = new DiskFileItemFactory();
-			    final FileUpload fileUpload = new JakSrvltFileUpload(fileItemfactory);
-			    final List<FileItem> items;
-			    try {
-				    items = fileUpload.parseRequest(new JakSrvltRequestContext(req));
-			    } catch (FileUploadException e) {
-			        throw new ServletException(e);
-     			}
-     			// Process the uploaded file items here...
-		    }
-	    }
-	 }
-
-+-------------------------------------------
-
-# Commons FileUpload 2 can be used a Java Package Module
-
-The library provides <<META-INF/versions/module-info.class>> that defines the required modules and exported packages.
-All packages but <<org.apache.commons.fileupload2.impl>> are exported. All exception classes have been moved from
-<<org.apache.commons.fileupload2.impl>> to <<org.apache.commons.fileupload2.pub>> package
diff --git a/wicket-commons-fileupload/src/site/fml/faq.fml b/wicket-commons-fileupload/src/site/fml/faq.fml
deleted file mode 100644
index 3658324f07..0000000000
--- a/wicket-commons-fileupload/src/site/fml/faq.fml
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.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.
--->
-
-<faqs title="FileUpload FAQ">
-
-  <part id="general">
-    <title>General</title>
-
-    <faq id="empty-parse">
-      <question>
-        Why is parseRequest() returning no items?
-      </question>
-      <answer>
-        This most commonly happens when the request has already been parsed, or
-        processed in some other way. Since the input stream has aleady been
-        consumed by that earlier process, it is no longer available for parsing
-        by Commons FileUpload.
-      </answer>
-    </faq>
-
-    <faq id="read-timeout">
-      <question>
-        Why am I getting "Read timed out" exceptions while parsing?
-      </question>
-      <answer>
-        The most common cause of these exceptions is when FileUpload is being
-        used on a site that is using the Tomcat ISAPI redirector. There was a
-        bug in earlier versions of that component that caused problems with
-        multipart requests. The bug was fixed some time ago, so you probably
-        just need to pick up a newer version. See the
-        <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=15278">Tomcat bug report</a>
-        for full details.
-      </answer>
-    </faq>
-
-    <faq id="class-not-found">
-      <question>
-        Why is NoClassDefFoundError being thrown?
-      </question>
-      <answer>
-        <p>There are two common causes for this error. </p>
-        
-        <p>Firstly, it might simply mean that you do not have the Commons IO 
-        jar in your classpath. FileUpload depends on IO (see 
-        <a href="dependencies.html">dependencies</a>) - you can tell if 
-        this is the case if the missing class is within the 
-        <code>org.apache.commons.io</code> package. </p>
-
-        <p>Secondly this happens when attempting to rely on a shared copy of
-        the Commons FileUpload jar file provided by your web container. The
-        solution is to include the FileUpload jar file as part of your own
-        web application, instead of relying on the container. The same may 
-        hold for FileUpload's IO dependency. </p>
-      </answer>
-    </faq>
-
-    <faq id="whole-path-from-IE">
-      <question>
-        Why does FileItem.getName() return the whole path, and not just the file name?
-      </question>
-      <answer>
-        Internet Explorer provides the entire path to the uploaded file and not
-        just the base file name. Since FileUpload provides exactly what was
-        supplied by the client (browser), you may want to remove this path
-        information in your application. You can do that using the following
-        method from Commons IO (which you already have, since it is used by
-        FileUpload).
-        <pre>
-    String fileName = item.getName();
-    if (fileName != null) {
-        filename = FilenameUtils.getName(filename);
-    }
-        </pre>
-      </answer>
-    </faq>
-  </part>
-
-  <part id="struts">
-    <title>FileUpload and Struts 1</title>
-
-    <faq id="parse-in-action-fails">
-      <question>
-        I'm using FileUpload in an Action, but it's not working. Why?
-      </question>
-      <answer>
-        Struts 1 recognises multipart requests, and parses them automatically,
-        presenting the request parameters to your code in the same manner as
-        if they were regular request parameters. Since Struts has already
-        processed the request, and made it available in your form bean, the
-        input stream is no longer available for parsing, so attempting to do
-        so with FileUpload will fail.
-      </answer>
-    </faq>
-
-    <faq id="howto-parse-in-action">
-      <question>
-        But I need to parse the request myself. How can I do that?
-      </question>
-      <answer>
-        Struts 1 parses multipart a request as a part of the process of populating
-        your form bean from that request. If, for some reason, you need to have
-        full control over the multipart parsing, you can do so by configuring
-        your action mapping without an associated form bean. (A better way of
-        doing this, however, is to replace the default multipart handler with
-        your own. See the Struts 1 documentation for details.)
-      </answer>
-    </faq>
-  </part>
-
-  <part id="flash">
-    <title>FileUpload and Flash</title>
-
-    <faq id="missing-boundary-terminator">
-      <question>
-        I'm using FileUpload to receive an upload from flash, but
-        FileUpload will always throw an Exception "Stream ended unexpectedly".
-        What can I do?
-      </question>
-      <answer>
-        <p>
-          At least as of version 8, Flash contains a known bug: The multipart
-          stream it produces is broken, because the final boundary doesn't
-          contain the suffix "--", which ought to indicate, that no more
-          items are following. Consequently, FileUpload waits for the next
-          item (which it doesn't get) and throws an exception.
-        </p>
-        <p>
-          The problems details and a possible workaround are outlined in
-          <a href="https://issues.apache.org/jira/browse/FILEUPLOAD-143">
-            Bug 143
-          </a>
-          . The workaround suggests to use the streaming API
-          and catch the exception. The resulting code could look like
-          this:
-        </p>
-        <pre><![CDATA[final List<FileItem> items = new ArrayList<FileItem>();
-
-HttpServletRequest servletRequest = [...];
-RequestContext ctx = new ServletRequestContext(servletRequest);
-
-FileItemFactory fileItemFactory = new DiskFileItemFactory();
-
-ServletFileUpload upload = new ServletFileUpload();
-FileItemIterator iter = upload.getItemIterator(ctx);
-try {
-    while (iter.hasNext()) {
-        FileItemStream item = iter.next();
-        FileItem fileItem = fileItemFactory.createItem(item.getFieldName(),
-                                                       item.getContentType(),
-                                                       item.isFormField(),
-                                                       item.getName());
-        Streams.copy(item.openStream(), fileItem.getOutputStream(), true);
-        items.add(fileItem);
-    }
-} catch (MalformedStreamException e) {
-    // Ignore this
-}]]></pre>
-      </answer>
-    </faq>
-  </part>
-
-  <part id="security">
-      <title>FileUpload and Flash</title>
-
-      <faq id="diskfileitem-serializable">
-        <question> I have read, that there is a security problem in Commons FileUpload, because there is a class called
-          DiskFileItem, which can be used for malicious attacks.
-        </question>
-        <answer>
-          <p>
-            It is true, that this class exists, and can be serialized/deserialized in FileUpload versions, up to, and
-            including 1.3.2. It is also true, that a malicious attacker can abuse this possibility to create abitraryly
-            located files (assuming the required permissions) with arbitrary contents, if he gets the opportunity to
-            provide specially crafted data, which is being deserialized by a Java application, which has either of the
-            above versions of Commons FileUpload in the classpath, and which puts no limitations on the classes being
-            deserialized.
-          </p>
-          <p>
-            That being said, we (the Apache Commons team) hold the view, that the actual problem is not the DiskFileItem
-            class, but the "if" in the previous sentence. A Java application should carefully consider, which classes
-            can be deserialized. A typical approach would be, for example, to provide a blacklist, or whitelist of
-            packages, and/or classes, which may, or may not be deserialized.
-          </p>
-          <p>
-            On the other hand, we acknowledge, that the likelyhood of application container vendors taking such a
-            simple security measure is extremely low. So, in order to support the Commons Fileupload users, we have
-            decided to choose a different approach:
-          </p>
-          <p>
-            Beginning with 1.3.3, the class DiskFileItem is still implementing the interface java.io.Serializable.
-            In other words, it still declares itself as serializable, and deserializable to the JVM. In practice,
-            however, an attempt to deserialize an instance of DiskFileItem will trigger an Exception. In the unlikely
-            case, that your application depends on the deserialization of DiskFileItems, you can revert to the
-            previous behavior by setting the system property "org.apache.commons.fileupload.disk.DiskFileItem.serializable"
-            to "true".
-          </p>
-        </answer>
-      </faq>
-  </part>
-</faqs>
diff --git a/wicket-commons-fileupload/src/site/resources/download_fileupload.cgi b/wicket-commons-fileupload/src/site/resources/download_fileupload.cgi
deleted file mode 100644
index 81283bb75a..0000000000
--- a/wicket-commons-fileupload/src/site/resources/download_fileupload.cgi
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-# 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.
-
-
-# Just call the standard mirrors.cgi script. It will use download.html
-# as the input template.
-exec /www/www.apache.org/dyn/mirrors/mirrors.cgi $*
diff --git a/wicket-commons-fileupload/src/site/resources/images/logo.gif b/wicket-commons-fileupload/src/site/resources/images/logo.gif
deleted file mode 100644
index 2e54ed63bd..0000000000
Binary files a/wicket-commons-fileupload/src/site/resources/images/logo.gif and /dev/null differ
diff --git a/wicket-commons-fileupload/src/site/resources/images/logo.png b/wicket-commons-fileupload/src/site/resources/images/logo.png
deleted file mode 100644
index df8e9e5b74..0000000000
Binary files a/wicket-commons-fileupload/src/site/resources/images/logo.png and /dev/null differ
diff --git a/wicket-commons-fileupload/src/site/resources/profile.jacoco b/wicket-commons-fileupload/src/site/resources/profile.jacoco
deleted file mode 100644
index a12755f3ba..0000000000
--- a/wicket-commons-fileupload/src/site/resources/profile.jacoco
+++ /dev/null
@@ -1,17 +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.
-# -----------------------------------------------------------------------------
-#
-# Empty file used to automatically trigger JaCoCo profile from commons parent pom
diff --git a/wicket-commons-fileupload/src/site/site.xml b/wicket-commons-fileupload/src/site/site.xml
deleted file mode 100644
index a990e56fa1..0000000000
--- a/wicket-commons-fileupload/src/site/site.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- 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.
--->
-<project name="FileUpload" xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd">
-
-  <bannerRight>
-    <name>Commons FileUpload</name>
-    <src>/images/logo.png</src>
-    <href>/index.html</href>
-  </bannerRight>
-
-  <body>
-    <menu name="Commons FileUpload">
-      <item name="Overview"                 href="./index.html" />
-      <item name="User guide"               href="./using.html" />
-      <item name="Migration"                href="./migration.html"/>
-      <item name="Streaming API"            href="./streaming.html" />
-      <item name="FAQ"                      href="./faq.html" />
-      <item name="Javadoc (Latest release)" href="./javadocs/api-release/index.html" />
-      <item name="Download"                 href="./download_fileupload.cgi" />
-      <item name="Security Reports"         href="./security-reports.html"/>
-      <item name="Mailing lists"            href="./mail-lists.html" />
-      <item name="Issue Tracking"           href="./issue-tracking.html" />
-      <item name="Team"                     href="./team.html" />
-      <item name="Source repository"        href="./scm.html" />
-    </menu>
-  </body>
-
-</project>
diff --git a/wicket-commons-fileupload/src/site/xdoc/customizing.xml b/wicket-commons-fileupload/src/site/xdoc/customizing.xml
deleted file mode 100644
index a6b6e8a159..0000000000
--- a/wicket-commons-fileupload/src/site/xdoc/customizing.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.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.
--->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-  <properties>
-    <title>Customizing FileUpload</title>
-    <author email="martinc@apache.org">Martin Cooper</author>
-  </properties>
-
-  <body>
-    <section name="Customizing FileUpload">
-      <p>TODO: Document usage of factories and subclassing for customization.</p>
-    </section>
-  </body>
-
-</document>
diff --git a/wicket-commons-fileupload/src/site/xdoc/download_fileupload.xml b/wicket-commons-fileupload/src/site/xdoc/download_fileupload.xml
deleted file mode 100644
index 1a7d0c0571..0000000000
--- a/wicket-commons-fileupload/src/site/xdoc/download_fileupload.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.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.
--->
-<!--
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: download-page-template.xml                            |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:download-page                      |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.componentid (required, alphabetic, lower case)          |
- |    - commons.release.version (required)                              |
- |    - commons.binary.suffix (optional)                                |
- |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
- |                                                                      |
- | 3) Example Properties                                                |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.componentid>math</commons.componentid>                   |
- |    <commons.release.version>1.2</commons.release.version>            |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
--->
-<document>
-  <properties>
-    <title>Download Apache Commons FileUpload</title>
-    <author email="dev@commons.apache.org">Commons Documentation Team</author>
-  </properties>
-  <body>
-    <section name="Download Apache Commons FileUpload">
-    <subsection name="Using a Mirror">
-      <p>
-        We recommend you use a mirror to download our release
-        builds, but you <strong>must</strong> verify the integrity of
-        the downloaded files using signatures downloaded from our main
-        distribution directories. Recent releases (48 hours) may not yet
-        be available from the mirrors.
-      </p>
-
-      <p>
-        You are currently using <b>[preferred]</b>.  If you
-        encounter a problem with this mirror, please select another
-        mirror.  If all mirrors are failing, there are <i>backup</i>
-        mirrors (at the end of the mirrors list) that should be
-        available.
-        <br></br>
-        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
-      </p>
-
-      <form action="[location]" method="get" id="SelectMirror">
-        <p>
-          Other mirrors:
-          <select name="Preferred">
-          [if-any http]
-            [for http]<option value="[http]">[http]</option>[end]
-          [end]
-          [if-any ftp]
-            [for ftp]<option value="[ftp]">[ftp]</option>[end]
-          [end]
-          [if-any backup]
-            [for backup]<option value="[backup]">[backup] (backup)</option>[end]
-          [end]
-          </select>
-          <input type="submit" value="Change"></input>
-        </p>
-      </form>
-
-      <p>
-        The <a href="http://www.apache.org/dist/commons/KEYS">KEYS</a>
-        link links to the code signing keys used to sign the product.
-        The <code>PGP</code> link downloads the OpenPGP compatible signature from our main site.
-        The <code>SHA256</code> link downloads the checksum from the main site.
-      </p>
-    </subsection>
-    </section>
-    <section name="Apache Commons FileUpload 1.4 (requires Java 1.6 or later)">
-      <subsection name="Binaries">
-        <table>
-          <tr>
-              <td><a href="[preferred]/commons/fileupload/binaries/commons-fileupload-1.4-bin.tar.gz">commons-fileupload-1.4-bin.tar.gz</a></td>
-              <td><a href="http://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.4-bin.tar.gz.sha256">sha256</a></td>
-              <td><a href="http://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.4-bin.tar.gz.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/commons/fileupload/binaries/commons-fileupload-1.4-bin.zip">commons-fileupload-1.4-bin.zip</a></td>
-              <td><a href="http://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.4-bin.zip.sha256">sha256</a></td>
-              <td><a href="http://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.4-bin.zip.asc">pgp</a></td>
-          </tr>
-        </table>
-      </subsection>
-      <subsection name="Source">
-        <table>
-          <tr>
-              <td><a href="[preferred]/commons/fileupload/source/commons-fileupload-1.4-src.tar.gz">commons-fileupload-1.4-src.tar.gz</a></td>
-              <td><a href="http://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.4-src.tar.gz.sha256">sha256</a></td>
-              <td><a href="http://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.4-src.tar.gz.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/commons/fileupload/source/commons-fileupload-1.4-src.zip">commons-fileupload-1.4-src.zip</a></td>
-              <td><a href="http://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.4-src.zip.sha256">sha256</a></td>
-              <td><a href="http://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.4-src.zip.asc">pgp</a></td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-    <section name="Archives">
-        <p>
-          Older releases can be obtained from the archives.
-        </p>
-        <ul>
-          <li class="download"><a href="[preferred]/commons/fileupload/">browse download area</a></li>
-          <li><a href="https://archive.apache.org/dist/commons/fileupload/">archives...</a></li>
-        </ul>
-    </section>
-  </body>
-</document>
diff --git a/wicket-commons-fileupload/src/site/xdoc/index.xml b/wicket-commons-fileupload/src/site/xdoc/index.xml
deleted file mode 100644
index bce44e97be..0000000000
--- a/wicket-commons-fileupload/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.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.
--->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-  <properties>
-    <title>Home</title>
-    <author email="martinc@apache.org">Martin Cooper</author>
-  </properties>
-
-  <body>
-    <section name="Commons FileUpload">
-      <p>
-        The Commons <strong>FileUpload</strong> package makes it easy to add
-        robust, high-performance, file upload capability to your servlets and
-        web applications.
-      </p>
-      <p>
-        FileUpload parses HTTP requests which conform to
-        <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>,
-        "Form-based File Upload in HTML". That is, if an HTTP request is
-        submitted using the POST method, and with a content type of
-        "multipart/form-data", then FileUpload can parse that request, and
-        make the results available in a manner easily used by the caller.
-      </p>
-      <p>
-        Starting with version <b>1.3</b>, FileUpload handles 
-        <a href="https://www.ietf.org/rfc/rfc2047.txt">RFC 2047</a> encoded header values.
-      </p>
-
-      <p>The simplest way to send a <i>multipart/form-data</i> request to a server is via a web form, i.e.</p>
-      <source><![CDATA[<form method="POST" enctype="multipart/form-data" action="fup.cgi">
-  File to upload: <input type="file" name="upfile"><br/>
-  Notes about the file: <input type="text" name="note"><br/>
-  <br/>
-  <input type="submit" value="Press"> to upload the file!
-</form>]]></source>
-    </section>
-
-    <section name="Documentation">
-      <p>The following documentation is available:</p>
-      <ul>
-        <li><a href="./using.html">User Guide</a></li>
-        <li><a href="./streaming.html">Streaming API</a></li>
-        <li><a href="./faq.html">Frequently Asked Questions</a></li>
-        <li><a href="./javadocs/api-release/index.html">Javadoc API (Latest release)</a></li>
-        <li><a href="./apidocs/index.html">Javadoc API (Latest development)</a></li>
-        <li><a href="./project-reports.html">Project Reports</a></li>
-        <li><a href="https://dist.apache.org/repos/dist/release/commons/fileupload/RELEASE-NOTES.txt">Release Notes</a></li>
-      </ul>
-      <p>You can also <a href="./scm.html">browse</a> the Subversion repository.</p>
-    </section>
-
-    <section name="Downloading">
-      <subsection name="Full Releases">
-        <p><strong>FileUpload 1.4</strong> - 23 December 2018</p>
-        <ul>
-          <li>Download the binary and source distributions from a mirror site
-            <a href="https://commons.apache.org/fileupload/download_fileupload.cgi">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.3.3</strong> - 13 June 2017</p>
-        <ul>
-          <li>Download the binary and source distributions from a mirror site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.3.2</strong> - 26 May 2016</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.3.1</strong> - 7 February 2014</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.3</strong> - 27 March 2013</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.2.2</strong> - 29 July 2010</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.2.1</strong> - 18 January 2008</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.2</strong> - 13 February 2007</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.1.1</strong> - 08 June 2006</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.1</strong> - 22 Dec 2005</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-        <p><strong>FileUpload 1.0</strong> - 24 Jun 2003</p>
-        <ul>
-          <li>Download the binary and source distributions from the archive site
-            <a href="https://archive.apache.org/dist/commons/fileupload/">here</a>
-          </li>
-        </ul>
-      </subsection>
-
-      <subsection name="Releases Candidates">
-        <p>
-          None available.
-        </p>
-      </subsection>
-    </section>
-
-    <section name="Support">
-      <p>
-        The <a href="mail-lists.html">Apache Commons mailing lists</a> act as
-        the main support forum. The <em>user</em> list is suitable for most library
-        usage queries. The <em>dev</em> list is intended for development discussion.
-        Please remember that the lists are shared between all commons components,
-        so prefix your e-mail subject line with <em>[fileupload]</em>.
-      </p>
-      <p>
-        Issues may be reported via <a href="issue-tracking.html">ASF JIRA</a>.
-      </p>
-    </section>
-  </body>
-
-</document>
diff --git a/wicket-commons-fileupload/src/site/xdoc/issue-tracking.xml b/wicket-commons-fileupload/src/site/xdoc/issue-tracking.xml
deleted file mode 100644
index 4a01f51016..0000000000
--- a/wicket-commons-fileupload/src/site/xdoc/issue-tracking.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.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.
--->
-<!--
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: issue-tracking-template.xml                           |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:jira-page                          |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.jira.id  (required, alphabetic, upper case)             |
- |    - commons.jira.pid (required, numeric)                            |
- |                                                                      |
- | 3) Example Properties                                                |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.jira.id>MATH</commons.jira.id>                           |
- |    <commons.jira.pid>12310485</commons.jira.pid>                     |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
--->
-<document>
-  <properties>
-    <title>Commons FileUpload Issue tracking</title>
-    <author email="dev@commons.apache.org">Commons Documentation Team</author>
-  </properties>
-  <body>
-
-    <section name="Commons FileUpload Issue tracking">
-      <p>
-      Commons FileUpload uses <a href="https://issues.apache.org/jira/">ASF JIRA</a> for tracking issues.
-      See the <a href="https://issues.apache.org/jira/browse/FILEUPLOAD">Commons FileUpload JIRA project page</a>.
-      </p>
-
-      <p>
-      To use JIRA you may need to <a href="https://issues.apache.org/jira/secure/Signup!default.jspa">create an account</a>
-      (if you have previously created/updated Commons issues using Bugzilla an account will have been automatically
-      created and you can use the <a href="https://issues.apache.org/jira/secure/ForgotPassword!default.jspa">Forgot Password</a>
-      page to get a new password).
-      </p>
-
-      <p>
-      If you would like to report a bug, or raise an enhancement request with
-      Commons FileUpload please do the following:
-      <ol>
-        <li><a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310476&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=3&amp;status=4">Search existing open bugs</a>.
-            If you find your issue listed then please add a comment with your details.</li>
-        <li><a href="mail-lists.html">Search the mailing list archive(s)</a>.
-            You may find your issue or idea has already been discussed.</li>
-        <li>Decide if your issue is a bug or an enhancement.</li>
-        <li>Submit either a <a href="https://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310476&amp;issuetype=1&amp;priority=4&amp;assignee=-1">bug report</a>
-            or <a href="https://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310476&amp;issuetype=4&amp;priority=4&amp;assignee=-1">enhancement request</a>.</li>
-      </ol>
-      </p>
-
-      <p>
-      Please also remember these points:
-      <ul>
-        <li>the more information you provide, the better we can help you</li>
-        <li>test cases are vital, particularly for any proposed enhancements</li>
-        <li>the developers of Commons FileUpload are all unpaid volunteers</li>
-      </ul>
-      </p>
-
-      <p>
-      For more information on subversion and creating patches see the
-      <a href="http://www.apache.org/dev/contributors.html">Apache Contributors Guide</a>.
-      </p>
-
-      <p>
-      You may also find these links useful:
-      <ul>
-        <li><a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310476&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=3&amp;status=4">All Open Commons FileUpload bugs</a></li>
-        <li><a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310476&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=5&amp;status=6">All Resolved Commons FileUpload bugs</a></li>
-        <li><a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310476&amp;sorter/field=issuekey&amp;sorter/order=DESC">All Commons FileUpload bugs</a></li>
-      </ul>
-      </p>
-    </section>
-  </body>
-</document>
diff --git a/wicket-commons-fileupload/src/site/xdoc/mail-lists.xml b/wicket-commons-fileupload/src/site/xdoc/mail-lists.xml
deleted file mode 100644
index c47a77fb3b..0000000000
--- a/wicket-commons-fileupload/src/site/xdoc/mail-lists.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.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.
--->
-<!--
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: mail-lists-template.xml                               |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:mail-page                          |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.componentid (required, alphabetic, lower case)          |
- |                                                                      |
- | 3) Example Properties                                                |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.componentid>math</commons.componentid>                   |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
--->
-<document>
-  <properties>
-    <title>Commons FileUpload Mailing Lists</title>
-    <author email="dev@commons.apache.org">Commons Documentation Team</author>
-  </properties>
-  <body>
-
-    <section name="Overview">
-      <p>
-        <a href="index.html">Commons FileUpload</a> shares mailing lists with all the other 
-        <a href="https://commons.apache.org/components.html">Commons Components</a>.
-        To make it easier for people to only read messages related to components they are interested in,
-        the convention in Commons is to prefix the subject line of messages with the component's name,
-        for example:
-        <ul>
-          <li>[fileupload] Problem with the ...</li>
-        </ul>
-      </p>
-      <p>
-        Questions related to the usage of Commons FileUpload should be posted to the
-        <a href="https://mail-archives.apache.org/mod_mbox/commons-user/">User List</a>.
-        <br />
-        The <a href="https://mail-archives.apache.org/mod_mbox/commons-dev/">Developer List</a>
-        is for questions and discussion related to the development of Commons FileUpload.
-        <br />
-        Please do not cross-post; developers are also subscribed to the user list.
-      </p>
-      <p>
-        <strong>Note:</strong> please don't send patches or attachments to any of the mailing lists.
-        Patches are best handled via the <a href="issue-tracking.html">Issue Tracking</a> system. 
-        Otherwise, please upload the file to a public server and include the URL in the mail. 
-      </p>
-    </section>
-
-    <section name="Commons FileUpload Mailing Lists">
-      <p>
-        <strong>Please prefix the subject line of any messages for <a href="index.html">Commons FileUpload</a>
-        with <i>[fileupload]</i></strong> - <i>thanks!</i>
-        <br />
-        <br />
-      </p>
-
-      <table>
-        <tr>
-          <th>Name</th>
-          <th>Subscribe</th>
-          <th>Unsubscribe</th>
-          <th>Post</th>
-          <th>Archive</th>
-          <th>Other Archives</th>
-        </tr>
-
-
-        <tr>
-          <td>
-            <strong>Commons User List</strong>
-            <br /><br />
-            Questions on using Commons FileUpload.
-            <br /><br />
-          </td>
-          <td><a href="mailto:user-subscribe@commons.apache.org">Subscribe</a></td>
-          <td><a href="mailto:user-unsubscribe@commons.apache.org">Unsubscribe</a></td>
-          <td><a href="mailto:user@commons.apache.org?subject=[fileupload]">Post</a></td>
-          <td><a href="https://mail-archives.apache.org/mod_mbox/commons-user/">mail-archives.apache.org</a></td>
-          <td><a href="http://markmail.org/list/org.apache.commons.users/">markmail.org</a><br />
-              <a href="http://www.mail-archive.com/user@commons.apache.org/">www.mail-archive.com</a><br />
-              <a href="http://news.gmane.org/gmane.comp.jakarta.commons.devel">news.gmane.org</a>
-          </td>
-        </tr>
-
-
-        <tr>
-          <td>
-            <strong>Commons Developer List</strong>
-            <br /><br />
-            Discussion of development of Commons FileUpload.
-            <br /><br />
-          </td>
-          <td><a href="mailto:dev-subscribe@commons.apache.org">Subscribe</a></td>
-          <td><a href="mailto:dev-unsubscribe@commons.apache.org">Unsubscribe</a></td>
-          <td><a href="mailto:dev@commons.apache.org?subject=[fileupload]">Post</a></td>
-          <td><a href="https://mail-archives.apache.org/mod_mbox/commons-dev/">mail-archives.apache.org</a></td>
-          <td><a href="http://markmail.org/list/org.apache.commons.dev/">markmail.org</a><br />
-              <a href="http://www.mail-archive.com/dev@commons.apache.org/">www.mail-archive.com</a><br />
-              <a href="http://news.gmane.org/gmane.comp.jakarta.commons.devel">news.gmane.org</a>
-          </td>
-        </tr>
-
-
-        <tr>
-          <td>
-            <strong>Commons Issues List</strong>
-            <br /><br />
-            Only for e-mails automatically generated by the <a href="issue-tracking.html">issue tracking</a> system.
-            <br /><br />
-          </td>
-          <td><a href="mailto:issues-subscribe@commons.apache.org">Subscribe</a></td>
-          <td><a href="mailto:issues-unsubscribe@commons.apache.org">Unsubscribe</a></td>
-          <td><i>read only</i></td>
-          <td><a href="https://mail-archives.apache.org/mod_mbox/commons-issues/">mail-archives.apache.org</a></td>
-          <td><a href="http://markmail.org/list/org.apache.commons.issues/">markmail.org</a><br />
-              <a href="http://www.mail-archive.com/issues@commons.apache.org/">www.mail-archive.com</a>
-          </td>
-        </tr>
-
-
-        <tr>
-          <td>
-            <strong>Commons Commits List</strong>
-            <br /><br />
-            Only for e-mails automatically generated by the <a href="scm.html">source control</a> sytem.
-            <br /><br />
-          </td>
-          <td><a href="mailto:commits-subscribe@commons.apache.org">Subscribe</a></td>
-          <td><a href="mailto:commits-unsubscribe@commons.apache.org">Unsubscribe</a></td>
-          <td><i>read only</i></td>
-          <td><a href="https://mail-archives.apache.org/mod_mbox/commons-commits/">mail-archives.apache.org</a></td>
-          <td><a href="http://markmail.org/list/org.apache.commons.commits/">markmail.org</a><br />
-              <a href="http://www.mail-archive.com/commits@commons.apache.org/">www.mail-archive.com</a>
-          </td>
-        </tr>
-
-      </table>
-
-    </section>
-    <section name="Apache Mailing Lists">
-      <p>
-        Other mailing lists which you may find useful include:
-      </p>
-
-      <table>
-        <tr>
-          <th>Name</th>
-          <th>Subscribe</th>
-          <th>Unsubscribe</th>
-          <th>Post</th>
-          <th>Archive</th>
-          <th>Other Archives</th>
-        </tr>
-        <tr>
-          <td>
-            <strong>Apache Announce List</strong>
-            <br /><br />
-            General announcements of Apache project releases.
-            <br /><br />
-          </td>
-          <td><a class="externalLink" href="mailto:announce-subscribe@apache.org">Subscribe</a></td> 
-          <td><a class="externalLink" href="mailto:announce-unsubscribe@apache.org">Unsubscribe</a></td> 
-          <td><i>read only</i></td>
-          <td><a class="externalLink" href="https://mail-archives.apache.org/mod_mbox/www-announce/">mail-archives.apache.org</a></td> 
-          <td><a class="externalLink" href="http://markmail.org/list/org.apache.announce/">markmail.org</a><br />
-              <a class="externalLink" href="http://old.nabble.com/Apache-News-and-Announce-f109.html">old.nabble.com</a><br />
-              <a class="externalLink" href="http://www.mail-archive.com/announce@apache.org/">www.mail-archive.com</a><br />
-              <a class="externalLink" href="http://news.gmane.org/gmane.comp.apache.announce">news.gmane.org</a>
-          </td>
-        </tr>
-      </table>
-
-    </section>
-  </body>
-</document>
diff --git a/wicket-commons-fileupload/src/site/xdoc/overview.xml b/wicket-commons-fileupload/src/site/xdoc/overview.xml
deleted file mode 100644
index c73efb997f..0000000000
--- a/wicket-commons-fileupload/src/site/xdoc/overview.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.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.
--->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-  <properties>
-    <title>Fileupload Overview</title>
-    <author email="rdonkin@apache.org">Robert Burrell Donkin</author>
-  </properties>
-
-  <body>
-    <section name="Using FileUpload">
-      <p>
-        Your application should detect whether or not FileUpload should be
-        invoked, based on the HTTP method and the content type of the request.
-      </p>
-      <p>
-        Assuming that you have decided that FileUpload should be invoked, you
-        might write the following code to handle a file upload request:
-<source><![CDATA[DiskFileItemFactory factory = new DiskFileItemFactory();
-// Set upload parameters
-factory.setSizeThreshold(MAX_MEMORY_SIZE);
-factory.setRepository(new File(TEMP_DIR));
-
-// Create a new file upload handler
-ServletFileUpload upload = new ServletFileUpload( factory );
-upload.setSizeMax(MAX_UPLOAD_SIZE);
-
-// Parse the request
-List<FileItem> items = upload.parseRequest(request);
-
-// Process the uploaded fields
-Iterator<FileItem> iter = items.iterator();
-while (iter.hasNext()) {
-    FileItem item = iter.next();
-
-    if (item.isFormField()) {
-        processTextParameter(request, item);
-    } else {
-        processFileParameter(request, item);
-    }
-}
-]]></source>
-      </p>
-    </section>
-  </body>
-
-</document>
diff --git a/wicket-commons-fileupload/src/site/xdoc/security-reports.xml b/wicket-commons-fileupload/src/site/xdoc/security-reports.xml
deleted file mode 100644
index 09a2ab6b64..0000000000
--- a/wicket-commons-fileupload/src/site/xdoc/security-reports.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.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.
--->
-<document>
-    <properties>
-        <title>Commons FileUpload Security Reports</title>
-        <author email="dev@commons.apache.org">Commons Documentation Team</author>
-    </properties>
-    <body>
-      <section name="Apache Commons FileUpload Security Vulnerabilities">
-        <p>This page lists all security vulnerabilities fixed in
-        released versions of Apache Commons FileUpload. Each
-        vulnerability is given a security impact rating by the
-        development team - please note that this rating may vary from
-        platform to platform. We also list the versions of Commons
-        FileUpload the flaw is known to affect, and where a flaw has not
-        been verified list the version with a question mark.</p>
-
-        <p>Please note that binary patches are never provided. If you
-        need to apply a source code patch, use the building
-        instructions for the Commons FileUpload version that you are
-        using.</p>
-
-        <p>If you need help on building Commons FileUpload or other help
-        on following the instructions to mitigate the known
-        vulnerabilities listed here, please send your questions to the
-        public <a href="mail-lists.html">Commons Users mailing
-        list</a>.</p>
-
-        <p>If you have encountered an unlisted security vulnerability
-        or other unexpected behavior that has security impact, or if
-        the descriptions here are incomplete, please report them
-        privately to the Apache Security Team. Thank you.</p>
-
-        <p>For information about reporting or asking questions about
-        security problems, please see the <a
-        href="https://commons.apache.org/security.html">security page
-        of the Apache Commons project</a>.</p>
-
-        <subsection name="Fixed in Apache Commons FileUpload 1.5">
-          <p><b>Important: Denial of Service</b> <a
-          href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24998">CVE-2023-24998</a></p>
- 
-          <p>Apache Commons FileUpload before 1.5 does not provide an option to
-          limit the number of request parts to be processed resulting in the
-          possibility of an attacker triggering a DoS with a malicious upload or
-          series of uploads. Note that, like all of the file upload limits, the
-          new configuration option (FileUploadBase#setFileCountMax) is not
-          enabled by default and must be explicitly configured.</p>
-
-          <p>This was fixed in commit
-          <a href="https://github.com/apache/commons-fileupload/commit/e20c04990f7420ca917e96a84cec58b13a1b3d17"
-          >e20c0499</a>.</p>
-
-          <p>Affects: 1.0? - 1.4</p>
-        </subsection>
-
-        <subsection name="Notes on Apache Commons FileUpload 1.3.3">
-          <p>
-            Up to, and including version 1.3.2, the class org.apache.commons.fileupload2.disk.DiskFileItem can be serialized and 
-            deserialized. A malicious attacker can abuse this feature to arbitrarily create files with any content, assuming the 
-            required permissions for a given file location. If an attacker gets the opportunity to provide maliciously crafted data 
-            and an application puts no limitations on classes being deserialized, that data can then be deserialized by a Java 
-            application.
-          </p>
-          <p>
-            We hold the view that the actual problem is not the DiskFileItem class, but that a Java application should carefully 
-            consider which classes can be deserialized. A typical approach would be, for example, to provide a deny list, or an 
-            accept list of packages, and/or classes, which may, or may not be deserialized.
-          </p>
-          <p>
-            We acknowledge that the likelihood of application container vendors taking such a simple security measure is extremely 
-            low. In order to better support Commons Fileupload users, we chose a different approach.
-          </p>
-          <p>
-            Starting with version 1.3.3, the class DiskFileItem still implements the interface java.io.Serializable but attempts 
-            to deserialize an instance of DiskFileItem will trigger an Exception. In the unlikely case, that your application 
-            depends on the deserialization of DiskFileItems, you can revert to the previous behavior by setting the system property 
-            "org.apache.commons.fileupload.disk.DiskFileItem.serializable" to "true".
-          </p>
-        </subsection>
-
-        <subsection name="Fixed in Apache Commons FileUpload 1.3.2">
-          <p><b>Low: Denial of Service</b> <a
-          href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3092">CVE-2016-3092</a></p>
- 
-          <p>Specially crafted input can trigger a DoS (slow uploads), if the size of the MIME
-          boundary is close to the size of the buffer in MultipartStream. This is also fixed
-          for <a href="https://tomcat.apache.org/security.html">Apache Tomcat</a>.</p>
-
-          <p>This was fixed in revision
-          <a href="http://svn.apache.org/viewvc?view=revision&amp;revision=1743480">1743480</a>.</p>
-
-          <p>Affects: 1.0? - 1.3.1</p>
-        </subsection>
-
-        <subsection name="Fixed in Apache Commons FileUpload 1.3.1">
-          <p><b>Low: Denial of Service</b> <a
-          href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=2014-0050">CVE-2014-0050</a></p>
-
-          <p>MultipartStream.java in Apache Commons FileUpload before 1.3.1, as used in
-          <a href="https://tomcat.apache.org/security.html">Apache Tomcat</a>,
-          JBoss Web, and other products, allows remote attackers to cause a denial of service (infinite
-          loop and CPU consumption) via a crafted Content-Type header that bypasses a loop's intended
-          exit conditions.</p>
-
-          <p>This was fixed in revision
-          <a href="http://svn.apache.org/viewvc?view=revision&amp;revision=1565143">1565143</a>.</p>
-
-          <p>Affects: 1.0? - 1.3</p>
-        </subsection>
-
-        <subsection name="Fixed in Apache Commons FileUpload 1.3">
-
-          <p><b>Low: Improved Documentation for Multitenancy</b> <a
-          href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=2013-0248">CVE-2013-0248</a></p>
-
... 2684 lines suppressed ...