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:11 UTC

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

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 ...