This is an automated email from the ASF dual-hosted git repository. cshannon pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/activemq.git
commit d31d590f0bc29a7927399beffe10dd8279e40284 Author: Matt Pavlovich <[email protected]> AuthorDate: Thu May 30 08:16:02 2024 -0500 [AMQ-9359] Jetty-12 conversion --- activemq-amqp/pom.xml | 2 +- activemq-http/pom.xml | 32 +++++- .../transport/WebTransportServerSupport.java | 26 +++-- .../discovery/http/EmbeddedJettyServer.java | 4 +- .../transport/http/HttpTransportServer.java | 15 +-- .../activemq/transport/ws/StompWSConnection.java | 8 +- .../activemq/transport/ws/WSTransportProxy.java | 8 +- .../activemq/transport/ws/WSTransportServer.java | 17 ++-- .../ws/{jetty11 => jetty12}/MQTTSocket.java | 6 +- .../ws/{jetty11 => jetty12}/StompSocket.java | 6 +- .../ws/{jetty11 => jetty12}/WSServlet.java | 14 +-- .../transport/http/HttpTraceTestSupport.java | 8 +- .../activemq/transport/ws/MQTTWSConnection.java | 37 ++++--- .../transport/ws/MQTTWSSubProtocolTest.java | 2 +- .../activemq/transport/ws/MQTTWSTransportTest.java | 12 ++- .../transport/ws/MQTTWSTransportWillTest.java | 2 +- .../apache/activemq/transport/ws/SocketTest.java | 8 +- .../transport/ws/StompWSSubProtocolTest.java | 2 +- .../transport/ws/StompWSTransportTest.java | 2 +- .../activemq/transport/ws/WSTransportTest.java | 10 +- .../transport/wss/WSSTransportHttpTraceTest.java | 2 +- .../wss/WSSTransportNeedClientAuthTest.java | 4 +- .../transport/xstream/XStreamWireFormatTest.java | 1 - activemq-http/src/test/resources/spring-http.xml | 2 +- activemq-web-console/pom.xml | 9 +- .../java/org/apache/activemq/web/tool/Main.java | 17 ++-- activemq-web-demo/pom.xml | 5 + .../java/org/apache/activemq/web/AjaxTest.java | 51 +++++----- .../java/org/apache/activemq/web/JettyServer.java | 6 +- .../org/apache/activemq/web/JettyTestSupport.java | 6 +- .../apache/activemq/web/RestPersistentTest.java | 28 +++-- .../java/org/apache/activemq/web/RestTest.java | 113 +++++++++++---------- activemq-web/pom.xml | 8 +- .../apache/activemq/web/config/JspConfigurer.java | 9 +- assembly/pom.xml | 87 ++++++++++++++-- assembly/src/main/descriptors/common-bin.xml | 28 +++-- assembly/src/release/conf/jetty.xml | 57 +++++------ pom.xml | 12 ++- 38 files changed, 412 insertions(+), 254 deletions(-) diff --git a/activemq-amqp/pom.xml b/activemq-amqp/pom.xml index 610b4ec80d..9d0ee6db49 100644 --- a/activemq-amqp/pom.xml +++ b/activemq-amqp/pom.xml @@ -118,7 +118,7 @@ </dependency> <dependency> <groupId>org.eclipse.jetty.websocket</groupId> - <artifactId>websocket-jetty-server</artifactId> + <artifactId>jetty-websocket-jetty-server</artifactId> <scope>test</scope> </dependency> <dependency> diff --git a/activemq-http/pom.xml b/activemq-http/pom.xml index 2bae67a3f1..2aa5f75619 100644 --- a/activemq-http/pom.xml +++ b/activemq-http/pom.xml @@ -65,8 +65,8 @@ <artifactId>jetty-xml</artifactId> </dependency> <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-webapp</artifactId> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-webapp</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> @@ -115,13 +115,37 @@ </dependency> <dependency> <groupId>org.eclipse.jetty.websocket</groupId> - <artifactId>websocket-jetty-client</artifactId> + <artifactId>jetty-websocket-core-client</artifactId> + <scope>provided</scope> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.websocket</groupId> + <artifactId>jetty-websocket-core-server</artifactId> <scope>provided</scope> <optional>true</optional> </dependency> + <dependency> + <groupId>org.eclipse.jetty.websocket</groupId> + <artifactId>jetty-websocket-jetty-client</artifactId> + <scope>provided</scope> + <optional>true</optional> + </dependency> <dependency> <groupId>org.eclipse.jetty.websocket</groupId> - <artifactId>websocket-jetty-server</artifactId> + <artifactId>jetty-websocket-jetty-api</artifactId> + <scope>provided</scope> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9.websocket</groupId> + <artifactId>jetty-ee9-websocket-jakarta-client</artifactId> + <scope>provided</scope> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9.websocket</groupId> + <artifactId>jetty-ee9-websocket-jetty-server</artifactId> <scope>provided</scope> <optional>true</optional> </dependency> diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/WebTransportServerSupport.java b/activemq-http/src/main/java/org/apache/activemq/transport/WebTransportServerSupport.java index f258e96854..21a7b4e6fd 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/WebTransportServerSupport.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/WebTransportServerSupport.java @@ -21,15 +21,14 @@ import java.net.InetAddress; import java.net.URI; import java.util.Map; -import org.apache.activemq.transport.http.BlockingQueueTransport; import org.apache.activemq.util.InetAddressUtil; import org.apache.activemq.util.IntrospectionSupport; -import org.eclipse.jetty.security.ConstraintMapping; -import org.eclipse.jetty.security.ConstraintSecurityHandler; +import org.eclipse.jetty.ee9.nested.ServletConstraint; +import org.eclipse.jetty.ee9.security.ConstraintMapping; +import org.eclipse.jetty.ee9.security.ConstraintSecurityHandler; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.util.resource.Resource; -import org.eclipse.jetty.util.security.Constraint; +import org.eclipse.jetty.util.resource.ResourceFactory; import org.eclipse.jetty.xml.XmlConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,13 +56,13 @@ abstract public class WebTransportServerSupport extends TransportServerSupport { protected void createServer() { LOG.info("Starting Jetty server"); if (jettyOptions.getConfig() != null) { - try { + try (ResourceFactory.Closeable resourceFactory = ResourceFactory.closeable()) { LOG.info("Configuring Jetty server using {}", jettyOptions.getConfig()); File file = new File(jettyOptions.getConfig()); if (!file.exists()) { throw new IllegalArgumentException("Jetty XML not found: " + file.getAbsolutePath()); } - XmlConfiguration xmlConfiguration = new XmlConfiguration(Resource.newResource(file)); + XmlConfiguration xmlConfiguration = new XmlConfiguration(resourceFactory.newResource(file.getPath())); server = (Server) xmlConfiguration.configure(); } catch (Throwable t) { throw new IllegalStateException("Jetty configuration can't be loaded", t); @@ -111,12 +110,17 @@ abstract public class WebTransportServerSupport extends TransportServerSupport { protected void configureTraceMethod(ConstraintSecurityHandler securityHandler, boolean enableTrace) { - Constraint constraint = new Constraint(); - constraint.setName("trace-security"); + + ServletConstraint servletConstraint; //If enableTrace is true, then we want to set authenticate to false to allow it - constraint.setAuthenticate(!enableTrace); + if(enableTrace) { + servletConstraint = new ServletConstraint("trace-security", ServletConstraint.ANY_AUTH); + } else { + servletConstraint = new ServletConstraint("trace-security", ServletConstraint.ANY_ROLE); + } + ConstraintMapping mapping = new ConstraintMapping(); - mapping.setConstraint(constraint); + mapping.setConstraint(servletConstraint); mapping.setMethod("TRACE"); mapping.setPathSpec("/"); securityHandler.addConstraintMapping(mapping); diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/discovery/http/EmbeddedJettyServer.java b/activemq-http/src/main/java/org/apache/activemq/transport/discovery/http/EmbeddedJettyServer.java index 786e3aac8d..0c996292cf 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/discovery/http/EmbeddedJettyServer.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/discovery/http/EmbeddedJettyServer.java @@ -19,8 +19,8 @@ package org.apache.activemq.transport.discovery.http; import java.net.URI; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.ee9.servlet.ServletContextHandler; +import org.eclipse.jetty.ee9.servlet.ServletHolder; public class EmbeddedJettyServer implements org.apache.activemq.Service { diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java b/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java index 5b21f0a9cc..4b354ceb76 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java @@ -27,14 +27,15 @@ import org.apache.activemq.transport.WebTransportServerSupport; import org.apache.activemq.transport.util.TextWireFormat; import org.apache.activemq.transport.xstream.XStreamWireFormat; import org.apache.activemq.util.ServiceStopper; -import org.eclipse.jetty.security.ConstraintSecurityHandler; +import org.eclipse.jetty.ee9.security.ConstraintSecurityHandler; import org.eclipse.jetty.server.ConnectionFactory; import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.handler.HandlerWrapper; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.server.Handler.Wrapper; +import org.eclipse.jetty.ee9.servlet.ServletContextHandler; +import org.eclipse.jetty.ee9.servlet.ServletHolder; public class HttpTransportServer extends WebTransportServerSupport { @@ -135,11 +136,11 @@ public class HttpTransportServer extends WebTransportServerSupport { } private void addGzipHandler(ServletContextHandler contextHandler) throws Exception { - HandlerWrapper handler = null; + Handler.Wrapper handler = null; try { - handler = (HandlerWrapper) forName("org.eclipse.jetty.servlets.gzip.GzipHandler").getConstructor().newInstance(); + handler = (Handler.Wrapper) forName("org.eclipse.jetty.servlets.gzip.GzipHandler").getConstructor().newInstance(); } catch (Throwable t) { - handler = (HandlerWrapper) forName("org.eclipse.jetty.server.handler.gzip.GzipHandler").getConstructor().newInstance(); + handler = (Handler.Wrapper) forName("org.eclipse.jetty.server.handler.gzip.GzipHandler").getConstructor().newInstance(); } contextHandler.insertHandler(handler); } diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/ws/StompWSConnection.java b/activemq-http/src/main/java/org/apache/activemq/transport/ws/StompWSConnection.java index 8c0fccb1cc..f052b7d966 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/ws/StompWSConnection.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/ws/StompWSConnection.java @@ -25,9 +25,9 @@ import java.util.concurrent.TimeUnit; import org.apache.activemq.transport.stomp.StompFrame; import org.apache.activemq.transport.stomp.StompWireFormat; -import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.WebSocketAdapter; -import org.eclipse.jetty.websocket.api.WebSocketListener; +import org.eclipse.jetty.ee9.websocket.api.Session; +import org.eclipse.jetty.ee9.websocket.api.WebSocketAdapter; +import org.eclipse.jetty.ee9.websocket.api.WebSocketListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -142,7 +142,7 @@ public class StompWSConnection extends WebSocketAdapter implements WebSocketList } @Override - public void onWebSocketConnect(org.eclipse.jetty.websocket.api.Session session) { + public void onWebSocketConnect(org.eclipse.jetty.ee9.websocket.api.Session session) { this.connection = session; this.connection.setIdleTimeout(Duration.ZERO); this.connectLatch.countDown(); diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportProxy.java b/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportProxy.java index a8242d4edd..dde57bbaf3 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportProxy.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportProxy.java @@ -34,8 +34,8 @@ import org.apache.activemq.util.IOExceptionSupport; import org.apache.activemq.util.IntrospectionSupport; import org.apache.activemq.util.ServiceStopper; import org.apache.activemq.wireformat.WireFormat; -import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.WebSocketListener; +import org.eclipse.jetty.ee9.websocket.api.Session; +import org.eclipse.jetty.ee9.websocket.api.WebSocketListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -222,8 +222,8 @@ public final class WSTransportProxy extends TransportSupport implements Transpor this.session.setIdleTimeout(Duration.ZERO); if (wsTransport.getMaxFrameSize() > 0) { - this.session.getPolicy().setMaxBinaryMessageSize(wsTransport.getMaxFrameSize()); - this.session.getPolicy().setMaxTextMessageSize(wsTransport.getMaxFrameSize()); + this.session.setMaxBinaryMessageSize(wsTransport.getMaxFrameSize()); + this.session.setMaxTextMessageSize(wsTransport.getMaxFrameSize()); } } diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java b/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java index 75cf1fd56c..4c7357a711 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java @@ -21,24 +21,22 @@ import java.net.InetSocketAddress; import java.net.URI; import java.util.Map; -import jakarta.servlet.Servlet; - import org.apache.activemq.broker.BrokerService; import org.apache.activemq.broker.BrokerServiceAware; import org.apache.activemq.command.BrokerInfo; import org.apache.activemq.transport.SocketConnectorFactory; import org.apache.activemq.transport.WebTransportServerSupport; -import org.apache.activemq.transport.ws.jetty11.WSServlet; +import org.apache.activemq.transport.ws.jetty12.WSServlet; import org.apache.activemq.util.IntrospectionSupport; import org.apache.activemq.util.ServiceStopper; -import org.eclipse.jetty.security.ConstraintSecurityHandler; import org.eclipse.jetty.server.ConnectionFactory; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer; +import org.eclipse.jetty.ee9.security.ConstraintSecurityHandler; +import org.eclipse.jetty.ee9.servlet.ServletContextHandler; +import org.eclipse.jetty.ee9.servlet.ServletHolder; +import org.eclipse.jetty.ee9.websocket.server.config.JettyWebSocketServletContainerInitializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -77,6 +75,7 @@ public class WSTransportServer extends WebTransportServerSupport implements Brok ServletContextHandler contextHandler = new ServletContextHandler(server, "/", ServletContextHandler.SECURITY); + // server.setHandler(contextHandler); Future: Jetty 12 EE10 API change ServletHolder holder = new ServletHolder(); JettyWebSocketServletContainerInitializer.configure(contextHandler, null); @@ -96,7 +95,7 @@ public class WSTransportServer extends WebTransportServerSupport implements Brok contextHandler.addServlet(holder, "/"); contextHandler.setAttribute("acceptListener", getAcceptListener()); - + server.start(); // Update the Connect To URI with our actual location in case the configured port @@ -118,7 +117,7 @@ public class WSTransportServer extends WebTransportServerSupport implements Brok LOG.info("Listening for connections at {}", getConnectURI()); } - private Servlet createWSServlet() throws Exception { + private WSServlet createWSServlet() throws Exception { servlet = new WSServlet(); servlet.setTransportOptions(transportOptions); servlet.setBrokerService(brokerService); diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/MQTTSocket.java b/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/MQTTSocket.java similarity index 96% rename from activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/MQTTSocket.java rename to activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/MQTTSocket.java index 853c201c34..6e14b9ec37 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/MQTTSocket.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/MQTTSocket.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.activemq.transport.ws.jetty11; +package org.apache.activemq.transport.ws.jetty12; import java.io.IOException; import java.nio.ByteBuffer; @@ -26,8 +26,8 @@ import org.apache.activemq.transport.mqtt.MQTTCodec; import org.apache.activemq.transport.ws.AbstractMQTTSocket; import org.apache.activemq.util.ByteSequence; import org.apache.activemq.util.IOExceptionSupport; -import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.WebSocketListener; +import org.eclipse.jetty.ee9.websocket.api.WebSocketListener; +import org.eclipse.jetty.ee9.websocket.api.Session; import org.fusesource.hawtbuf.Buffer; import org.fusesource.hawtbuf.DataByteArrayInputStream; import org.fusesource.mqtt.codec.DISCONNECT; diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/StompSocket.java b/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/StompSocket.java similarity index 95% rename from activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/StompSocket.java rename to activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/StompSocket.java index 5c718c8ab0..2a47a5156c 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/StompSocket.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/StompSocket.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.activemq.transport.ws.jetty11; +package org.apache.activemq.transport.ws.jetty12; import java.io.IOException; import java.time.Duration; @@ -24,8 +24,8 @@ import org.apache.activemq.transport.stomp.Stomp; import org.apache.activemq.transport.stomp.StompFrame; import org.apache.activemq.transport.ws.AbstractStompSocket; import org.apache.activemq.util.IOExceptionSupport; -import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.WebSocketListener; +import org.eclipse.jetty.ee9.websocket.api.Session; +import org.eclipse.jetty.ee9.websocket.api.WebSocketListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/WSServlet.java b/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/WSServlet.java similarity index 94% rename from activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/WSServlet.java rename to activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/WSServlet.java index 607248e4de..86183c8c4f 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty11/WSServlet.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/ws/jetty12/WSServlet.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.activemq.transport.ws.jetty11; +package org.apache.activemq.transport.ws.jetty12; import java.io.IOException; import java.net.URI; @@ -38,12 +38,12 @@ import org.apache.activemq.transport.TransportAcceptListener; import org.apache.activemq.transport.TransportFactory; import org.apache.activemq.transport.util.HttpTransportUtils; import org.apache.activemq.transport.ws.WSTransportProxy; -import org.eclipse.jetty.websocket.api.WebSocketListener; -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.ee9.websocket.api.WebSocketListener; +import org.eclipse.jetty.ee9.websocket.server.JettyServerUpgradeRequest; +import org.eclipse.jetty.ee9.websocket.server.JettyServerUpgradeResponse; +import org.eclipse.jetty.ee9.websocket.server.JettyWebSocketCreator; +import org.eclipse.jetty.ee9.websocket.server.JettyWebSocketServlet; +import org.eclipse.jetty.ee9.websocket.server.JettyWebSocketServletFactory; /** * Handle connection upgrade requests and creates web sockets diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpTraceTestSupport.java b/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpTraceTestSupport.java index 0eb35f6cf5..b55d45bc48 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpTraceTestSupport.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpTraceTestSupport.java @@ -24,10 +24,10 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.client.api.Result; -import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic; -import org.eclipse.jetty.client.util.BufferingResponseListener; +import org.eclipse.jetty.client.Request; +import org.eclipse.jetty.client.Result; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; +import org.eclipse.jetty.client.BufferingResponseListener; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.io.ClientConnector; diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSConnection.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSConnection.java index e127d077d0..845de35bdf 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSConnection.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSConnection.java @@ -27,9 +27,9 @@ import java.util.concurrent.TimeUnit; import org.apache.activemq.transport.mqtt.MQTTWireFormat; import org.apache.activemq.util.ByteSequence; -import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.WebSocketAdapter; -import org.eclipse.jetty.websocket.api.WebSocketListener; +import org.eclipse.jetty.ee9.websocket.api.Session; +import org.eclipse.jetty.ee9.websocket.api.WebSocketAdapter; +import org.eclipse.jetty.websocket.api.Session.Listener.AutoDemanding; import org.fusesource.hawtbuf.UTF8Buffer; import org.fusesource.mqtt.codec.CONNACK; import org.fusesource.mqtt.codec.CONNECT; @@ -49,13 +49,12 @@ import org.slf4j.LoggerFactory; /** * Implements a simple WebSocket based MQTT Client that can be used for unit testing. */ -public class MQTTWSConnection extends WebSocketAdapter implements WebSocketListener { +public class MQTTWSConnection extends WebSocketAdapter implements AutoDemanding { private static final Logger LOG = LoggerFactory.getLogger(MQTTWSConnection.class); private static final MQTTFrame PING_RESP_FRAME = new PINGRESP().encode(); - private Session connection; private final CountDownLatch connectLatch = new CountDownLatch(1); private final MQTTWireFormat wireFormat = new MQTTWireFormat(); @@ -67,17 +66,17 @@ public class MQTTWSConnection extends WebSocketAdapter implements WebSocketListe @Override public boolean isConnected() { - return connection != null ? connection.isOpen() : false; + return getSession() != null ? getSession().isOpen() : false; } public void close() { - if (connection != null) { - connection.close(); + if (getSession() != null) { + getSession().close(); } } protected Session getConnection() { - return connection; + return getSession(); } //----- Connection and Disconnection methods -----------------------------// @@ -193,7 +192,7 @@ public class MQTTWSConnection extends WebSocketAdapter implements WebSocketListe frame = (MQTTFrame)wireFormat.unmarshal(new ByteSequence(data, offset, length)); } catch (IOException e) { LOG.error("Could not decode incoming MQTT Frame: {}", e.getMessage()); - connection.close(); + getSession().close(); } try { @@ -243,11 +242,11 @@ public class MQTTWSConnection extends WebSocketAdapter implements WebSocketListe break; default: LOG.error("Unknown MQTT Frame received."); - connection.close(); + getSession().close(); } } catch (Exception e) { LOG.error("Could not decode incoming MQTT Frame: {}", e.getMessage()); - connection.close(); + getSession().close(); } } @@ -255,11 +254,11 @@ public class MQTTWSConnection extends WebSocketAdapter implements WebSocketListe private void sendBytes(ByteSequence payload) throws IOException { if (!isWritePartialFrames()) { - connection.getRemote().sendBytes(ByteBuffer.wrap(payload.data, payload.offset, payload.length)); + getRemote().sendBytes(ByteBuffer.wrap(payload.data, payload.offset, payload.length)); } else { - connection.getRemote().sendBytes(ByteBuffer.wrap( + getRemote().sendBytes(ByteBuffer.wrap( payload.data, payload.offset, payload.length / 2)); - connection.getRemote().sendBytes(ByteBuffer.wrap( + getRemote().sendBytes(ByteBuffer.wrap( payload.data, payload.offset + payload.length / 2, payload.length / 2)); } } @@ -274,16 +273,16 @@ public class MQTTWSConnection extends WebSocketAdapter implements WebSocketListe public void onWebSocketClose(int statusCode, String reason) { LOG.trace("MQTT WS Connection closed, code:{} message:{}", statusCode, reason); - this.connection = null; + getSession().close(statusCode, reason); this.closeCode = statusCode; this.closeMessage = reason; } @Override - public void onWebSocketConnect(org.eclipse.jetty.websocket.api.Session session) { - this.connection = session; - this.connection.setIdleTimeout(Duration.ZERO); + public void onWebSocketConnect(org.eclipse.jetty.ee9.websocket.api.Session session) { + super.onWebSocketConnect(session); + getSession().setIdleTimeout(Duration.ZERO); this.connectLatch.countDown(); } } diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSSubProtocolTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSSubProtocolTest.java index 46aa692b6a..2afddf84fe 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSSubProtocolTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSSubProtocolTest.java @@ -22,7 +22,7 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportTest.java index 9c524c4d3e..a92d7d7ff2 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportTest.java @@ -16,6 +16,7 @@ */ package org.apache.activemq.transport.ws; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -23,14 +24,16 @@ import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.activemq.util.Wait; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; import org.eclipse.jetty.websocket.client.WebSocketClient; import org.fusesource.hawtbuf.UTF8Buffer; @@ -86,7 +89,9 @@ public class MQTTWSTransportTest extends WSTransportTestSupport { wsMQTTConnection = new MQTTWSConnection().setWritePartialFrames(partialFrames); - wsClient.connect(wsMQTTConnection, wsConnectUri, request); + CompletableFuture<Session> webSocketFuture = wsClient.connect(wsMQTTConnection, wsConnectUri, request); + Session webSocketSession = webSocketFuture.get(30, TimeUnit.SECONDS); + assertNotNull(webSocketSession); if (!wsMQTTConnection.awaitConnection(30, TimeUnit.SECONDS)) { throw new IOException("Could not connect to MQTT WS endpoint"); } @@ -114,7 +119,8 @@ public class MQTTWSTransportTest extends WSTransportTestSupport { wsMQTTConnection = new MQTTWSConnection().setWritePartialFrames(partialFrames); - wsClient.connect(wsMQTTConnection, wsConnectUri, request); + CompletableFuture<Session> wsClientFuture = wsClient.connect(wsMQTTConnection, wsConnectUri, request); + wsClientFuture.get(30, TimeUnit.SECONDS); if (!wsMQTTConnection.awaitConnection(30, TimeUnit.SECONDS)) { throw new IOException("Could not connect to MQTT WS endpoint"); } diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportWillTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportWillTest.java index 9f8d7abf40..a9998069e2 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportWillTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/MQTTWSTransportWillTest.java @@ -26,7 +26,7 @@ import java.util.Collection; import java.util.concurrent.TimeUnit; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/SocketTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/SocketTest.java index 76910dfee3..9f2aecfc84 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/SocketTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/SocketTest.java @@ -18,8 +18,8 @@ package org.apache.activemq.transport.ws; import static org.junit.Assert.assertEquals; -import org.apache.activemq.transport.ws.jetty11.MQTTSocket; -import org.apache.activemq.transport.ws.jetty11.StompSocket; +import org.apache.activemq.transport.ws.jetty12.MQTTSocket; +import org.apache.activemq.transport.ws.jetty12.StompSocket; import org.junit.Test; public class SocketTest { @@ -31,8 +31,8 @@ public class SocketTest { assertEquals("ws://localhost:8080", stompSocketJetty8.getRemoteAddress()); - org.apache.activemq.transport.ws.jetty11.StompSocket stompSocketJetty11 = - new org.apache.activemq.transport.ws.jetty11.StompSocket("ws://localhost:8080"); + org.apache.activemq.transport.ws.jetty12.StompSocket stompSocketJetty11 = + new org.apache.activemq.transport.ws.jetty12.StompSocket("ws://localhost:8080"); assertEquals("ws://localhost:8080", stompSocketJetty11.getRemoteAddress()); } diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSSubProtocolTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSSubProtocolTest.java index 80a86c5d04..b689cca453 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSSubProtocolTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSSubProtocolTest.java @@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit; import org.apache.activemq.transport.stomp.Stomp; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSTransportTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSTransportTest.java index 83bb0e3aa5..10171510e4 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSTransportTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/StompWSTransportTest.java @@ -30,7 +30,7 @@ import org.apache.activemq.transport.stomp.StompFrame; import org.apache.activemq.util.Wait; import org.apache.activemq.util.Wait.Condition; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTest.java index d0e2d3bccc..870f35c930 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/ws/WSTransportTest.java @@ -32,17 +32,17 @@ import org.apache.activemq.broker.BrokerService; import org.apache.activemq.transport.SocketConnectorFactory; import org.apache.activemq.transport.stomp.StompConnection; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.client.api.Result; -import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic; -import org.eclipse.jetty.client.util.BufferingResponseListener; +import org.eclipse.jetty.client.Request; +import org.eclipse.jetty.client.Result; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; +import org.eclipse.jetty.client.BufferingResponseListener; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.eclipse.jetty.webapp.WebAppContext; +import org.eclipse.jetty.ee9.webapp.WebAppContext; import org.junit.After; import org.junit.Before; import org.junit.Test; diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportHttpTraceTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportHttpTraceTest.java index e160047790..2e1faa727a 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportHttpTraceTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportHttpTraceTest.java @@ -25,7 +25,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -@Ignore + @RunWith(Parameterized.class) public class WSSTransportHttpTraceTest extends WSTransportHttpTraceTest { diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportNeedClientAuthTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportNeedClientAuthTest.java index cfc9c73e5a..8553d555c2 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportNeedClientAuthTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/wss/WSSTransportNeedClientAuthTest.java @@ -23,7 +23,7 @@ import org.apache.activemq.transport.stomp.StompFrame; import org.apache.activemq.transport.ws.MQTTWSConnection; import org.apache.activemq.transport.ws.StompWSConnection; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.websocket.api.Session; @@ -145,12 +145,12 @@ public class WSSTransportNeedClientAuthTest { MQTTWSConnection wsMQTTConnection = new MQTTWSConnection(); wsClient.connect(wsMQTTConnection, new URI("wss://localhost:61618"), request); + if (!wsMQTTConnection.awaitConnection(30, TimeUnit.SECONDS)) { throw new IOException("Could not connect to MQTT WS endpoint"); } wsMQTTConnection.connect(); - assertTrue("Client not connected", wsMQTTConnection.isConnected()); wsMQTTConnection.disconnect(); diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java index 5a5e611298..90a5c850dd 100644 --- a/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java +++ b/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java @@ -20,7 +20,6 @@ import java.io.IOException; import junit.framework.Test; import org.apache.activemq.command.ActiveMQTextMessage; -import org.apache.activemq.command.Command; import org.apache.activemq.command.MessageTest; import org.apache.activemq.wireformat.WireFormat; import org.slf4j.Logger; diff --git a/activemq-http/src/test/resources/spring-http.xml b/activemq-http/src/test/resources/spring-http.xml index 1a65db4372..129ae77c8c 100644 --- a/activemq-http/src/test/resources/spring-http.xml +++ b/activemq-http/src/test/resources/spring-http.xml @@ -44,7 +44,7 @@ <!-- lets wrap in a pool to avoid creating a connection per send --> <bean class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory"> - <ref local="jmsFactory" /> + <ref bean="jmsFactory" /> </property> </bean> </property> diff --git a/activemq-web-console/pom.xml b/activemq-web-console/pom.xml index 9e90f6e89c..04f5c2f5a2 100644 --- a/activemq-web-console/pom.xml +++ b/activemq-web-console/pom.xml @@ -248,6 +248,11 @@ </dependency> <!-- web container --> + <dependency> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-webapp</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> @@ -330,8 +335,8 @@ </dependency> <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>apache-jsp</artifactId> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-apache-jsp</artifactId> <scope>provided</scope> <exclusions> <exclusion> diff --git a/activemq-web-console/src/test/java/org/apache/activemq/web/tool/Main.java b/activemq-web-console/src/test/java/org/apache/activemq/web/tool/Main.java index 443f102236..1f06c789ad 100644 --- a/activemq-web-console/src/test/java/org/apache/activemq/web/tool/Main.java +++ b/activemq-web-console/src/test/java/org/apache/activemq/web/tool/Main.java @@ -18,9 +18,11 @@ package org.apache.activemq.web.tool; import org.apache.activemq.web.config.JspConfigurer; +import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandlerCollection; -import org.eclipse.jetty.webapp.WebAppContext; +import org.eclipse.jetty.util.resource.ResourceFactory; +import org.eclipse.jetty.ee9.webapp.WebAppContext; /** * A simple bootstrap class for starting Jetty in your IDE using the local web @@ -50,22 +52,25 @@ public final class Main { System.out.println("Starting Web Server on port: " + port); System.setProperty("jetty.port", "" + port); Server server = new Server(port); + Handler.Sequence rootHandler = new Handler.Sequence(); + server.setHandler(rootHandler); //System.setProperty("webconsole.type","properties"); //System.setProperty("webconsole.jms.url","tcp://localhost:61616"); //System.setProperty("webconsole.jmx.url","service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-root"); WebAppContext context = new WebAppContext(); - ContextHandlerCollection handlers = new ContextHandlerCollection(); - handlers.setHandlers(new WebAppContext[] {context}); + ResourceFactory resourceFactory = ResourceFactory.of(context); + context.setBaseResource(resourceFactory.newResource(WEBAPP_DIR)); - JspConfigurer.configureJetty(server, handlers); + ContextHandlerCollection contextHandlers = new ContextHandlerCollection(); + contextHandlers.addHandler(contextHandlers); + contextHandlers.addBean(context); + JspConfigurer.configureJetty(server, contextHandlers); - context.setResourceBase(WEBAPP_DIR); context.setContextPath(WEBAPP_CTX); context.setServer(server); - server.setHandler(handlers); server.start(); System.out.println(); diff --git a/activemq-web-demo/pom.xml b/activemq-web-demo/pom.xml index ec0c380a4a..19769639dc 100644 --- a/activemq-web-demo/pom.xml +++ b/activemq-web-demo/pom.xml @@ -188,6 +188,11 @@ <artifactId>jetty-server</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-webapp</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-client</artifactId> diff --git a/activemq-web-demo/src/test/java/org/apache/activemq/web/AjaxTest.java b/activemq-web-demo/src/test/java/org/apache/activemq/web/AjaxTest.java index f3f88d8d2d..c0b77c0896 100644 --- a/activemq-web-demo/src/test/java/org/apache/activemq/web/AjaxTest.java +++ b/activemq-web-demo/src/test/java/org/apache/activemq/web/AjaxTest.java @@ -19,8 +19,8 @@ package org.apache.activemq.web; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import java.io.ByteArrayInputStream; import java.net.SocketTimeoutException; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -34,10 +34,10 @@ import org.apache.activemq.transport.stomp.Stomp; import org.apache.activemq.transport.stomp.StompConnection; import org.apache.activemq.transport.stomp.StompFrame; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.client.api.Result; -import org.eclipse.jetty.client.util.BufferingResponseListener; -import org.eclipse.jetty.client.util.InputStreamContentProvider; +import org.eclipse.jetty.client.Request; +import org.eclipse.jetty.client.Result; +import org.eclipse.jetty.client.BufferingResponseListener; +import org.eclipse.jetty.client.BytesRequestContent; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; import org.junit.Test; @@ -422,9 +422,9 @@ public class AjaxTest extends JettyTestSupport { final StringBuffer buf = new StringBuffer(); httpClient .newRequest("http://localhost:" + port + "/amq") - .header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") - .content( - new InputStreamContentProvider(new ByteArrayInputStream(content))) + .headers(headers -> headers + .put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")) + .body(new BytesRequestContent(content)) .method(HttpMethod.POST).send(new BufferingResponseListener() { @Override public void onComplete(Result result) { @@ -445,24 +445,28 @@ public class AjaxTest extends JettyTestSupport { final StringBuffer sessionId = new StringBuffer(); Request request = httpClient.newRequest("http://localhost:" + port + "/amq"); if (selector != null) { - request.header("selector", selector); + request.headers(headers -> headers + .put("selector", selector)); } if (session != null) { - request.header(HttpHeader.COOKIE, session); + request.headers(headers -> headers + .put(HttpHeader.COOKIE, session)); } - request.header("Content-Type","application/x-www-form-urlencoded; charset=UTF-8") - .content(new InputStreamContentProvider(new ByteArrayInputStream(content.getBytes()))) - .method(HttpMethod.POST).send(new BufferingResponseListener() { - @Override - public void onComplete(Result result) { - buf.append(getContentAsString()); - String cookie = result.getResponse().getHeaders().get(HttpHeader.SET_COOKIE); - if (cookie != null) { - String[] cookieParts = cookie.split(";"); - sessionId.append(cookieParts[0]); + request + .headers(headers -> headers + .put("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")) + .body(new BytesRequestContent(content.getBytes(StandardCharsets.UTF_8))) + .method(HttpMethod.POST).send(new BufferingResponseListener() { + @Override + public void onComplete(Result result) { + buf.append(getContentAsString()); + String cookie = result.getResponse().getHeaders().get(HttpHeader.SET_COOKIE); + if (cookie != null) { + String[] cookieParts = cookie.split(";"); + sessionId.append(cookieParts[0]); + } + latch.countDown(); } - latch.countDown(); - } }); latch.await(); @@ -474,7 +478,8 @@ public class AjaxTest extends JettyTestSupport { final CountDownLatch latch = new CountDownLatch(1); Request request = httpClient.newRequest(url); if (sessionId != null) { - request.header(HttpHeader.COOKIE, sessionId); + request.headers(headers -> headers + .put(HttpHeader.COOKIE, sessionId)); } request.send(new BufferingResponseListener() { @Override diff --git a/activemq-web-demo/src/test/java/org/apache/activemq/web/JettyServer.java b/activemq-web-demo/src/test/java/org/apache/activemq/web/JettyServer.java index 8069954adc..eb5602eb04 100644 --- a/activemq-web-demo/src/test/java/org/apache/activemq/web/JettyServer.java +++ b/activemq-web-demo/src/test/java/org/apache/activemq/web/JettyServer.java @@ -22,7 +22,8 @@ import org.apache.activemq.demo.DefaultQueueSender; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.webapp.WebAppContext; +import org.eclipse.jetty.util.resource.ResourceFactory; +import org.eclipse.jetty.ee9.webapp.WebAppContext; /** * A simple bootstrap class for starting Jetty in your IDE using the local web @@ -66,8 +67,9 @@ public final class JettyServer { ServerConnector connector = new ServerConnector(server); connector.setPort(port); WebAppContext context = new WebAppContext(); + ResourceFactory resourceFactory = ResourceFactory.of(context); - context.setResourceBase(WEBAPP_DIR); + context.setBaseResource(resourceFactory.newResource(WEBAPP_DIR)); context.setContextPath(WEBAPP_CTX); context.setServer(server); server.setHandler(context); diff --git a/activemq-web-demo/src/test/java/org/apache/activemq/web/JettyTestSupport.java b/activemq-web-demo/src/test/java/org/apache/activemq/web/JettyTestSupport.java index 59e957b595..7fd016d15e 100644 --- a/activemq-web-demo/src/test/java/org/apache/activemq/web/JettyTestSupport.java +++ b/activemq-web-demo/src/test/java/org/apache/activemq/web/JettyTestSupport.java @@ -36,7 +36,8 @@ import org.apache.activemq.util.Wait; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.webapp.WebAppContext; +import org.eclipse.jetty.util.resource.ResourceFactory; +import org.eclipse.jetty.ee9.webapp.WebAppContext; import org.junit.After; import org.junit.Before; import org.slf4j.Logger; @@ -77,8 +78,9 @@ public class JettyTestSupport { ServerConnector connector = new ServerConnector(server); connector.setPort(port); WebAppContext context = new WebAppContext(); + ResourceFactory resourceFactory = ResourceFactory.of(context); - context.setResourceBase("src/main/webapp"); + context.setBaseResource(resourceFactory.newResource("src/main/webapp")); context.setContextPath("/"); context.setServer(server); server.setHandler(context); diff --git a/activemq-web-demo/src/test/java/org/apache/activemq/web/RestPersistentTest.java b/activemq-web-demo/src/test/java/org/apache/activemq/web/RestPersistentTest.java index 61345eaa80..87382c55c2 100644 --- a/activemq-web-demo/src/test/java/org/apache/activemq/web/RestPersistentTest.java +++ b/activemq-web-demo/src/test/java/org/apache/activemq/web/RestPersistentTest.java @@ -25,10 +25,11 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.client.api.Result; -import org.eclipse.jetty.client.util.BufferingResponseListener; -import org.eclipse.jetty.client.util.InputStreamContentProvider; +import org.eclipse.jetty.client.InputStreamRequestContent; +import org.eclipse.jetty.client.Request; +import org.eclipse.jetty.client.Result; +import org.eclipse.jetty.client.BufferingResponseListener; +import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpStatus; import org.junit.Ignore; @@ -79,9 +80,12 @@ public class RestPersistentTest extends JettyTestSupport { final CountDownLatch latch = new CountDownLatch(1); final StringBuffer buf = new StringBuffer(); final AtomicInteger status = new AtomicInteger(); + + httpClient.newRequest(url+"&"+properties) - .header("Content-Type","text/xml") - .content(new InputStreamContentProvider(new ByteArrayInputStream(message.getBytes("UTF-8")))) + .headers(headers -> headers + .put(HttpHeader.CONTENT_TYPE,"text/xml")) + .body(new InputStreamRequestContent(new ByteArrayInputStream(message.getBytes("UTF-8")))) .method(HttpMethod.POST).send(new BufferingResponseListener() { @Override public void onComplete(Result result) { @@ -101,13 +105,15 @@ public class RestPersistentTest extends JettyTestSupport { final CountDownLatch latch = new CountDownLatch(1); final StringBuffer buf = new StringBuffer(); final AtomicInteger status = new AtomicInteger(); + Request request = httpClient.newRequest(url) - .header("accept", "text/xml") - .header("Content-Type","text/xml"); + .headers(headers -> headers + .put("accept", "text/xml") + .put("Content-Type","text/xml")); - if(selector!=null) - { - request.header("selector", selector); + if(selector != null) { + request.headers(headers -> headers + .put("selector", selector)); } request.method(HttpMethod.GET).send(new BufferingResponseListener() { diff --git a/activemq-web-demo/src/test/java/org/apache/activemq/web/RestTest.java b/activemq-web-demo/src/test/java/org/apache/activemq/web/RestTest.java index 1c94219712..cfb7ca0312 100644 --- a/activemq-web-demo/src/test/java/org/apache/activemq/web/RestTest.java +++ b/activemq-web-demo/src/test/java/org/apache/activemq/web/RestTest.java @@ -34,8 +34,8 @@ import jakarta.jms.TextMessage; import javax.management.ObjectName; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.Result; -import org.eclipse.jetty.client.util.BufferingResponseListener; +import org.eclipse.jetty.client.Result; +import org.eclipse.jetty.client.BufferingResponseListener; import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpStatus; @@ -149,24 +149,26 @@ public class RestTest extends JettyTestSupport { producer.send(msg2); LOG.info("message 2 sent"); - HttpClient httpClient = new HttpClient(); - httpClient.start(); - final StringBuffer buf = new StringBuffer(); final CountDownLatch latch = new CountDownLatch(1); - httpClient.newRequest("http://localhost:" + port + "/message/test?readTimeout=1000&type=queue") - .header("selector", "test=2").send(new BufferingResponseListener() { - @Override - public void onComplete(Result result) { - buf.append(getContentAsString()); - latch.countDown(); - } - }); - latch.await(); + + try(HttpClient httpClient = new HttpClient()) { + httpClient.start(); + httpClient.newRequest("http://localhost:" + port + "/message/test?readTimeout=1000&type=queue") + .headers(headers -> headers + .put("selector", "test=2")) + .send(new BufferingResponseListener() { + @Override + public void onComplete(Result result) { + buf.append(getContentAsString()); + latch.countDown(); + } + }); + latch.await(); + } assertEquals("test2", buf.toString()); } - // test for https://issues.apache.org/activemq/browse/AMQ-2827 @Test(timeout = 15 * 1000) public void testCorrelation() throws Exception { @@ -270,23 +272,25 @@ public class RestTest extends JettyTestSupport { public void testProperties() throws Exception { int port = getPort(); - HttpClient httpClient = new HttpClient(); - httpClient.start(); - final CountDownLatch latch = new CountDownLatch(1); final StringBuffer buf = new StringBuffer(); final AtomicInteger status = new AtomicInteger(); - httpClient.newRequest("http://localhost:" + port + "/message/testPost?type=queue&property=value") - .method(HttpMethod.POST).send(new BufferingResponseListener() { - @Override - public void onComplete(Result result) { - status.getAndSet(result.getResponse().getStatus()); - buf.append(getContentAsString()); - latch.countDown(); - } - }); - latch.await(); + try(HttpClient httpClient = new HttpClient()) { + httpClient.start(); + + httpClient.newRequest("http://localhost:" + port + "/message/testPost?type=queue&property=value") + .method(HttpMethod.POST).send(new BufferingResponseListener() { + @Override + public void onComplete(Result result) { + status.getAndSet(result.getResponse().getStatus()); + buf.append(getContentAsString()); + latch.countDown(); + } + }); + latch.await(); + } + assertTrue("success status", HttpStatus.isSuccess(status.get())); final CountDownLatch latch2 = new CountDownLatch(1); @@ -294,16 +298,19 @@ public class RestTest extends JettyTestSupport { final AtomicInteger status2 = new AtomicInteger(); final HttpFields.Mutable responseFields = HttpFields.build(); - httpClient.newRequest("http://localhost:" + port + "/message/testPost?readTimeout=1000&type=Queue") - .method(HttpMethod.GET).send(new BufferingResponseListener() { - @Override - public void onComplete(Result result) { - responseFields.add(result.getResponse().getHeaders()); - status2.getAndSet(result.getResponse().getStatus()); - buf2.append(getContentAsString()); - latch2.countDown(); - } - }); + try(HttpClient httpClient = new HttpClient()) { + httpClient.start(); + httpClient.newRequest("http://localhost:" + port + "/message/testPost?readTimeout=1000&type=Queue") + .method(HttpMethod.GET).send(new BufferingResponseListener() { + @Override + public void onComplete(Result result) { + responseFields.add(result.getResponse().getHeaders()); + status2.getAndSet(result.getResponse().getStatus()); + buf2.append(getContentAsString()); + latch2.countDown(); + } + }); + } latch2.await(); assertTrue("success status", HttpStatus.isSuccess(status2.get())); @@ -318,25 +325,25 @@ public class RestTest extends JettyTestSupport { public void testAuth() throws Exception { int port = getPort(); - HttpClient httpClient = new HttpClient(); - httpClient.start(); - final CountDownLatch latch = new CountDownLatch(1); final StringBuffer buf = new StringBuffer(); final AtomicInteger status = new AtomicInteger(); - httpClient.newRequest("http://localhost:" + port + "/message/testPost?type=queue") - .header("Authorization", "Basic YWRtaW46YWRtaW4=") - .method(HttpMethod.POST).send(new BufferingResponseListener() { - @Override - public void onComplete(Result result) { - status.getAndSet(result.getResponse().getStatus()); - buf.append(getContentAsString()); - latch.countDown(); - } - }); - - latch.await(); + try(HttpClient httpClient = new HttpClient()) { + httpClient.start(); + httpClient.newRequest("http://localhost:" + port + "/message/testPost?type=queue") + .headers(headers -> headers + .put("Authorization", "Basic YWRtaW46YWRtaW4=")) + .method(HttpMethod.POST).send(new BufferingResponseListener() { + @Override + public void onComplete(Result result) { + status.getAndSet(result.getResponse().getStatus()); + buf.append(getContentAsString()); + latch.countDown(); + } + }); + latch.await(); + } assertTrue("success status", HttpStatus.isSuccess(status.get())); } diff --git a/activemq-web/pom.xml b/activemq-web/pom.xml index 11f556b220..4f67b91687 100644 --- a/activemq-web/pom.xml +++ b/activemq-web/pom.xml @@ -79,12 +79,12 @@ <scope>provided</scope> </dependency> <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-webapp</artifactId> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-webapp</artifactId> </dependency> <dependency> - <groupId>org.eclipse.jetty.websocket</groupId> - <artifactId>websocket-jetty-server</artifactId> + <groupId>org.eclipse.jetty.ee9.websocket</groupId> + <artifactId>jetty-ee9-websocket-jetty-server</artifactId> </dependency> <!-- Just used for testing --> diff --git a/activemq-web/src/main/java/org/apache/activemq/web/config/JspConfigurer.java b/activemq-web/src/main/java/org/apache/activemq/web/config/JspConfigurer.java index aecff8d59d..6fe6d53779 100644 --- a/activemq-web/src/main/java/org/apache/activemq/web/config/JspConfigurer.java +++ b/activemq-web/src/main/java/org/apache/activemq/web/config/JspConfigurer.java @@ -18,9 +18,8 @@ package org.apache.activemq.web.config; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.handler.HandlerCollection; -import org.eclipse.jetty.webapp.Configuration; -import org.eclipse.jetty.webapp.WebAppContext; +import org.eclipse.jetty.server.Handler.Sequence; +import org.eclipse.jetty.ee9.webapp.WebAppContext; /** * @@ -28,7 +27,7 @@ import org.eclipse.jetty.webapp.WebAppContext; */ public class JspConfigurer { - public static void configureJetty(Server server, HandlerCollection collection) { + public static void configureJetty(Server server, Sequence sequence) { // Configuration.ClassList classlist = Configuration.ClassList // .setServerDefault( server ); // classlist.addBefore( @@ -39,7 +38,7 @@ public class JspConfigurer { // container-path jars for tlds, web-fragments etc. // If you omit the jar that contains the jstl .tlds, the jsp engine will // scan for them instead. - for (Handler handler: collection.getHandlers()) { + for (Handler handler: sequence.getHandlers()) { if (handler instanceof WebAppContext){ ((WebAppContext) handler).setAttribute( "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", diff --git a/assembly/pom.xml b/assembly/pom.xml index 424f0cccc2..135989e405 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -371,20 +371,45 @@ <optional>false</optional> </dependency> <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-oxm</artifactId> + <groupId>org.springframework</groupId> + <artifactId>spring-oxm</artifactId> </dependency> <dependency> <groupId>org.codehaus.jettison</groupId> <artifactId>jettison</artifactId> </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-webapp</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-annotations</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-nested</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-security</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-servlet</artifactId> + </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-annotations</artifactId> + <artifactId>jetty-ee</artifactId> + <version>${jetty-version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-jaas</artifactId> + <artifactId>jetty-security</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-session</artifactId> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> @@ -402,6 +427,56 @@ <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-rewrite</artifactId> </dependency> + <dependency> + <groupId>org.eclipse.jetty.websocket</groupId> + <artifactId>jetty-websocket-core-client</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.websocket</groupId> + <artifactId>jetty-websocket-core-common</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.websocket</groupId> + <artifactId>jetty-websocket-core-server</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.websocket</groupId> + <artifactId>jetty-websocket-jetty-client</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.websocket</groupId> + <artifactId>jetty-websocket-jetty-api</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9.websocket</groupId> + <artifactId>jetty-ee9-websocket-jakarta-client</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9.websocket</groupId> + <artifactId>jetty-ee9-websocket-jetty-api</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9.websocket</groupId> + <artifactId>jetty-ee9-websocket-jetty-common</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9.websocket</groupId> + <artifactId>jetty-ee9-websocket-jetty-server</artifactId> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9.websocket</groupId> + <artifactId>jetty-ee9-websocket-servlet</artifactId> + </dependency> +<!-- +o 'org.eclipse.jetty.websocket:websocket-core-common' +o 'org.eclipse.jetty.websocket:websocket-core-server' +o 'org.eclipse.jetty.websocket:websocket-jetty-api' +o 'org.eclipse.jetty.websocket:websocket-jetty-common' +o 'org.eclipse.jetty.websocket:websocket-jetty-server' +o 'org.eclipse.jetty.websocket:websocket-servlet' +o 'org.eclipse.jetty.orbit:javax.security.auth.message' +o 'org.eclipse.jetty:apache-jsp' +--> <dependency> <groupId>org.eclipse.jdt</groupId> <artifactId>ecj</artifactId> @@ -446,8 +521,8 @@ </dependency> <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>apache-jsp</artifactId> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-apache-jsp</artifactId> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> diff --git a/assembly/src/main/descriptors/common-bin.xml b/assembly/src/main/descriptors/common-bin.xml index 833e3f7dc6..00dec896b0 100644 --- a/assembly/src/main/descriptors/common-bin.xml +++ b/assembly/src/main/descriptors/common-bin.xml @@ -257,34 +257,42 @@ <dependencySet> <outputDirectory>lib/web</outputDirectory> <unpack>false</unpack> - <scope>runtime</scope> + <!-- scope>runtime</scope --> <includes> <include>org.springframework:spring-web</include> <include>org.springframework:spring-webmvc</include> - <include>org.eclipse.jetty:jetty-annotations</include> + <include>org.eclipse.jetty:jetty-ee</include> <include>org.eclipse.jetty:jetty-server</include> + <include>org.eclipse.jetty:jetty-session</include> <include>org.eclipse.jetty:jetty-xml</include> - <include>org.eclipse.jetty:jetty-webapp</include> <include>org.eclipse.jetty:jetty-util</include> <include>org.eclipse.jetty:jetty-http</include> <include>org.eclipse.jetty:jetty-io</include> - <include>org.eclipse.jetty:jetty-jaas</include> <include>org.eclipse.jetty:jetty-jndi</include> <include>org.eclipse.jetty:jetty-plus</include> - <include>org.eclipse.jetty:jetty-servlet</include> <include>org.eclipse.jetty:jetty-security</include> <include>org.eclipse.jetty:jetty-rewrite</include> + <include>org.eclipse.jetty.ee9:jetty-ee9-nested</include> + <include>org.eclipse.jetty.ee9:jetty-ee9-security</include> + <include>org.eclipse.jetty.ee9:jetty-ee9-servlet</include> + <include>org.eclipse.jetty.ee9:jetty-ee9-webapp</include> + <include>org.eclipse.jetty.ee9:jetty-ee9-apache-jsp</include> <include>org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api</include> - <include>org.eclipse.jetty.websocket:websocket-core-common</include> - <include>org.eclipse.jetty.websocket:websocket-core-server</include> - <include>org.eclipse.jetty.websocket:websocket-jetty-api</include> + <include>org.eclipse.jetty.websocket:jetty-websocket-core-client</include> + <include>org.eclipse.jetty.websocket:jetty-websocket-core-common</include> + <include>org.eclipse.jetty.websocket:jetty-websocket-core-server</include> + <include>org.eclipse.jetty.websocket:jetty-websocket-jetty-client</include> + <include>org.eclipse.jetty.websocket:jetty-websocket-jetty-api</include> <include>org.eclipse.jetty.websocket:websocket-jetty-common</include> <include>org.eclipse.jetty.websocket:websocket-jetty-server</include> - <include>org.eclipse.jetty.websocket:websocket-servlet</include> <include>org.eclipse.jetty.orbit:javax.security.auth.message</include> + <include>org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-client</include> + <include>org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jetty-api</include> + <include>org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jetty-common</include> + <include>org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jetty-server</include> + <include>org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-servlet</include> <!-- include>jakarta.servlet:jakarta.servlet-api</include --> <include>jakarta.websocket:jakarta.websocket-api</include> - <!-- JSP support --> <!-- Jetty JSP api--> <include>org.eclipse.jetty:apache-jsp</include> diff --git a/assembly/src/release/conf/jetty.xml b/assembly/src/release/conf/jetty.xml index fdc922c688..e53489ef94 100644 --- a/assembly/src/release/conf/jetty.xml +++ b/assembly/src/release/conf/jetty.xml @@ -11,8 +11,7 @@ implied. See the License for the specific language governing permissions and limitations under the License. --> - <!-- - An embedded servlet engine for serving up the Admin consoles, REST and Ajax APIs and + <!-- An embedded servlet engine for serving up the Admin consoles, REST and Ajax APIs and some demos Include this file in your configuration to enable ActiveMQ web components e.g. <import resource="jetty.xml"/> --> @@ -50,7 +49,7 @@ --> </bean> - <bean id="jaasLoginService" class="org.eclipse.jetty.jaas.JAASLoginService"> + <bean id="jaasLoginService" class="org.eclipse.jetty.security.jaas.JAASLoginService"> <property name="name" value="ActiveMQRealm"/> <property name="loginModuleName" value="activemq"/> <property name="roleClassNames"> @@ -62,13 +61,13 @@ <bean id="identityService" class="org.eclipse.jetty.security.DefaultIdentityService"/> - <bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint"> + <bean id="securityConstraint" class="org.eclipse.jetty.ee9.nested.ServletConstraint"> <property name="name" value="BASIC" /> <property name="roles" value="users,admins" /> <!-- set authenticate=false to disable login --> <property name="authenticate" value="true" /> </bean> - <bean id="adminSecurityConstraint" class="org.eclipse.jetty.util.security.Constraint"> + <bean id="adminSecurityConstraint" class="org.eclipse.jetty.ee9.nested.ServletConstraint"> <property name="name" value="BASIC" /> <property name="roles" value="admins" /> <!-- set authenticate=false to disable login --> @@ -78,7 +77,7 @@ Catch-all mapping: any request not matched by a more specific constraint below requires authentication as a user or admin. --> - <bean id="securityConstraintMapping" class="org.eclipse.jetty.security.ConstraintMapping"> + <bean id="securityConstraintMapping" class="org.eclipse.jetty.ee9.security.ConstraintMapping"> <property name="constraint" ref="securityConstraint" /> <property name="pathSpec" value="/" /> </bean> @@ -87,7 +86,7 @@ the full console UI, not just the *.action endpoints, so read-only pages (queue listings, message browsing, etc.) also require admin. --> - <bean id="adminSecurityConstraintMapping" class="org.eclipse.jetty.security.ConstraintMapping"> + <bean id="adminSecurityConstraintMapping" class="org.eclipse.jetty.ee9.security.ConstraintMapping"> <property name="constraint" ref="adminSecurityConstraint" /> <property name="pathSpec" value="/admin/*" /> </bean> @@ -95,33 +94,33 @@ Jolokia JMX bridge exposes broker management operations over HTTP; restrict to the admins role to prevent privilege escalation via JMX. --> - <bean id="jolokiaSecurityConstraintMapping" class="org.eclipse.jetty.security.ConstraintMapping"> + <bean id="jolokiaSecurityConstraintMapping" class="org.eclipse.jetty.ee9.security.ConstraintMapping"> <property name="constraint" ref="adminSecurityConstraint" /> <property name="pathSpec" value="/api/jolokia/*" /> </bean> - + <bean id="rewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> <property name="rules"> <list> <bean id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <property name="pattern" value="*"/> - <property name="name" value="X-FRAME-OPTIONS"/> - <property name="value" value="SAMEORIGIN"/> + <property name="headerName" value="X-FRAME-OPTIONS"/> + <property name="headerValue" value="SAMEORIGIN"/> </bean> <bean id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <property name="pattern" value="*"/> - <property name="name" value="X-XSS-Protection"/> - <property name="value" value="1; mode=block"/> + <property name="headerName" value="X-XSS-Protection"/> + <property name="headerValue" value="1; mode=block"/> </bean> <bean id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <property name="pattern" value="*"/> - <property name="name" value="X-Content-Type-Options"/> - <property name="value" value="nosniff"/> + <property name="headerName" value="X-Content-Type-Options"/> + <property name="headerValue" value="nosniff"/> </bean> <bean id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <property name="pattern" value="*"/> - <property name="name" value="Cache-Control"/> - <property name="value" value="no-store"/> + <property name="headerName" value="Cache-Control"/> + <property name="headerValue" value="no-store"/> </bean> <bean id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <property name="pattern" value="*"/> @@ -165,37 +164,37 @@ </list> </property> </bean> - - <bean id="secHandlerCollection" class="org.eclipse.jetty.server.handler.HandlerCollection"> - <property name="handlers"> + + <bean id="secHandlerCollection" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"> + <constructor-arg> <list> <ref bean="rewriteHandler"/> - <bean class="org.eclipse.jetty.webapp.WebAppContext"> + <bean class="org.eclipse.jetty.ee9.webapp.WebAppContext"> <property name="contextPath" value="/admin" /> <property name="resourceBase" value="${activemq.home}/webapps/admin" /> <property name="logUrlOnStart" value="true" /> </bean> - <bean class="org.eclipse.jetty.webapp.WebAppContext"> + <bean class="org.eclipse.jetty.ee9.webapp.WebAppContext"> <property name="contextPath" value="/api" /> <property name="resourceBase" value="${activemq.home}/webapps/api" /> <property name="logUrlOnStart" value="true" /> </bean> <bean class="org.eclipse.jetty.server.handler.ResourceHandler"> - <property name="directoriesListed" value="false" /> + <property name="dirAllowed" value="false" /> <property name="welcomeFiles"> <list> <value>index.html</value> </list> </property> - <property name="resourceBase" value="${activemq.home}/webapps/" /> + <property name="baseResourceAsString" value="${activemq.home}/webapps/" /> </bean> <bean id="defaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"> - <property name="serveIcon" value="false" /> + <property name="serveFavIcon" value="false" /> </bean> </list> - </property> + </constructor-arg> </bean> - <bean id="securityHandler" class="org.eclipse.jetty.security.ConstraintSecurityHandler"> + <bean id="securityHandler" class="org.eclipse.jetty.ee9.security.ConstraintSecurityHandler"> <property name="identityService" ref="identityService" /> <property name="loginService" ref="jaasLoginService" /> <property name="authenticator"> @@ -220,7 +219,7 @@ <property name="port" value="8161"/> </bean> - <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> + <bean id="handlers" class="org.eclipse.jetty.server.Handler$Sequence"> <property name="handlers"> <list> <ref bean="contexts" /> @@ -355,7 +354,7 @@ </list> </property> </bean> - + <bean id="invokeStart" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" depends-on="broker, configureJetty, invokeConnectors, inetAccessIncludeLoopbackV6"> <property name="targetObject" ref="Server" /> diff --git a/pom.xml b/pom.xml index a00e607232..56414e2d6d 100644 --- a/pom.xml +++ b/pom.xml @@ -71,8 +71,8 @@ <jakarta-jms-api-version>3.1.0</jakarta-jms-api-version> <jasypt-version>1.9.3</jasypt-version> <jaxb-version>4.0.9</jaxb-version> - <jetty-version>11.0.26</jetty-version> - <jetty-version-range>[11,13)</jetty-version-range> + <jetty-version>12.0.21</jetty-version> + <jetty-version-range>[12,13)</jetty-version-range> <jmdns-version>3.6.3</jmdns-version> <javassist-version>3.32.0-GA</javassist-version> <jettison-version>1.5.6</jettison-version> @@ -830,6 +830,14 @@ <scope>import</scope> </dependency> + <dependency> + <groupId>org.eclipse.jetty.ee9</groupId> + <artifactId>jetty-ee9-bom</artifactId> + <version>${jetty-version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] For further information, visit: https://activemq.apache.org/contact
