You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ba...@apache.org on 2025/11/05 15:32:35 UTC

(jackrabbit) branch JCR-5205 updated: JCR-5202: Migrate to jakarta.servlet

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

baedke pushed a commit to branch JCR-5205
in repository https://gitbox.apache.org/repos/asf/jackrabbit.git


The following commit(s) were added to refs/heads/JCR-5205 by this push:
     new 7b3c8e10d JCR-5202: Migrate to jakarta.servlet
7b3c8e10d is described below

commit 7b3c8e10dec3d13ca162ec2d81ff0336c314b65c
Author: Manfred Baedke <ma...@gmail.com>
AuthorDate: Wed Nov 5 16:31:49 2025 +0100

    JCR-5202: Migrate to jakarta.servlet
    
    done
---
 jackrabbit-it-osgi/pom.xml                         | 15 ++--
 jackrabbit-it-osgi/test-bundles.xml                |  5 +-
 jackrabbit-jcr-server/pom.xml                      |  8 +--
 .../server/BasicCredentialsProvider.java           |  4 +-
 .../jackrabbit/server/CredentialsProvider.java     |  4 +-
 .../apache/jackrabbit/server/SessionProvider.java  |  4 +-
 .../jackrabbit/server/SessionProviderImpl.java     |  4 +-
 .../jackrabbit/server/jcr/JCRWebdavServer.java     |  4 +-
 .../org/apache/jackrabbit/server/package-info.java |  2 +-
 .../server/remoting/davex/DavexServletService.java |  6 +-
 .../server/remoting/davex/JcrRemotingServlet.java  | 15 ++--
 .../jackrabbit/server/util/HttpMultipartPost.java  | 81 ++++++++++++++++------
 .../apache/jackrabbit/server/util/RequestData.java |  8 +--
 .../webdav/jcr/DavResourceFactoryImpl.java         |  2 +-
 .../webdav/jcr/EventJournalResourceImpl.java       |  2 +-
 .../webdav/jcr/JCRWebdavServerServlet.java         |  4 +-
 .../webdav/simple/DavSessionProviderImpl.java      |  2 +-
 .../webdav/simple/SimpleWebdavServlet.java         |  4 +-
 .../server/BasicCredentialsProviderTest.java       | 28 ++++----
 .../jackrabbit/webdav/server/WebDAVTestBase.java   |  9 ++-
 jackrabbit-jcr-servlet/pom.xml                     |  5 +-
 .../servlet/AbstractRepositoryServlet.java         |  8 +--
 .../servlet/ContextRepositoryServlet.java          |  2 +-
 .../servlet/FilterRepositoryFactory.java           |  4 +-
 .../jackrabbit/servlet/JNDIBindingServlet.java     |  4 +-
 .../jackrabbit/servlet/ServletRepository.java      |  4 +-
 .../servlet/ServletRepositoryFactory.java          |  4 +-
 .../jackrabbit/JackrabbitRepositoryServlet.java    |  2 +-
 .../servlet/jackrabbit/StatisticsServlet.java      |  8 +--
 .../servlet/login/AbstractLoginFilter.java         | 16 ++---
 .../jackrabbit/servlet/login/BasicLoginFilter.java |  2 +-
 .../servlet/login/ContainerLoginFilter.java        |  4 +-
 .../jackrabbit/servlet/login/NullLoginFilter.java  |  2 +-
 jackrabbit-parent/pom.xml                          | 22 +++---
 jackrabbit-spi2dav/pom.xml                         |  4 +-
 .../org/apache/jackrabbit/standalone/Main.java     | 14 +---
 jackrabbit-webapp/pom.xml                          |  2 +-
 .../apache/jackrabbit/j2ee/BootstrapConfig.java    |  4 +-
 .../org/apache/jackrabbit/j2ee/DerbyShutdown.java  |  4 +-
 .../java/org/apache/jackrabbit/j2ee/Installer.java |  6 +-
 .../org/apache/jackrabbit/j2ee/JNDIConfig.java     |  4 +-
 .../jackrabbit/j2ee/RepositoryAccessServlet.java   |  6 +-
 .../jackrabbit/j2ee/RepositoryStartupServlet.java  |  8 +--
 .../jackrabbit/j2ee/ServletExceptionWithCause.java |  2 +-
 jackrabbit-webdav/pom.xml                          |  5 +-
 .../jackrabbit/webdav/DavServletRequest.java       |  2 +-
 .../jackrabbit/webdav/DavServletResponse.java      |  2 +-
 .../jackrabbit/webdav/WebdavRequestImpl.java       | 32 ++++-----
 .../jackrabbit/webdav/WebdavResponseImpl.java      |  6 +-
 .../jackrabbit/webdav/header/CodedUrlHeader.java   |  2 +-
 .../jackrabbit/webdav/header/DepthHeader.java      |  2 +-
 .../apache/jackrabbit/webdav/header/IfHeader.java  |  2 +-
 .../jackrabbit/webdav/header/OverwriteHeader.java  |  2 +-
 .../webdav/header/PollTimeoutHeader.java           |  2 +-
 .../jackrabbit/webdav/header/TimeoutHeader.java    |  2 +-
 .../jackrabbit/webdav/header/package-info.java     |  2 +-
 .../jackrabbit/webdav/io/InputContextImpl.java     |  2 +-
 .../jackrabbit/webdav/io/OutputContextImpl.java    |  2 +-
 .../apache/jackrabbit/webdav/io/package-info.java  |  2 +-
 .../webdav/observation/package-info.java           |  2 +-
 .../jackrabbit/webdav/ordering/package-info.java   |  2 +-
 .../org/apache/jackrabbit/webdav/package-info.java |  2 +-
 .../webdav/server/AbstractWebdavServlet.java       |  8 +--
 .../jackrabbit/webdav/server/package-info.java     |  2 +-
 .../webdav/transaction/package-info.java           |  2 +-
 .../apache/jackrabbit/webdav/util/CSRFUtil.java    |  2 +-
 .../jackrabbit/webdav/util/package-info.java       |  2 +-
 .../jackrabbit/webdav/version/package-info.java    |  2 +-
 .../webdav/io/OutputContextImplTest.java           |  6 +-
 .../jackrabbit/webdav/util/CSRFUtilTest.java       | 28 ++++----
 70 files changed, 264 insertions(+), 213 deletions(-)

diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml
index 48fd82b8f..c175c270d 100644
--- a/jackrabbit-it-osgi/pom.xml
+++ b/jackrabbit-it-osgi/pom.xml
@@ -95,14 +95,19 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>commons-fileupload</groupId>
-      <artifactId>commons-fileupload</artifactId>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-fileupload2-jakarta-servlet5</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <version>3.1.0</version>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-fileupload2-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>jakarta.servlet</groupId>
+      <artifactId>jakarta.servlet-api</artifactId>
+      <version>5.0.0</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/jackrabbit-it-osgi/test-bundles.xml b/jackrabbit-it-osgi/test-bundles.xml
index 26f981483..a36271260 100644
--- a/jackrabbit-it-osgi/test-bundles.xml
+++ b/jackrabbit-it-osgi/test-bundles.xml
@@ -29,10 +29,11 @@
       <scope>test</scope>
       <includes>
         <include>javax.jcr:jcr</include>
-        <include>javax.servlet:javax.servlet-api</include>
+        <include>jakarta.servlet:jakarta.servlet-api</include>
         <include>commons-io:commons-io</include>
         <include>org.apache.commons:commons-collections4</include>
-        <include>commons-fileupload:commons-fileupload</include>
+        <include>org.apache.commons:commons-fileupload2-jakarta-servlet5</include>
+        <include>org.apache.commons:commons-fileupload2-core</include>
         <include>org.apache.jackrabbit:jackrabbit-jcr-commons</include>
         <include>org.apache.jackrabbit:jackrabbit-spi</include>
         <include>org.apache.jackrabbit:jackrabbit-spi-commons</include>
diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml
index 8fb502e10..04146d05a 100644
--- a/jackrabbit-jcr-server/pom.xml
+++ b/jackrabbit-jcr-server/pom.xml
@@ -207,13 +207,13 @@
       <artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
+      <groupId>jakarta.servlet</groupId>
+      <artifactId>jakarta.servlet-api</artifactId>
       <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>commons-fileupload</groupId>
-      <artifactId>commons-fileupload</artifactId>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-fileupload2-jakarta-servlet5</artifactId>
     </dependency>
 
     <!-- OSGi support -->
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/BasicCredentialsProvider.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/BasicCredentialsProvider.java
index fb810b372..5de3dcb78 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/BasicCredentialsProvider.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/BasicCredentialsProvider.java
@@ -23,8 +23,8 @@ import javax.jcr.Credentials;
 import javax.jcr.LoginException;
 import javax.jcr.SimpleCredentials;
 import javax.jcr.GuestCredentials;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/CredentialsProvider.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/CredentialsProvider.java
