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
*/