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 <[email protected]> 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 */