index 63a1920c8..d2debc506 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/CredentialsProvider.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/CredentialsProvider.java
@@ -18,8 +18,8 @@ package org.apache.jackrabbit.server;
 
 import javax.jcr.Credentials;
 import javax.jcr.LoginException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * This Interface defines a provider for the credentials.
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/SessionProvider.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/SessionProvider.java
index 0fec8622e..db05a9c77 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/SessionProvider.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/SessionProvider.java
@@ -20,8 +20,8 @@ import javax.jcr.LoginException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * This Interface defines a provider for repository sessions
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/SessionProviderImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/SessionProviderImpl.java
index 52054af9f..1ce398470 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/SessionProviderImpl.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/SessionProviderImpl.java
@@ -25,8 +25,8 @@ import javax.jcr.LoginException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * This class implements a default session provider based on a given
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/jcr/JCRWebdavServer.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/jcr/JCRWebdavServer.java
index 461b58187..ec73b0c77 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/jcr/JCRWebdavServer.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/jcr/JCRWebdavServer.java
@@ -37,8 +37,8 @@ import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletResponse;
 
 import java.net.URI;
 import java.net.URISyntaxException;
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/package-info.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/package-info.java
index 03b39e9c9..4110a3f8a 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/package-info.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.server;
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/DavexServletService.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/DavexServletService.java
index 7c6b35b57..23c58a95d 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/DavexServletService.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/DavexServletService.java
@@ -28,9 +28,9 @@ import javax.jcr.LoginException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JcrRemotingServlet.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JcrRemotingServlet.java
index 714bf1473..595a97de9 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JcrRemotingServlet.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JcrRemotingServlet.java
@@ -36,10 +36,10 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Workspace;
 import javax.jcr.nodetype.NodeType;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.server.util.RequestData;
