You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/01/17 18:21:21 UTC

[camel] 01/02: (chores) camel-test-infra-jetty: fixed WebSockets support with Jakarta

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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 521943a19048f0304c9a3018689dee2649bfecd2
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Jan 17 14:16:04 2023 +0100

    (chores) camel-test-infra-jetty: fixed WebSockets support with Jakarta
---
 test-infra/camel-test-infra-jetty/pom.xml          | 12 +++++++
 .../infra/jetty/services/JettyConfiguration.java   | 40 ++++++++++++++++++++++
 .../jetty/services/JettyConfigurationBuilder.java  | 31 +++++++++++++++++
 .../infra/jetty/services/JettyEmbeddedService.java |  3 ++
 4 files changed, 86 insertions(+)

diff --git a/test-infra/camel-test-infra-jetty/pom.xml b/test-infra/camel-test-infra-jetty/pom.xml
index dec00d5a6da..c29cc241b9f 100644
--- a/test-infra/camel-test-infra-jetty/pom.xml
+++ b/test-infra/camel-test-infra-jetty/pom.xml
@@ -66,6 +66,18 @@
             <artifactId>jetty-server</artifactId>
             <version>${jetty-version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.jetty.websocket</groupId>
+            <artifactId>websocket-jakarta-server</artifactId>
+            <version>${jetty-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.jetty.websocket</groupId>
+            <artifactId>websocket-jetty-server</artifactId>
+            <version>${jetty-version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfiguration.java b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfiguration.java
index e4654f429ea..3044d8a5816 100644
--- a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfiguration.java
+++ b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfiguration.java
@@ -45,6 +45,12 @@ import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.util.security.Constraint;
 import org.eclipse.jetty.util.security.Credential;
 import org.eclipse.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse;
+import org.eclipse.jetty.websocket.server.JettyWebSocketCreator;
+import org.eclipse.jetty.websocket.server.JettyWebSocketServlet;
+import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory;
+import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
 
 /**
  * A configuration holder for embedded Jetty instances
@@ -307,6 +313,40 @@ public class JettyConfiguration {
         }
     }
 
+    public static class WebSocketContextHandlerConfiguration extends ServletHandlerConfiguration {
+
+        public WebSocketContextHandlerConfiguration(String contextPath) {
+            super(contextPath);
+        }
+
+        @Override
+        public List<ServletConfiguration<?>> getServletConfigurations() {
+            return super.getServletConfigurations();
+        }
+
+        @Override
+        ServletContextHandler resolve() {
+            ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
+
+            if (!super.userInfos.isEmpty()) {
+                contextHandler.setSecurityHandler(super.basicAuth(super.userInfos, super.realm));
+            }
+
+            contextHandler.setContextPath(super.getContextPath());
+
+            for (ServletConfiguration servletConfiguration : super.servletConfigurations) {
+                contextHandler.addServlet(servletConfiguration.buildServletHolder(), servletConfiguration.getPathSpec());
+            }
+
+            if (customizer != null) {
+                customizer.accept(contextHandler);
+            }
+
+            JettyWebSocketServletContainerInitializer.configure(contextHandler, null);
+            return contextHandler;
+        }
+    }
+
     private int port;
     private SSLContext sslContext;
 
diff --git a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfigurationBuilder.java b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfigurationBuilder.java
index b69576015ab..14b53eb26a3 100644
--- a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfigurationBuilder.java
+++ b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfigurationBuilder.java
@@ -83,6 +83,33 @@ public final class JettyConfigurationBuilder {
         }
     }
 
+    public static class WebSocketConfigurationBuilder implements ConfigurationBuilderDelegate {
+        private final JettyConfiguration jettyConfiguration;
+        private final JettyConfigurationBuilder jettyConfigurationBuilder;
+
+        private JettyConfiguration.WebSocketContextHandlerConfiguration wsHandlerConfiguration;
+
+        public WebSocketConfigurationBuilder(JettyConfigurationBuilder builder, JettyConfiguration jettyConfiguration) {
+            this.jettyConfigurationBuilder = builder;
+            this.jettyConfiguration = jettyConfiguration;
+
+            wsHandlerConfiguration
+                    = new JettyConfiguration.WebSocketContextHandlerConfiguration(jettyConfiguration.getContextPath());
+        }
+
+        @Override
+        public JettyConfigurationBuilder build() {
+            jettyConfiguration.setContextHandlerConfiguration(wsHandlerConfiguration);
+            return jettyConfigurationBuilder;
+        }
+
+        public WebSocketConfigurationBuilder addServletConfiguration(JettyConfiguration.ServletHandlerConfiguration.ServletConfiguration<?> servletConfiguration) {
+            wsHandlerConfiguration.addServletConfiguration(servletConfiguration);
+
+            return this;
+        }
+    }
+
     public static class WebAppContextConfigurationBuilder implements ConfigurationBuilderDelegate {
         private final JettyConfiguration jettyConfiguration;
         private final JettyConfigurationBuilder jettyConfigurationBuilder;
@@ -210,6 +237,10 @@ public final class JettyConfigurationBuilder {
         return new ServletConfigurationBuilder(this, jettyConfiguration);
     }
 
+    public WebSocketConfigurationBuilder withWebSocketConfiguration() {
+        return new WebSocketConfigurationBuilder(this, jettyConfiguration);
+    }
+
     public WebAppContextConfigurationBuilder withWebAppContextConfiguration() {
         return new WebAppContextConfigurationBuilder(this, jettyConfiguration);
     }
diff --git a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyEmbeddedService.java b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyEmbeddedService.java
index 9dade4d1621..c3a996e0ba5 100644
--- a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyEmbeddedService.java
+++ b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyEmbeddedService.java
@@ -27,11 +27,14 @@ import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SslConnectionFactory;
+import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
+
 /**
  * An embedded Jetty service that can be used to run servlets for testing purposes
  */