File jetty9-to-jetty11-migration.patch of Package spark-core

Index: spark-core/src/main/java/spark/HaltException.java
===================================================================
--- spark-core.orig/src/main/java/spark/HaltException.java
+++ spark-core/src/main/java/spark/HaltException.java
@@ -16,7 +16,7 @@
  */
 package spark;
 
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 
 /**
  * Exception used for stopping the execution
Index: spark-core/src/main/java/spark/QueryParamsMap.java
===================================================================
--- spark-core.orig/src/main/java/spark/QueryParamsMap.java
+++ spark-core/src/main/java/spark/QueryParamsMap.java
@@ -6,7 +6,7 @@ import java.util.Map.Entry;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * These objects represent the parameters sent on a Http Request. <br>
Index: spark-core/src/main/java/spark/Request.java
===================================================================
--- spark-core.orig/src/main/java/spark/Request.java
+++ spark-core/src/main/java/spark/Request.java
@@ -28,9 +28,9 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
 
 import spark.routematch.RouteMatch;
 import spark.utils.IOUtils;
Index: spark-core/src/main/java/spark/RequestResponseFactory.java
===================================================================
--- spark-core.orig/src/main/java/spark/RequestResponseFactory.java
+++ spark-core/src/main/java/spark/RequestResponseFactory.java
@@ -16,8 +16,8 @@
  */
 package spark;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import spark.routematch.RouteMatch;
 
Index: spark-core/src/main/java/spark/Response.java
===================================================================
--- spark-core.orig/src/main/java/spark/Response.java
+++ spark-core/src/main/java/spark/Response.java
@@ -19,8 +19,8 @@ package spark;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.time.Instant;
 import java.util.Date;
Index: spark-core/src/main/java/spark/Session.java
===================================================================
--- spark-core.orig/src/main/java/spark/Session.java
+++ spark-core/src/main/java/spark/Session.java
@@ -4,7 +4,7 @@ import java.util.Enumeration;
 import java.util.Set;
 import java.util.TreeSet;
 
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
 
 import spark.utils.Assert;
 
Index: spark-core/src/main/java/spark/embeddedserver/jetty/HttpRequestWrapper.java
===================================================================
--- spark-core.orig/src/main/java/spark/embeddedserver/jetty/HttpRequestWrapper.java
+++ spark-core/src/main/java/spark/embeddedserver/jetty/HttpRequestWrapper.java
@@ -19,10 +19,10 @@ package spark.embeddedserver.jetty;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
-import javax.servlet.ReadListener;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.ReadListener;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
 
 import spark.utils.IOUtils;
 
Index: spark-core/src/main/java/spark/embeddedserver/jetty/JettyHandler.java
===================================================================
--- spark-core.orig/src/main/java/spark/embeddedserver/jetty/JettyHandler.java
+++ spark-core/src/main/java/spark/embeddedserver/jetty/JettyHandler.java
@@ -18,10 +18,10 @@ package spark.embeddedserver.jetty;
 
 import java.io.IOException;
 
-import javax.servlet.Filter;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.session.SessionHandler;
Index: spark-core/src/main/java/spark/http/matching/Body.java
===================================================================
--- spark-core.orig/src/main/java/spark/http/matching/Body.java
+++ spark-core/src/main/java/spark/http/matching/Body.java
@@ -19,8 +19,8 @@ package spark.http.matching;
 import java.io.IOException;
 import java.io.OutputStream;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import spark.utils.GzipUtils;
 import spark.serialization.SerializerChain;
Index: spark-core/src/main/java/spark/http/matching/GeneralError.java
===================================================================
--- spark-core.orig/src/main/java/spark/http/matching/GeneralError.java
+++ spark-core/src/main/java/spark/http/matching/GeneralError.java
@@ -16,8 +16,8 @@
  */
 package spark.http.matching;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import spark.CustomErrorPages;
 import spark.ExceptionHandlerImpl;
Index: spark-core/src/main/java/spark/http/matching/Halt.java
===================================================================
--- spark-core.orig/src/main/java/spark/http/matching/Halt.java
+++ spark-core/src/main/java/spark/http/matching/Halt.java
@@ -16,7 +16,7 @@
  */
 package spark.http.matching;
 
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 
 import spark.HaltException;
 
Index: spark-core/src/main/java/spark/http/matching/MatcherFilter.java
===================================================================
--- spark-core.orig/src/main/java/spark/http/matching/MatcherFilter.java
+++ spark-core/src/main/java/spark/http/matching/MatcherFilter.java
@@ -18,14 +18,14 @@ package spark.http.matching;
 
 import java.io.IOException;
 
-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 spark.CustomErrorPages;
 import spark.ExceptionMapper;