@@ -624,7 +624,12 @@ public abstract class JcrRemotingServlet extends JCRWebdavServerServlet {
                 // need to create the node
                 // TODO: won't work for SNS
                 String nPath = parent.getPath() + "/" + nodeName;
-                String ntName = data.getParameter(nPath + "/" + JcrConstants.JCR_PRIMARYTYPE);
+                String ntName = null;
+                try {
+                    ntName = data.getParameter(nPath + "/" + JcrConstants.JCR_PRIMARYTYPE);
+                } catch (IOException e) {
+                    throw new RepositoryException(e);
+                }
                 if (ntName == null) {
                     parent = parent.addNode(nodeName);
                 } else {
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java
index 26b1cb7c5..433efa375 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java
@@ -16,24 +16,23 @@
  */
 package org.apache.jackrabbit.server.util;
 
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileItemFactory;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.fileupload2.core.DiskFileItemFactory;
+import org.apache.commons.fileupload2.core.FileItem;
+import org.apache.commons.fileupload2.core.FileItemFactory;
+import org.apache.commons.fileupload2.core.FileUploadException;
+import org.apache.commons.fileupload2.core.RequestContext;
+import org.apache.commons.fileupload2.jakarta.servlet5.JakartaServletFileUpload;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.file.PathUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
 
 /**
  * <code>HttpMultipartPost</code>...
@@ -53,23 +52,65 @@ class HttpMultipartPost {
     }
 
     private static FileItemFactory getFileItemFactory(File tmpDir) {
-        DiskFileItemFactory fiFactory = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, tmpDir);
-        return fiFactory;
+        return DiskFileItemFactory.builder().setFile(tmpDir == null ? PathUtils.getTempDirectory().toFile() : tmpDir).get();
     }
 
     private void extractMultipart(HttpServletRequest request, File tmpDir)
             throws IOException {
-        if (!ServletFileUpload.isMultipartContent(request)) {
+        if (!JakartaServletFileUpload.isMultipartContent(request)) {
             log.debug("Request does not contain multipart content -> ignoring.");
             return;
         }
 
-        ServletFileUpload upload = new ServletFileUpload(getFileItemFactory(tmpDir));
+        JakartaServletFileUpload upload = new JakartaServletFileUpload(getFileItemFactory(tmpDir)) {
+
+            @Override
+            public List<FileItem> parseRequest(final RequestContext requestContext) throws FileUploadException {
+                final List<FileItem> itemList = new ArrayList<>();
+                var successful = false;
+                try {
+                    final var fileItemFactory = Objects.requireNonNull(getFileItemFactory(), "No FileItemFactory has been set.");
+                    final var buffer = new byte[IOUtils.DEFAULT_BUFFER_SIZE];
+                    getItemIterator(requestContext).forEachRemaining(fileItemInput -> {
+                        // Don't use getName() here to prevent an InvalidFileNameException.
+                        final FileItem fileItem = (FileItem) fileItemFactory.fileItemBuilder()
+                                .setFieldName(fileItemInput.getFieldName())
+                                .setContentType(fileItemInput.getContentType())
+                                .setFormField(fileItemInput.isFormField())
+                                .setFileItemHeaders(fileItemInput.getHeaders())
+                                .get();
+                        itemList.add((FileItem) fileItem);
+                        try (var inputStream = fileItemInput.getInputStream();
+                             var 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);
+                        }
+                    });
+                    successful = true;
+                    return itemList;
+                } catch (final FileUploadException e) {
+                    throw e;
+                } catch (final IOException e) {
+                    throw new FileUploadException(e.getMessage(), e);
+                } finally {
+                    if (!successful) {
+                        for (final FileItem fileItem : itemList) {
+                            try {
+                                fileItem.delete();
+                            } catch (final Exception ignored) {}
+                        }
+                    }
+                }
+            }
+        };
         // make sure the content disposition headers are read with the charset
         // specified in the request content type (or UTF-8 if no charset is specified).
         // see JCR
         if (request.getCharacterEncoding() == null) {
-            upload.setHeaderEncoding("UTF-8");
+            upload.setHeaderCharset(StandardCharsets.UTF_8);
         }
         try {
             @SuppressWarnings("unchecked")
@@ -119,7 +160,7 @@ class HttpMultipartPost {
      * 
      * @see FileItem#delete()
      */
-    synchronized void dispose() {
+    synchronized void dispose() throws IOException {
         checkInitialized();
 
         for (List<FileItem> fileItems : nameToItems.values()) {
@@ -199,7 +240,7 @@ class HttpMultipartPost {
      * @return the string of the first value or <code>null</code> if the
      *         parameter does not exist
      */
-    String getParameter(String name) {
+    String getParameter(String name) throws IOException {
         checkInitialized();
         List<FileItem> l = nameToItems.get(name);
         if (l == null || l.isEmpty()) {
@@ -227,7 +268,7 @@ class HttpMultipartPost {
      * @return a string array of values or <code>null</code> if no entry with the
      * given name exists.
      */
-    String[] getParameterValues(String name) {
+    String[] getParameterValues(String name) throws IOException {
         checkInitialized();
         List<FileItem> l = nameToItems.get(name);
         if (l == null || l.isEmpty()) {
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/RequestData.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/RequestData.java
index 6f5230528..43e73417a 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/RequestData.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/RequestData.java
@@ -16,7 +16,7 @@
  */
 package org.apache.jackrabbit.server.util;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -39,7 +39,7 @@ public class RequestData {
     /**
      * Dispose resources used.
      */
-    public void dispose() {
+    public void dispose() throws IOException {
         mpReq.dispose();
     }
 
@@ -68,7 +68,7 @@ public class RequestData {
      * @return the string of the first value or <code>null</code> if the
      *         parameter does not exist
      */
-    public String getParameter(String name) {
+    public String getParameter(String name) throws IOException {
         String ret = mpReq.getParameter(name);
         return (ret == null) ? request.getParameter(name) : ret;
     }
@@ -99,7 +99,7 @@ public class RequestData {
      * @return a string array of values or <code>null</code> if the parameter
      *         does not exist.
      */
-    public String[] getParameterValues(String name) {
+    public String[] getParameterValues(String name) throws IOException {
         String[] ret = mpReq.getParameterValues(name);
         return ret == null ? request.getParameterValues(name) : ret;
     }
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java
index 79b867e18..3acd011b4 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java
@@ -24,7 +24,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.observation.EventJournal;
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionHistory;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.util.Text;
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/EventJournalResourceImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/EventJournalResourceImpl.java
index 868ee32f3..b377e1ae8 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/EventJournalResourceImpl.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/EventJournalResourceImpl.java
@@ -31,7 +31,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventJournal;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JCRWebdavServerServlet.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JCRWebdavServerServlet.java
index 2a78844d9..48b0c0524 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JCRWebdavServerServlet.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JCRWebdavServerServlet.java
@@ -38,8 +38,8 @@ import org.slf4j.LoggerFactory;
 
 import javax.jcr.Repository;
 import javax.jcr.Session;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
 
 /**
  * JCRWebdavServerServlet provides request/response handling for the
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java
index 6fc82bba2..3ac5a41cd 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java
@@ -31,7 +31,7 @@ import javax.jcr.NoSuchWorkspaceException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 
 /**
  * Simple implementation of the {@link org.apache.jackrabbit.webdav.DavSessionProvider}
diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java
index a41eb1292..643052eaa 100644
--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java
+++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java
@@ -36,8 +36,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.jcr.Repository;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
diff --git a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/BasicCredentialsProviderTest.java b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/BasicCredentialsProviderTest.java
index 68db3a6c4..0ec1cd9f4 100644
--- a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/BasicCredentialsProviderTest.java
+++ b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/BasicCredentialsProviderTest.java
@@ -18,20 +18,20 @@ package org.apache.jackrabbit.server;
 
 import junit.framework.TestCase;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpUpgradeHandler;
-import javax.servlet.http.Part;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpUpgradeHandler;
+import jakarta.servlet.http.Part;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
 import javax.jcr.LoginException;
 import javax.jcr.Credentials;
 import javax.jcr.SimpleCredentials;
diff --git a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java
index 97c9347b8..6615ae34b 100644
--- a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java
+++ b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java
@@ -24,7 +24,7 @@ import java.io.OutputStream;
 import java.net.URI;
 
 import javax.jcr.Repository;
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpHost;
@@ -49,6 +49,7 @@ import org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet;
 import org.eclipse.jetty.http.HttpVersion;
 import org.eclipse.jetty.server.HttpConfiguration;
 import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.SecureRequestCustomizer;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SslConnectionFactory;
@@ -145,14 +146,16 @@ public class WebDAVTestBase extends AbstractJCRTest {
         }
 
         if (httpsConnector == null) {
-            SslContextFactory sslContextFactory = new SslContextFactory();
+            SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
             sslContextFactory.setKeyStorePath(keystore.getPath());
             sslContextFactory.setKeyStorePassword(KEYSTOREPW);
             sslContextFactory.setKeyManagerPassword(KEYSTOREPW);
             sslContextFactory.setTrustStorePath(keystore.getPath());
             sslContextFactory.setTrustStorePassword(KEYSTOREPW);
             SslConnectionFactory cfac = new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString());
-            httpsConnector = new ServerConnector(server, cfac, new HttpConnectionFactory(new HttpConfiguration()));
+            HttpConfiguration httpConfig = new HttpConfiguration();
+            httpConfig.addCustomizer(new SecureRequestCustomizer(false));
+            httpsConnector = new ServerConnector(server, cfac, new HttpConnectionFactory(httpConfig));
             httpsConnector.setHost("localhost");
             httpsConnector.setPort(0);
             server.addConnector(httpsConnector);
diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml
index fdcf498a8..f21ff1d74 100644
--- a/jackrabbit-jcr-servlet/pom.xml
+++ b/jackrabbit-jcr-servlet/pom.xml
@@ -40,9 +40,8 @@
       <artifactId>jcr</artifactId>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <scope>provided</scope>
+      <groupId>jakarta.servlet</groupId>
+      <artifactId>jakarta.servlet-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.jackrabbit</groupId>
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/AbstractRepositoryServlet.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/AbstractRepositoryServlet.java
index 8de91fbf3..1f5d189f2 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/AbstractRepositoryServlet.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/AbstractRepositoryServlet.java
@@ -21,10 +21,10 @@ import java.util.Properties;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.jackrabbit.commons.repository.ProxyRepository;
 
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ContextRepositoryServlet.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ContextRepositoryServlet.java
index 4b9a7d838..fc0ec736a 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ContextRepositoryServlet.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ContextRepositoryServlet.java
@@ -18,7 +18,7 @@ package org.apache.jackrabbit.servlet;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 
 /**
  * Servlet that makes a repository from one servlet context attribute
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java
index 3baad0a19..0349fa8c1 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java
@@ -18,8 +18,8 @@ package org.apache.jackrabbit.servlet;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletContext;
 
 import org.apache.jackrabbit.commons.repository.RepositoryFactory;
 
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/JNDIBindingServlet.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/JNDIBindingServlet.java
index de6b5a0ff..3be2d741c 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/JNDIBindingServlet.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/JNDIBindingServlet.java
@@ -23,8 +23,8 @@ import javax.jcr.Repository;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
 
 /**
  * Servlet that binds a repository from a servlet context attribute in JNDI.
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java
index 426051309..e81dfe5fb 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java
@@ -16,8 +16,8 @@
  */
 package org.apache.jackrabbit.servlet;
 
-import javax.servlet.FilterConfig;
-import javax.servlet.GenericServlet;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.GenericServlet;
 
 import org.apache.jackrabbit.commons.repository.ProxyRepository;
 
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepositoryFactory.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepositoryFactory.java
index 5a70c3a86..aa8877b28 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepositoryFactory.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepositoryFactory.java
@@ -18,8 +18,8 @@ package org.apache.jackrabbit.servlet;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.servlet.GenericServlet;
-import javax.servlet.ServletContext;
+import jakarta.servlet.GenericServlet;
+import jakarta.servlet.ServletContext;
 
 import org.apache.jackrabbit.commons.repository.RepositoryFactory;
 
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/jackrabbit/JackrabbitRepositoryServlet.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/jackrabbit/JackrabbitRepositoryServlet.java
index 06c599753..be8d36c47 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/jackrabbit/JackrabbitRepositoryServlet.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/jackrabbit/JackrabbitRepositoryServlet.java
@@ -24,7 +24,7 @@ import java.io.OutputStream;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 
 import org.apache.jackrabbit.core.RepositoryContext;
 import org.apache.jackrabbit.core.RepositoryImpl;
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/jackrabbit/StatisticsServlet.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/jackrabbit/StatisticsServlet.java
index 2077ed77f..493fb7ad6 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/jackrabbit/StatisticsServlet.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/jackrabbit/StatisticsServlet.java
@@ -20,10 +20,10 @@ import java.io.IOException;
 import java.io.Writer;
 import java.util.Map;
 
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.jackrabbit.api.stats.RepositoryStatistics;
 import org.apache.jackrabbit.api.stats.TimeSeries;
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/AbstractLoginFilter.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/AbstractLoginFilter.java
index 2da62cb99..da8771b86 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/AbstractLoginFilter.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/AbstractLoginFilter.java
@@ -26,14 +26,14 @@ import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.jackrabbit.servlet.ServletRepository;
 
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/BasicLoginFilter.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/BasicLoginFilter.java
index d4490d4ca..6519ef6ae 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/BasicLoginFilter.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/BasicLoginFilter.java
@@ -18,7 +18,7 @@ package org.apache.jackrabbit.servlet.login;
 
 import javax.jcr.Credentials;
 import javax.jcr.SimpleCredentials;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  *
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/ContainerLoginFilter.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/ContainerLoginFilter.java
index b61bbe0c5..86dc3e61e 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/ContainerLoginFilter.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/ContainerLoginFilter.java
@@ -18,8 +18,8 @@ package org.apache.jackrabbit.servlet.login;
 
 import javax.jcr.Credentials;
 import javax.jcr.SimpleCredentials;
-import javax.servlet.FilterConfig;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * Login filter that relies on container authentication to provide the
diff --git a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/NullLoginFilter.java b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/NullLoginFilter.java
index 14f29fa3f..c6c0d701b 100644
--- a/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/NullLoginFilter.java
+++ b/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/login/NullLoginFilter.java
@@ -17,7 +17,7 @@
 package org.apache.jackrabbit.servlet.login;
 
 import javax.jcr.Credentials;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * Login filter that always uses <code>null</code> credentials for logging in
diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml
index 0bd310022..783e062eb 100644
--- a/jackrabbit-parent/pom.xml
+++ b/jackrabbit-parent/pom.xml
@@ -51,19 +51,20 @@
   </scm>
 
   <properties>
-    <test.opts.memory>-Xmx256m</test.opts.memory>
+    <test.opts.memory>-Xmx1g</test.opts.memory>
     <test.opts.modules />
     <test.opts>${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions</test.opts>
     <!-- OAK version used in components that *implement* oak-jackrabbit-api -->
     <oak-jackrabbit-api.version.implemented>1.88.0</oak-jackrabbit-api.version.implemented>
     <!-- OAK version used in componenents that *use* oak-jackrabbit-api -->
     <oak-jackrabbit-api.version.used>1.22.22</oak-jackrabbit-api.version.used>
-    <jetty.version>9.4.58.v20250814</jetty.version>
+    <jetty.version>11.0.26</jetty.version>
     <tika.version>2.4.1</tika.version>
     <project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>
     <slf4j.api.version>1.7.36</slf4j.api.version>
     <slf4j.version>1.7.36</slf4j.version> <!-- sync with logback version -->
     <logback.version>1.2.13</logback.version>
+    <commons-fileupload-version>2.0.0-M4</commons-fileupload-version>
 
     <!-- determines the bytecode version (i.e. the minimum JRE required to run the build artifact) -->
     <javaTargetVersion>11</javaTargetVersion>
@@ -596,15 +597,20 @@
         <version>2.0.0</version>
       </dependency>
       <dependency>
-        <groupId>javax.servlet</groupId>
-        <artifactId>javax.servlet-api</artifactId>
-        <version>3.1.0</version>
+        <groupId>jakarta.servlet</groupId>
+        <artifactId>jakarta.servlet-api</artifactId>
+        <version>5.0.0</version>
         <scope>provided</scope>
       </dependency>
       <dependency>
-        <groupId>commons-fileupload</groupId>
-        <artifactId>commons-fileupload</artifactId>
-        <version>1.6.0</version>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-fileupload2-jakarta-servlet5</artifactId>
+        <version>${commons-fileupload-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-fileupload2-core</artifactId>
+        <version>${commons-fileupload-version}</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml
index 3c7e590c0..5a102559b 100644
--- a/jackrabbit-spi2dav/pom.xml
+++ b/jackrabbit-spi2dav/pom.xml
@@ -171,8 +171,8 @@
       <artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
+        <groupId>jakarta.servlet</groupId>
+        <artifactId>jakarta.servlet-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
diff --git a/jackrabbit-standalone-components/src/main/java/org/apache/jackrabbit/standalone/Main.java b/jackrabbit-standalone-components/src/main/java/org/apache/jackrabbit/standalone/Main.java
index 09aa5902f..a0c4292c7 100644
--- a/jackrabbit-standalone-components/src/main/java/org/apache/jackrabbit/standalone/Main.java
+++ b/jackrabbit-standalone-components/src/main/java/org/apache/jackrabbit/standalone/Main.java
@@ -40,7 +40,7 @@ import org.apache.jackrabbit.servlet.jackrabbit.JackrabbitRepositoryServlet;
 import org.apache.jackrabbit.standalone.cli.CommandException;
 import org.apache.jackrabbit.standalone.cli.CommandHelper;
 import org.apache.jackrabbit.standalone.cli.JcrClient;
-import org.eclipse.jetty.server.NCSARequestLog;
+import org.eclipse.jetty.server.CustomRequestLog;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.handler.RequestLogHandler;
@@ -312,10 +312,8 @@ public class Main {
     }
 
     private void prepareAccessLog(File log) {
-        NCSARequestLog ncsa = new NCSARequestLog(
-                new File(log, "access.log.yyyy_mm_dd").getPath());
-        ncsa.setFilenameDateFormat("yyyy-MM-dd");
-        accessLog.setRequestLog(ncsa);
+        CustomRequestLog cl = new CustomRequestLog(new File(log, "access.log.yyyy_mm_dd").getPath(), "yyyy-MM-dd");
+        accessLog.setRequestLog(cl);
     }
 
     private void prepareWebapp(File file, File repository, File tmp) {
@@ -324,12 +322,6 @@ public class Main {
         webapp.setExtractWAR(true);
         webapp.setTempDirectory(tmp);
 
-        Configuration.ClassList classlist = Configuration.ClassList
-                .setServerDefault(server);
-        classlist.addBefore(
-                "org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
-                "org.eclipse.jetty.annotations.AnnotationConfiguration");
-        
         ServletHolder servlet =
             new ServletHolder(JackrabbitRepositoryServlet.class);
         servlet.setInitOrder(1);
diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml
index 2b9644501..81693558f 100644
--- a/jackrabbit-webapp/pom.xml
+++ b/jackrabbit-webapp/pom.xml
@@ -35,7 +35,7 @@
   <description>Web application that hosts and serves a Jackrabbit content repository</description>
 
   <properties>
-    <tomcat.version>9.0.111</tomcat.version>
+    <tomcat.version>10.1.48</tomcat.version>
   </properties>
 
   <dependencies>
diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java
index bcef72d16..e38d528f6 100644
--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java
+++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java
@@ -18,8 +18,8 @@ package org.apache.jackrabbit.j2ee;
 
 import java.util.Properties;
 
-import javax.servlet.ServletException;
-import javax.servlet.ServletConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletConfig;
 
 /**
  * The bootstrap configuration hold information about initial startup
diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/DerbyShutdown.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/DerbyShutdown.java
index a1b0510cd..c46d4d210 100644
--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/DerbyShutdown.java
+++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/DerbyShutdown.java
@@ -22,8 +22,8 @@ import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.Enumeration;
 
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
+import jakarta.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextListener;
 
 /**
  * Servlet context listener that releases all remaining Derby resources
diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/Installer.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/Installer.java
index eb273963f..bfd5ec501 100644
--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/Installer.java
+++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/Installer.java
@@ -26,9 +26,9 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Properties;
 
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * Provides very basic installation capabilities.
diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/JNDIConfig.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/JNDIConfig.java
index ec71c500c..0392588e2 100644
--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/JNDIConfig.java
+++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/JNDIConfig.java
@@ -20,8 +20,8 @@ import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Properties;
 
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletException;
 
 /**
  * The JNDI config hold information about JNDI connection details.
diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java
index 30054c257..2ed6fd0dd 100644
--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java
+++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java
@@ -29,9 +29,9 @@ import java.util.Properties;
 import javax.jcr.Repository;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
 
 /**
  * This Class implements a servlet that is used as unified mechanism to retrieve
diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java
index 3764d1380..72a3f1362 100644
--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java
+++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java
@@ -39,10 +39,10 @@ import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 /**
  * The RepositoryStartupServlet starts a jackrabbit repository and registers it
diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/ServletExceptionWithCause.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/ServletExceptionWithCause.java
index faa797d9a..23324570a 100644
--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/ServletExceptionWithCause.java
+++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/ServletExceptionWithCause.java
@@ -16,7 +16,7 @@
  */
 package org.apache.jackrabbit.j2ee;
 
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 
 /**
  * Utility class that links {@link ServletException} with support for
diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml
index e8e0b16ea..5011143e3 100644
--- a/jackrabbit-webdav/pom.xml
+++ b/jackrabbit-webdav/pom.xml
@@ -64,9 +64,8 @@
       <artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <scope>provided</scope>
+      <groupId>jakarta.servlet</groupId>
+      <artifactId>jakarta.servlet-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavServletRequest.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavServletRequest.java
index c6c0bd090..e26f0cdcb 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavServletRequest.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavServletRequest.java
@@ -23,7 +23,7 @@ import org.apache.jackrabbit.webdav.property.DavPropertyName;
 import org.apache.jackrabbit.webdav.property.PropEntry;
 import org.w3c.dom.Document;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 import java.util.List;
 
 /**
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavServletResponse.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavServletResponse.java
index e61b9de9b..452b974e6 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavServletResponse.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavServletResponse.java
@@ -19,7 +19,7 @@ package org.apache.jackrabbit.webdav;
 import org.apache.jackrabbit.webdav.lock.ActiveLock;
 import org.apache.jackrabbit.webdav.xml.XmlSerializable;
 
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
 
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java
index 39aba4696..b4a71dd98 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java
@@ -34,21 +34,21 @@ import java.util.Map;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.InflaterInputStream;
 
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.ReadListener;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpUpgradeHandler;
-import javax.servlet.http.Part;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.ReadListener;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpUpgradeHandler;
+import jakarta.servlet.http.Part;
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.jackrabbit.webdav.bind.BindInfo;
@@ -289,7 +289,7 @@ public class WebdavRequestImpl implements WebdavRequest, DavConstants, ContentCo
      *
      * @return milliseconds indicating length of the timeout.
      * @see DavServletRequest#getTimeout()
-     * @see TimeoutHeader#parse(javax.servlet.http.HttpServletRequest, long)
+     * @see TimeoutHeader#parse(jakarta.servlet.http.HttpServletRequest, long)
      */
     public long getTimeout() {
         return TimeoutHeader.parse(httpRequest, UNDEFINED_TIMEOUT).getTimeout();
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavResponseImpl.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavResponseImpl.java
index a5dae7e94..63bbb8374 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavResponseImpl.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavResponseImpl.java
@@ -32,9 +32,9 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 import java.io.ByteArrayOutputStream;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/CodedUrlHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/CodedUrlHeader.java
index 7b51bb367..edbe8aed9 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/CodedUrlHeader.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/CodedUrlHeader.java
@@ -19,7 +19,7 @@ package org.apache.jackrabbit.webdav.header;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * <code>CodedUrlHeader</code>...
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/DepthHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/DepthHeader.java
index b66ecca9e..9b74194a5 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/DepthHeader.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/DepthHeader.java
@@ -20,7 +20,7 @@ import org.apache.jackrabbit.webdav.DavConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * <code>DepthHeader</code>...
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java
index 6adac7848..e92b4c455 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java
@@ -20,7 +20,7 @@ import org.apache.jackrabbit.webdav.DavConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/OverwriteHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/OverwriteHeader.java
index fddb58435..1de797411 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/OverwriteHeader.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/OverwriteHeader.java
@@ -20,7 +20,7 @@ import org.apache.jackrabbit.webdav.DavConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * <code>OverwriteHeader</code>...
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/PollTimeoutHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/PollTimeoutHeader.java
index 146d35672..73d638053 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/PollTimeoutHeader.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/PollTimeoutHeader.java
@@ -18,7 +18,7 @@ package org.apache.jackrabbit.webdav.header;
 
 import org.apache.jackrabbit.webdav.observation.ObservationConstants;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * <code>PollTimeoutHeader</code> implements a timeout header for subscription
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java
index c1e72ae04..0e5525359 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java
@@ -20,7 +20,7 @@ import org.apache.jackrabbit.webdav.DavConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * <code>TimeoutHeader</code>...
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/package-info.java
index 3c834230d..5b5754c7b 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.1.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav.header;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java
index e5b9fb1db..592eecc1e 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java
@@ -20,7 +20,7 @@ import org.apache.jackrabbit.webdav.DavConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 import java.io.InputStream;
 import java.util.Date;
 
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/OutputContextImpl.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/OutputContextImpl.java
index 5d26e1c5e..c49878ecf 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/OutputContextImpl.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/OutputContextImpl.java
@@ -20,7 +20,7 @@ import org.apache.jackrabbit.webdav.DavConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 import java.io.OutputStream;
 
 /**
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/package-info.java
index dfafee70b..6a828e4cc 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.0.1")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav.io;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/package-info.java
index dec498491..9f3e06274 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.1.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav.observation;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/package-info.java
index 71a8aa42e..f737a2892 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav.ordering;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java
index c31af121d..c8d2a6224 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.4.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
index 1918fd8f4..2c94ae9e9 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
@@ -84,10 +84,10 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java
index 8ac0f8aef..7580190f0 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.2.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav.server;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/package-info.java
index fdbd51e35..9950ae35a 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/transaction/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav.transaction;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/CSRFUtil.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/CSRFUtil.java
index 25b2ae5fd..5236bc8e0 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/CSRFUtil.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/CSRFUtil.java
@@ -25,7 +25,7 @@ import java.util.HashSet;
 import java.util.Locale;
 import java.util.Set;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/package-info.java
index 654626af4..50a40ac1b 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.1.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav.util;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/package-info.java
index b30efa2ad..96f503809 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/package-info.java
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.jackrabbit.webdav.version;
diff --git a/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/io/OutputContextImplTest.java b/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/io/OutputContextImplTest.java
index 58d60097d..b707a8cea 100644
--- a/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/io/OutputContextImplTest.java
+++ b/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/io/OutputContextImplTest.java
@@ -18,9 +18,9 @@ package org.apache.jackrabbit.webdav.io;
 
 import junit.framework.TestCase;
 
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.ServletOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Collection;
diff --git a/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java b/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java
index 5498c8af2..8b126f1cf 100644
--- a/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java
+++ b/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java
@@ -31,20 +31,20 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
 
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpUpgradeHandler;
-import javax.servlet.http.Part;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpUpgradeHandler;
+import jakarta.servlet.http.Part;
 
 import junit.framework.TestCase;