diff --git a/activemq-amqp/pom.xml b/activemq-amqp/pom.xml index 4a181a35ae2..5a982d80b0b 100644 --- a/activemq-amqp/pom.xml +++ b/activemq-amqp/pom.xml @@ -114,7 +114,7 @@ org.eclipse.jetty.websocket - websocket-jetty-server + jetty-websocket-jetty-server test diff --git a/activemq-http/pom.xml b/activemq-http/pom.xml index 8f1e978b4bc..7a1c6adb3dd 100644 --- a/activemq-http/pom.xml +++ b/activemq-http/pom.xml @@ -65,8 +65,8 @@ jetty-xml - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee9 + jetty-ee9-webapp org.apache.httpcomponents @@ -121,13 +121,31 @@ org.eclipse.jetty.websocket - websocket-jetty-client + jetty-websocket-core-client provided true + + org.eclipse.jetty.websocket + jetty-websocket-jetty-client + provided + true + org.eclipse.jetty.websocket - websocket-jetty-server + jetty-websocket-jetty-api + provided + true + + + org.eclipse.jetty.ee9.websocket + jetty-ee9-websocket-jakarta-client + provided + true + + + org.eclipse.jetty.ee9.websocket + jetty-ee9-websocket-jetty-server provided true 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 3cfeda36acb..8ba1c5703e6 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.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 @@ private void setConnectorProperty(String name, Class type, T value) throw 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 @@ public URI bind() throws Exception { 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 786e3aac8d9..0c996292cf6 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 @@ 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 5b21f0a9cce..4b354ceb76e 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.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 @@ private int getConnectorLocalPort() throws Exception { } 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 8c0fccb1cc8..f052b7d966b 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 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 void onWebSocketClose(int statusCode, String reason) { } @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 a8242d4eddd..dde57bbaf36 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.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 void onWebSocketConnect(Session session) { 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 75cf1fd56cc..4c7357a711b 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.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 @@ protected void doStart() throws Exception { 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 @@ protected void doStart() throws Exception { 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 @@ protected void doStart() throws Exception { 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 853c201c346..6e14b9ec37e 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.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 5c718c8ab06..2a47a5156c2 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.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 607248e4dee..86183c8c4f4 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.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 0eb35f6cf59..b55d45bc485 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.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 e127d077d0c..845de35bdfb 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 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 @@ /** * 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 void onWebSocketBinary(byte[] data, int offset, int length) { 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 void onWebSocketBinary(byte[] data, int offset, int length) { 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 void onWebSocketBinary(byte[] data, int offset, int length) { 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 @@ private void checkConnected() throws IOException { 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 46aa692b6a4..2afddf84fe2 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.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 671f77f64f8..41ebbe6a4cb 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.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; @@ -85,7 +88,9 @@ public void setUp() throws Exception { wsMQTTConnection = new MQTTWSConnection().setWritePartialFrames(partialFrames); - wsClient.connect(wsMQTTConnection, wsConnectUri, request); + CompletableFuture 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"); } @@ -110,7 +115,8 @@ public void testConnectCycles() throws Exception { wsMQTTConnection = new MQTTWSConnection().setWritePartialFrames(partialFrames); - wsClient.connect(wsMQTTConnection, wsConnectUri, request); + CompletableFuture 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 9f8d7abf406..a9998069e2c 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.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 76910dfee36..9f2aecfc84c 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 @@ 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 void testStompSocketRemoteAddress() { 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 80a86c5d04b..b689cca453c 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 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 40e3290ac3f..9bc2f5431f2 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 @@ -29,7 +29,7 @@ import org.apache.activemq.transport.stomp.StompFrame; 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.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 9ea1cbbbfbb..6b89569ff32 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.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 c3f2599b1e7..aa766fd8040 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.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 cfc9c73e5a1..8553d555c21 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.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 void testMQTTNeedClientAuth() throws Exception { 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 5a5e6112989..90a5c850dde 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 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 1a65db43728..129ae77c8c3 100644 --- a/activemq-http/src/test/resources/spring-http.xml +++ b/activemq-http/src/test/resources/spring-http.xml @@ -44,7 +44,7 @@ - + diff --git a/activemq-web-console/pom.xml b/activemq-web-console/pom.xml index 654f9af2f54..4670e53f969 100644 --- a/activemq-web-console/pom.xml +++ b/activemq-web-console/pom.xml @@ -248,6 +248,11 @@ + + org.eclipse.jetty.ee9 + jetty-ee9-webapp + test + org.eclipse.jetty jetty-server @@ -330,8 +335,8 @@ - org.eclipse.jetty - apache-jsp + org.eclipse.jetty.ee9 + jetty-ee9-apache-jsp provided 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 443f1022364..1f06c789adc 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 static void main(String[] args) throws Exception { 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 e9392161bd6..df4e53fa8c8 100644 --- a/activemq-web-demo/pom.xml +++ b/activemq-web-demo/pom.xml @@ -188,6 +188,11 @@ jetty-server test + + org.eclipse.jetty.ee9 + jetty-ee9-webapp + test + org.eclipse.jetty jetty-client 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 32bdca68153..dbd75416948 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 @@ 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.StompFrame; import org.apache.commons.lang3.StringUtils; 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 @@ protected void sendMessages(HttpClient httpClient, int port, byte[] content) thr 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 @@ protected String subscribe(HttpClient httpClient, int port, String content, Stri 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 @@ protected CountDownLatch asyncRequest(final HttpClient httpClient, final String 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 8069954adce..eb5602eb04b 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.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 static void main(String[] args) throws Exception { 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 59e957b5958..7fd016d15eb 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.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 void setUp() throws Exception { 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 61345eaa80c..87382c55c24 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.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 @@ private void postMessage(HttpClient httpClient, String url, String properties, S 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 @@ private void getMessage(HttpClient httpClient, String url, String selector, Stri 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 fe383d88d9c..fc57c1282dc 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 @@ -31,8 +31,8 @@ import org.apache.commons.lang3.RandomStringUtils; 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; @@ -136,24 +136,26 @@ public void testSelector() throws Exception { 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 { @@ -255,23 +257,25 @@ public void onComplete(Result result) { 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); @@ -279,16 +283,19 @@ public void onComplete(Result result) { 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())); @@ -303,25 +310,25 @@ public void onComplete(Result result) { 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 cec0c079d55..96a6090e0f2 100644 --- a/activemq-web/pom.xml +++ b/activemq-web/pom.xml @@ -83,12 +83,12 @@ provided - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee9 + jetty-ee9-webapp - org.eclipse.jetty.websocket - websocket-jetty-server + org.eclipse.jetty.ee9.websocket + jetty-ee9-websocket-jetty-server 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 aecff8d59de..6fe6d53779d 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 @@ 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 @@ */ 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 static void configureJetty(Server server, HandlerCollection collection) { // 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 5d5e5a721ef..2ac5d49cc3f 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -379,13 +379,15 @@ jettison - org.eclipse.jetty - jetty-annotations + org.eclipse.jetty.ee9 + jetty-ee9-annotations + org.eclipse.jetty jetty-jndi @@ -446,8 +448,8 @@ - org.eclipse.jetty - apache-jsp + org.eclipse.jetty.ee9 + jetty-ee9-apache-jsp org.eclipse.jetty diff --git a/assembly/src/release/conf/jetty.xml b/assembly/src/release/conf/jetty.xml index e475e808107..f1b4d64bb4c 100644 --- a/assembly/src/release/conf/jetty.xml +++ b/assembly/src/release/conf/jetty.xml @@ -55,7 +55,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -196,11 +196,11 @@ - + - + diff --git a/pom.xml b/pom.xml index 91e11aeedd3..3324f40e1dc 100644 --- a/pom.xml +++ b/pom.xml @@ -70,8 +70,8 @@ 1.9.3 4.0.5 2.3.2_1 - 11.0.24 - [11,13) + 12.0.15 + [12,13) 3.6.0 9.0.65 1.5.4 @@ -872,6 +872,14 @@ import + + org.eclipse.jetty.ee9 + jetty-ee9-bom + ${jetty-version} + pom + import + + org.apache.httpcomponents httpclient