Index: spark-core/src/main/java/spark/http/matching/RequestWrapper.java
===================================================================
--- spark-core.orig/src/main/java/spark/http/matching/RequestWrapper.java
+++ spark-core/src/main/java/spark/http/matching/RequestWrapper.java
@@ -19,7 +19,7 @@ package spark.http.matching;
 import java.util.Map;
 import java.util.Set;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 import spark.Access;
 import spark.QueryParamsMap;
Index: spark-core/src/main/java/spark/http/matching/ResponseWrapper.java
===================================================================
--- spark-core.orig/src/main/java/spark/http/matching/ResponseWrapper.java
+++ spark-core/src/main/java/spark/http/matching/ResponseWrapper.java
@@ -16,7 +16,7 @@
  */
 package spark.http.matching;
 
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 
 import spark.Response;
 
Index: spark-core/src/main/java/spark/http/matching/RouteContext.java
===================================================================
--- spark-core.orig/src/main/java/spark/http/matching/RouteContext.java
+++ spark-core/src/main/java/spark/http/matching/RouteContext.java
@@ -16,7 +16,7 @@
  */
 package spark.http.matching;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 import spark.Response;
 import spark.route.*;
Index: spark-core/src/main/java/spark/resource/AbstractResourceHandler.java
===================================================================
--- spark-core.orig/src/main/java/spark/resource/AbstractResourceHandler.java
+++ spark-core/src/main/java/spark/resource/AbstractResourceHandler.java
@@ -19,8 +19,8 @@ package spark.resource;
 
 import java.net.MalformedURLException;
 
-import javax.servlet.RequestDispatcher;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * Abstract class providing functionality for finding resources based on an Http Servlet request.
Index: spark-core/src/main/java/spark/servlet/FilterTools.java
===================================================================
--- spark-core.orig/src/main/java/spark/servlet/FilterTools.java
+++ spark-core/src/main/java/spark/servlet/FilterTools.java
@@ -16,8 +16,8 @@
  */
 package spark.servlet;
 
-import javax.servlet.FilterConfig;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 
Index: spark-core/src/main/java/spark/servlet/SparkFilter.java
===================================================================
--- spark-core.orig/src/main/java/spark/servlet/SparkFilter.java
+++ spark-core/src/main/java/spark/servlet/SparkFilter.java
@@ -18,15 +18,15 @@ package spark.servlet;
 
 import java.io.IOException;
 
-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.HttpServletRequestWrapper;
-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.HttpServletRequestWrapper;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
Index: spark-core/src/main/java/spark/staticfiles/StaticFilesConfiguration.java
===================================================================
--- spark-core.orig/src/main/java/spark/staticfiles/StaticFilesConfiguration.java
+++ spark-core/src/main/java/spark/staticfiles/StaticFilesConfiguration.java
@@ -25,8 +25,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
Index: spark-core/src/main/java/spark/utils/GzipUtils.java
===================================================================
--- spark-core.orig/src/main/java/spark/utils/GzipUtils.java
+++ spark-core/src/main/java/spark/utils/GzipUtils.java
@@ -22,8 +22,8 @@ import java.util.Collections;
 import java.util.function.Predicate;
 import java.util.zip.GZIPOutputStream;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 /**
  * GZIP utility class.
Index: spark-core/src/test/java/spark/RequestTest.java
===================================================================
--- spark-core.orig/src/test/java/spark/RequestTest.java
+++ spark-core/src/test/java/spark/RequestTest.java
@@ -6,9 +6,9 @@ import org.junit.Test;
 import spark.routematch.RouteMatch;
 import spark.util.SparkTestUtil;
 
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
 import java.util.*;
 
 import static org.junit.Assert.*;
Index: spark-core/src/test/java/spark/ResponseTest.java
===================================================================
--- spark-core.orig/src/test/java/spark/ResponseTest.java
+++ spark-core/src/test/java/spark/ResponseTest.java
@@ -5,8 +5,8 @@ import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.powermock.reflect.Whitebox;
 
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
 import java.util.Date;
 
 import static org.junit.Assert.assertEquals;
Index: spark-core/src/test/java/spark/ServiceTest.java
===================================================================
--- spark-core.orig/src/test/java/spark/ServiceTest.java
+++ spark-core/src/test/java/spark/ServiceTest.java
@@ -1,6 +1,6 @@
 package spark;
 
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.eclipse.jetty.websocket.api.annotations.WebSocket;
 import org.junit.Before;
Index: spark-core/src/test/java/spark/SessionTest.java
===================================================================
--- spark-core.orig/src/test/java/spark/SessionTest.java
+++ spark-core/src/test/java/spark/SessionTest.java
@@ -4,7 +4,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.powermock.reflect.Whitebox;
 
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
Index: spark-core/src/test/java/spark/embeddedserver/jetty/websocket/WebSocketServletContextHandlerFactoryTest.java
===================================================================
--- spark-core.orig/src/test/java/spark/embeddedserver/jetty/websocket/WebSocketServletContextHandlerFactoryTest.java
+++ spark-core/src/test/java/spark/embeddedserver/jetty/websocket/WebSocketServletContextHandlerFactoryTest.java
@@ -8,7 +8,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 
 import org.eclipse.jetty.http.pathmap.MappedResource;
 import org.eclipse.jetty.http.pathmap.PathSpec;
Index: spark-core/src/test/java/spark/servlet/FilterConfigWrapper.java
===================================================================
--- spark-core.orig/src/test/java/spark/servlet/FilterConfigWrapper.java
+++ spark-core/src/test/java/spark/servlet/FilterConfigWrapper.java
@@ -2,8 +2,8 @@ package spark.servlet;
 
 import java.util.Enumeration;
 
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletContext;
 
 
 public class FilterConfigWrapper implements FilterConfig {
@@ -16,7 +16,7 @@ public class FilterConfigWrapper impleme
     
     /**
      * @return
-     * @see javax.servlet.FilterConfig#getFilterName()
+     * @see jakarta.servlet.FilterConfig#getFilterName()
      */
     public String getFilterName() {
         return delegate.getFilterName();
@@ -25,7 +25,7 @@ public class FilterConfigWrapper impleme
     /**
      * @param name
      * @return
-     * @see javax.servlet.FilterConfig#getInitParameter(java.lang.String)
+     * @see jakarta.servlet.FilterConfig#getInitParameter(java.lang.String)
      */
     public String getInitParameter(String name) {
         if (name.equals("applicationClass")) {
@@ -36,7 +36,7 @@ public class FilterConfigWrapper impleme
 
     /**
      * @return
-     * @see javax.servlet.FilterConfig#getInitParameterNames()
+     * @see jakarta.servlet.FilterConfig#getInitParameterNames()
      */
     public Enumeration<String> getInitParameterNames() {
         return delegate.getInitParameterNames();
@@ -44,7 +44,7 @@ public class FilterConfigWrapper impleme
 
     /**
      * @return
-     * @see javax.servlet.FilterConfig#getServletContext()
+     * @see jakarta.servlet.FilterConfig#getServletContext()
      */
     public ServletContext getServletContext() {
         return delegate.getServletContext();
Index: spark-core/pom.xml
===================================================================
--- spark-core.orig/pom.xml
+++ spark-core/pom.xml
@@ -29,8 +29,8 @@
     </developers>
 
     <properties>
-        <java.version>1.8</java.version>
-        <jetty.version>9.4.31.v20200723</jetty.version>
+        <java.version>11</java.version>
+        <jetty.version>11.0.26</jetty.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <powermock.version>1.7.4</powermock.version>
         <mockito.version>1.10.19</mockito.version>
@@ -66,7 +66,7 @@
 
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-server</artifactId>
+            <artifactId>websocket-jetty-server</artifactId>
             <version>${jetty.version}</version>
         </dependency>
         <dependency>
@@ -75,6 +75,17 @@
             <version>${jetty.version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <version>6.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.websocket</groupId>
+            <artifactId>jakarta.websocket-client-api</artifactId>
+            <version>2.2.0</version>
+        </dependency>
+
         <!-- JUNIT DEPENDENCY FOR TESTING -->
         <dependency>
             <groupId>junit</groupId>
@@ -120,7 +131,7 @@
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-client</artifactId>
+            <artifactId>websocket-jetty-client</artifactId>
             <version>${jetty.version}</version>
             <scope>test</scope>
         </dependency>
Index: spark-core/src/main/java/spark/embeddedserver/jetty/websocket/WebSocketCreatorFactory.java
===================================================================
--- spark-core.orig/src/main/java/spark/embeddedserver/jetty/websocket/WebSocketCreatorFactory.java
+++ spark-core/src/main/java/spark/embeddedserver/jetty/websocket/WebSocketCreatorFactory.java
@@ -15,14 +15,14 @@
  */
 package spark.embeddedserver.jetty.websocket;
 
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
-import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse;
+import org.eclipse.jetty.websocket.server.JettyWebSocketCreator;
 
 import static java.util.Objects.requireNonNull;
 
 /**
- * Factory class to create {@link WebSocketCreator} implementations that
+ * Factory class to create {@link JettyWebSocketCreator} implementations that
  * delegate to the given handler class.
  *
  * @author Ignasi Barrera
@@ -30,18 +30,18 @@ import static java.util.Objects.requireN
 public class WebSocketCreatorFactory {
 
     /**
-     * Creates a {@link WebSocketCreator} that uses the given handler class/instance for
+     * Creates a {@link JettyWebSocketCreator} that uses the given handler class/instance for
      * the WebSocket connections.
      *
      * @param handlerWrapper The wrapped handler to use to manage WebSocket connections.
-     * @return The WebSocketCreator.
+     * @return The JettyWebSocketCreator.
      */
-    public static WebSocketCreator create(WebSocketHandlerWrapper handlerWrapper) {
+    public static JettyWebSocketCreator create(WebSocketHandlerWrapper handlerWrapper) {
         return new SparkWebSocketCreator(handlerWrapper.getHandler());
     }
 
     // Package protected to be visible to the unit tests
-    static class SparkWebSocketCreator implements WebSocketCreator {
+    static class SparkWebSocketCreator implements JettyWebSocketCreator {
         private final Object handler;
 
         private SparkWebSocketCreator(Object handler) {
@@ -49,8 +49,8 @@ public class WebSocketCreatorFactory {
         }
 
         @Override
-        public Object createWebSocket(ServletUpgradeRequest request,
-                                      ServletUpgradeResponse response) {
+        public Object createWebSocket(JettyServerUpgradeRequest request,
+                                      JettyServerUpgradeResponse response) {
             return handler;
         }
 
Index: spark-core/src/main/java/spark/embeddedserver/jetty/websocket/WebSocketServletContextHandlerFactory.java
===================================================================
--- spark-core.orig/src/main/java/spark/embeddedserver/jetty/websocket/WebSocketServletContextHandlerFactory.java
+++ spark-core/src/main/java/spark/embeddedserver/jetty/websocket/WebSocketServletContextHandlerFactory.java
@@ -16,14 +16,12 @@
  */
 package spark.embeddedserver.jetty.websocket;
 
+import java.time.Duration;
 import java.util.Map;
 import java.util.Optional;
 
-import org.eclipse.jetty.http.pathmap.ServletPathSpec;
 import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.websocket.server.NativeWebSocketConfiguration;
-import org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter;
-import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
+import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,22 +42,28 @@ public class WebSocketServletContextHand
     public static ServletContextHandler create(Map<String, WebSocketHandlerWrapper> webSocketHandlers,
                                                Optional<Integer> webSocketIdleTimeoutMillis) {
         ServletContextHandler webSocketServletContextHandler = null;
-        if (webSocketHandlers != null) {
+        if (webSocketHandlers != null && !webSocketHandlers.isEmpty()) {
             try {
                 webSocketServletContextHandler = new ServletContextHandler(null, "/", true, false);
-                WebSocketUpgradeFilter webSocketUpgradeFilter = WebSocketUpgradeFilter.configureContext(webSocketServletContextHandler);
-                if (webSocketIdleTimeoutMillis.isPresent()) {
-                    webSocketUpgradeFilter.getFactory().getPolicy().setIdleTimeout(webSocketIdleTimeoutMillis.get());
-                }
-                // Since we are configuring WebSockets before the ServletContextHandler and WebSocketUpgradeFilter is
-                // even initialized / started, then we have to pre-populate the configuration that will eventually
-                // be used by Jetty's WebSocketUpgradeFilter.
-                NativeWebSocketConfiguration webSocketConfiguration = (NativeWebSocketConfiguration) webSocketServletContextHandler
-                    .getServletContext().getAttribute(NativeWebSocketConfiguration.class.getName());
-                for (String path : webSocketHandlers.keySet()) {
-                    WebSocketCreator webSocketCreator = WebSocketCreatorFactory.create(webSocketHandlers.get(path));
-                    webSocketConfiguration.addMapping(new ServletPathSpec(path), webSocketCreator);
-                }
+
+                // Configure Jetty WebSocket support
+                JettyWebSocketServletContainerInitializer.configure(webSocketServletContextHandler,
+                    (servletContext, wsContainer) -> {
+                        // Configure idle timeout if specified
+                        if (webSocketIdleTimeoutMillis.isPresent()) {
+                            wsContainer.setIdleTimeout(Duration.ofMillis(webSocketIdleTimeoutMillis.get()));
+                        }
+
+                        // Register WebSocket endpoints
+                        for (Map.Entry<String, WebSocketHandlerWrapper> entry : webSocketHandlers.entrySet()) {
+                            String path = entry.getKey();
+                            WebSocketHandlerWrapper handler = entry.getValue();
+
+                            // Add mapping for each WebSocket path
+                            wsContainer.addMapping(path, (request, response) -> handler.getHandler());
+                        }
+                    });
+
             } catch (Exception ex) {
                 logger.error("creation of websocket context handler failed.", ex);
                 webSocketServletContextHandler = null;
openSUSE Build Service is sponsored by