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

reta pushed a commit to branch 3.6.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.6.x-fixes by this push:
     new 5ab347d6a7 CXF-8764: Upgrade to Jetty 10 (#998)
5ab347d6a7 is described below

commit 5ab347d6a7189d5c8536d06a50cbaf13632ed756
Author: Andriy Redko <[email protected]>
AuthorDate: Tue Dec 6 19:21:19 2022 -0500

    CXF-8764: Upgrade to Jetty 10 (#998)
---
 distribution/javadoc/pom.xml                       |   6 +-
 .../samples/jax_rs/basic_http2_jetty/pom.xml       |   6 +-
 .../jax_rs/description_openapi_v3_web/pom.xml      |   2 +-
 .../jax_rs/description_swagger2_web/pom.xml        |   2 +-
 .../main/release/samples/jax_rs/sse_cdi/pom.xml    |   4 +-
 .../main/release/samples/jax_rs/sse_spring/pom.xml |   4 +-
 .../main/release/samples/jax_rs/websocket/pom.xml  |   4 +-
 .../release/samples/jax_rs/websocket_web/pom.xml   |   2 +-
 distribution/src/main/release/samples/pom.xml      |   4 +-
 parent/pom.xml                                     |  10 +-
 rt/rs/microprofile-client/pom.xml                  |  16 +--
 .../client/MicroProfileClientFactoryBean.java      |   2 +
 .../apache/cxf/microprofile/client/AsyncTest.java  |  82 +++++------
 rt/transports/http-jetty/pom.xml                   |   4 -
 .../transport/http_jetty/JettyHTTPDestination.java |  13 --
 .../cxf/transport/http_jetty/JettyHTTPHandler.java |   5 +
 .../http_jetty/JettyHTTPServerEngine.java          |  22 +--
 .../continuations/JettyContinuationProvider.java   |  69 ---------
 .../JettyContinuationProviderFactory.java          |  76 ----------
 .../continuations/JettyContinuationWrapper.java    | 159 ---------------------
 .../main/resources/META-INF/cxf/bus-extensions.txt |   3 +-
 .../http_jetty/JettyHTTPDestinationTest.java       |   2 +-
 rt/transports/websocket/pom.xml                    |  10 +-
 .../websocket/WebSocketDestinationFactory.java     |   8 +-
 .../websocket/jetty/JettyWebSocketHandler.java     |  53 -------
 .../Jetty10WebSocketDestination.java}              | 106 ++++++--------
 .../{jetty9 => jetty10}/JettyWebSocketHandler.java |  25 ++--
 .../jetty/JettyWebSocketDestinationTest.java       |   4 +-
 .../cdi/base/jetty/AbstractJettyServer.java        |   6 +-
 systests/cdi/cdi-weld/pom.xml                      |   5 +
 systests/jaxrs/pom.xml                             |  16 +--
 .../jaxrs/metrics/JAXRSClientMetricsTest.java      |  61 ++++----
 systests/jaxws/pom.xml                             |   4 +-
 systests/microprofile/client/async/pom.xml         |   2 +-
 systests/microprofile/client/nocdi/pom.xml         |   2 +-
 systests/microprofile/client/weld/pom.xml          |  47 +++++-
 systests/microprofile/client/weld/testng.xml       |  17 ---
 systests/microprofile/pom.xml                      |  45 ------
 systests/rs-http-sci/pom.xml                       |   2 +-
 .../jaxrs/servlet/jetty/AbstractJettyServer.java   |   2 +
 systests/rs-sse/rs-sse-jetty/pom.xml               |   8 +-
 systests/transports/pom.xml                        |   6 +-
 .../cxf/systest/http2_jetty/Http2TestClient.java   |  15 +-
 43 files changed, 259 insertions(+), 682 deletions(-)

diff --git a/distribution/javadoc/pom.xml b/distribution/javadoc/pom.xml
index 6cfc8681b0..6c41fdacff 100644
--- a/distribution/javadoc/pom.xml
+++ b/distribution/javadoc/pom.xml
@@ -458,10 +458,6 @@
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-security</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-continuation</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-jmx</artifactId>
@@ -490,7 +486,7 @@
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
             <artifactId>websocket-server</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
         </dependency>
         <dependency>
           <groupId>io.reactivex.rxjava3</groupId>
diff --git 
a/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml 
b/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml
index 4456085e1f..4f3a50a01c 100644
--- a/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml
+++ b/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml
@@ -84,7 +84,7 @@
                 <dependency>
                     <groupId>org.eclipse.jetty</groupId>
                     <artifactId>jetty-alpn-java-server</artifactId>
-                    <version>${cxf.jetty9.version}</version>
+                    <version>${cxf.jetty10.version}</version>
                 </dependency>
             </dependencies>
         </profile>
@@ -107,12 +107,12 @@
         <dependency>
             <groupId>org.eclipse.jetty.http2</groupId>
             <artifactId>http2-server</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-alpn-server</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
         </dependency>
     </dependencies>
 </project>
diff --git 
a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml
 
b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml
index 961987a776..76fc5dd3a8 100644
--- 
a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml
+++ 
b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml
@@ -35,7 +35,7 @@ under the License.
             <plugin>
                 <groupId>org.eclipse.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
-                <version>${cxf.jetty9.version}</version>
+                <version>${cxf.jetty10.version}</version>
                 <configuration>
                     <webApp>
                         <contextPath>/</contextPath>
diff --git 
a/distribution/src/main/release/samples/jax_rs/description_swagger2_web/pom.xml 
b/distribution/src/main/release/samples/jax_rs/description_swagger2_web/pom.xml
index e0cd9de5a6..ded08e7ae4 100644
--- 
a/distribution/src/main/release/samples/jax_rs/description_swagger2_web/pom.xml
+++ 
b/distribution/src/main/release/samples/jax_rs/description_swagger2_web/pom.xml
@@ -39,7 +39,7 @@ under the License.
             <plugin>
                 <groupId>org.eclipse.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
-                <version>${cxf.jetty9.version}</version>
+                <version>${cxf.jetty10.version}</version>
                 <configuration>
                     <webApp>
                         <contextPath>/</contextPath>
diff --git a/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml 
b/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml
index 242bcf11a9..36e07cfcf6 100644
--- a/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml
+++ b/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml
@@ -70,7 +70,7 @@
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>apache-jsp</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
         </dependency>
 
          <dependency>
@@ -81,7 +81,7 @@
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
             <artifactId>websocket-server</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
         </dependency>
         
         <dependency>
diff --git a/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml 
b/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml
index 1193cb56bf..f68760a2d2 100644
--- a/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml
+++ b/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml
@@ -47,7 +47,7 @@
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>apache-jsp</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
         </dependency>
 
         <dependency>
@@ -58,7 +58,7 @@
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
             <artifactId>websocket-server</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
         </dependency>
         
         <dependency>
diff --git a/distribution/src/main/release/samples/jax_rs/websocket/pom.xml 
b/distribution/src/main/release/samples/jax_rs/websocket/pom.xml
index 520ab3fc08..edad303bac 100644
--- a/distribution/src/main/release/samples/jax_rs/websocket/pom.xml
+++ b/distribution/src/main/release/samples/jax_rs/websocket/pom.xml
@@ -57,14 +57,14 @@
                 </property>
             </activation>
             <properties>
-                <cxf.jetty.version>${cxf.jetty9.version}</cxf.jetty.version>
+                <cxf.jetty.version>${cxf.jetty10.version}</cxf.jetty.version>
             </properties>
             <dependencies>
                 <!-- jetty9 websocket -->
                 <dependency>
                     <groupId>org.eclipse.jetty.websocket</groupId>
                     <artifactId>websocket-server</artifactId>
-                    <version>${cxf.jetty9.version}</version>
+                    <version>${cxf.jetty10.version}</version>
                     <exclusions>
                         <exclusion>
                             <groupId>javax.servlet</groupId>
diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml 
b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml
index cb678a8487..08162dfccf 100644
--- a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml
+++ b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml
@@ -38,7 +38,7 @@
             <plugin>
                 <groupId>org.eclipse.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
-                <version>${cxf.jetty9.version}</version>
+                <version>${cxf.jetty10.version}</version>
                 <configuration>
                     
<webAppSourceDirectory>${project.build.directory}/${project.name}</webAppSourceDirectory>
                     <scanIntervalSeconds>1</scanIntervalSeconds>
diff --git a/distribution/src/main/release/samples/pom.xml 
b/distribution/src/main/release/samples/pom.xml
index 43b205262f..d5d7f8518d 100644
--- a/distribution/src/main/release/samples/pom.xml
+++ b/distribution/src/main/release/samples/pom.xml
@@ -32,7 +32,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <spring.boot.version>2.7.6</spring.boot.version>
         <spring.cloud.eureka.version>3.1.4</spring.cloud.eureka.version>
-        <cxf.jetty9.version>9.4.49.v20220914</cxf.jetty9.version>
+        <cxf.jetty10.version>10.0.12</cxf.jetty10.version>
         <cxf.netty.version>4.1.85.Final</cxf.netty.version>
         
<cxf.httpcomponents.client.version>4.5.13</cxf.httpcomponents.client.version>
         <cxf.swagger.ui.version>4.15.5</cxf.swagger.ui.version>
@@ -208,7 +208,7 @@
                 <plugin>
                     <groupId>org.eclipse.jetty</groupId>
                     <artifactId>jetty-maven-plugin</artifactId>
-                    <version>${cxf.jetty9.version}</version>
+                    <version>${cxf.jetty10.version}</version>
                 </plugin>
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
diff --git a/parent/pom.xml b/parent/pom.xml
index 863eba39a0..7ab17f46f6 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -106,6 +106,7 @@
         <cxf.ehcache3.version>3.9.3</cxf.ehcache3.version>
         <cxf.el-api.version>3.0.3</cxf.el-api.version>
         <cxf.findbugs.version>3.0.2</cxf.findbugs.version>
+        <cxf.hoverfly.version>0.14.0</cxf.hoverfly.version>
         
<cxf.geronimo.j2ee.management.version>1.0.1</cxf.geronimo.j2ee.management.version>
         <cxf.geronimo.jms.version>1.1.1</cxf.geronimo.jms.version>
         <cxf.geronimo.json.version>1.4</cxf.geronimo.json.version>
@@ -151,8 +152,8 @@
         <cxf.jdom.version>1.0</cxf.jdom.version>
         <cxf.jettison.version>1.5.2</cxf.jettison.version>
         <cxf.jetty.osgi.version>[9.2,10)</cxf.jetty.osgi.version>
-        <cxf.jetty9.version>9.4.49.v20220914</cxf.jetty9.version>
-        <cxf.jetty.version>${cxf.jetty9.version}</cxf.jetty.version>
+        <cxf.jetty10.version>10.0.12</cxf.jetty10.version>
+        <cxf.jetty.version>${cxf.jetty10.version}</cxf.jetty.version>
         <cxf.jexl.version>3.2.1</cxf.jexl.version>
         <cxf.joda.time.version>2.10.10</cxf.joda.time.version>
         <cxf.johnzon.version>1.2.18</cxf.johnzon.version>
@@ -1173,11 +1174,6 @@
                 <artifactId>jetty-security</artifactId>
                 <version>${cxf.jetty.version}</version>
             </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-continuation</artifactId>
-                <version>${cxf.jetty.version}</version>
-            </dependency>
             <dependency>
                 <groupId>org.eclipse.jetty</groupId>
                 <artifactId>jetty-jmx</artifactId>
diff --git a/rt/rs/microprofile-client/pom.xml 
b/rt/rs/microprofile-client/pom.xml
index 6a2967f798..011ff52fdb 100644
--- a/rt/rs/microprofile-client/pom.xml
+++ b/rt/rs/microprofile-client/pom.xml
@@ -120,6 +120,10 @@
             <groupId>jakarta.json</groupId>
             <artifactId>jakarta.json-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>jakarta.json.bind</groupId>
+            <artifactId>jakarta.json.bind-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.eclipse.microprofile.rest.client</groupId>
             <artifactId>microprofile-rest-client-tck</artifactId>
@@ -187,18 +191,6 @@
             <version>${cxf.commons-jcs-jcache.version}</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>com.github.tomakehurst</groupId>
-            <artifactId>wiremock</artifactId>
-            <version>${cxf.wiremock.version}</version>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.xmlunit</groupId>
-                    <artifactId>xmlunit-core</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/rt/rs/microprofile-client/src/main/java/org/apache/cxf/microprofile/client/MicroProfileClientFactoryBean.java
 
b/rt/rs/microprofile-client/src/main/java/org/apache/cxf/microprofile/client/MicroProfileClientFactoryBean.java
index 0f10811217..8323453261 100644
--- 
a/rt/rs/microprofile-client/src/main/java/org/apache/cxf/microprofile/client/MicroProfileClientFactoryBean.java
+++ 
b/rt/rs/microprofile-client/src/main/java/org/apache/cxf/microprofile/client/MicroProfileClientFactoryBean.java
@@ -44,6 +44,7 @@ import org.apache.cxf.jaxrs.client.spec.TLSConfiguration;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
 import org.apache.cxf.jaxrs.model.FilterProviderInfo;
 import org.apache.cxf.jaxrs.model.ProviderInfo;
+import org.apache.cxf.jaxrs.provider.jsrjsonb.JsrJsonbProvider;
 import org.apache.cxf.jaxrs.provider.jsrjsonp.JsrJsonpProvider;
 import org.apache.cxf.microprofile.client.cdi.CDIInterceptorWrapper;
 import org.apache.cxf.microprofile.client.proxy.MicroProfileClientProxyImpl;
@@ -78,6 +79,7 @@ public class MicroProfileClientFactoryBean extends 
JAXRSClientFactoryBean {
             registeredProviders.add(new ProviderInfo<>(new 
DefaultResponseExceptionMapper(), getBus(), false));
         }
         registeredProviders.add(new ProviderInfo<>(new JsrJsonpProvider(), 
getBus(), false));
+        registeredProviders.add(new ProviderInfo<>(new JsrJsonbProvider(), 
getBus(), false));
         super.setProviders(registeredProviders);
     }
 
diff --git 
a/rt/rs/microprofile-client/src/test/java/org/apache/cxf/microprofile/client/AsyncTest.java
 
b/rt/rs/microprofile-client/src/test/java/org/apache/cxf/microprofile/client/AsyncTest.java
index b0e7f06022..a4b0243b44 100644
--- 
a/rt/rs/microprofile-client/src/test/java/org/apache/cxf/microprofile/client/AsyncTest.java
+++ 
b/rt/rs/microprofile-client/src/test/java/org/apache/cxf/microprofile/client/AsyncTest.java
@@ -18,70 +18,69 @@
  */
 package org.apache.cxf.microprofile.client;
 
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
 import java.net.URI;
 import java.util.Queue;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.CompletionStage;
 import java.util.concurrent.TimeUnit;
 
-import com.github.tomakehurst.wiremock.common.FileSource;
-import com.github.tomakehurst.wiremock.extension.Parameters;
-import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
-import com.github.tomakehurst.wiremock.http.Request;
-import com.github.tomakehurst.wiremock.http.Response;
-import com.github.tomakehurst.wiremock.junit.WireMockRule;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
 
 import org.apache.cxf.microprofile.client.mock.AsyncClient;
 import org.apache.cxf.microprofile.client.mock.NotFoundExceptionMapper;
 import org.eclipse.microprofile.rest.client.RestClientBuilder;
 
-import org.junit.Rule;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
-import static com.github.tomakehurst.wiremock.client.WireMock.get;
-import static com.github.tomakehurst.wiremock.client.WireMock.notFound;
-import static com.github.tomakehurst.wiremock.client.WireMock.ok;
-import static 
com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 public class AsyncTest {
-    @SuppressWarnings("unchecked")
-    @Rule
-    public WireMockRule wireMockRule = new WireMockRule(wireMockConfig()
-        .extensions(SimpleTransformer.class).dynamicPort());
-    
-    public static class SimpleTransformer extends ResponseTransformer {
-        private final Queue<String> queue = new ArrayBlockingQueue<>(2);
-        
-        public SimpleTransformer() {
-            queue.add("Hello");
-            queue.add("World");
-        }
-        
-        @Override
-        public Response transform(Request request, Response response, 
FileSource fileSource, Parameters parameters) {
-            return Response.Builder
-                .like(response)
-                .but().body(queue.poll())
-                .build();
-        }
+    private HttpServer server;
+    private final Queue<String> queue = new ArrayBlockingQueue<>(2);
 
+    public class SimpleHandler implements HttpHandler {
         @Override
-        public boolean applyGlobally() {
-            return false;
+        public void handle(HttpExchange exchange) throws IOException {
+            final String body = queue.poll();
+            if (body == null) {
+                exchange.sendResponseHeaders(404, 0);
+            } else {
+                exchange.sendResponseHeaders(200, body.length());
+                try (OutputStream os = exchange.getResponseBody()) {
+                    os.write(body.getBytes());
+                }
+            }
         }
+    }
 
-        @Override
-        public String getName() {
-            return "enqueue-transformer";
-        }
+    @Before
+    public void setUp() throws IOException {
+        server = HttpServer.create(new InetSocketAddress(0), 2);
+        server.createContext("/", new SimpleHandler());
+        server.start();
     }
-    
+
+    @After
+    public void tearDown() throws IOException {
+        server.stop(0);
+        queue.clear();
+    }
+
     @Test
     public void testAsyncClient() throws Exception {
-        URI uri = URI.create(wireMockRule.baseUrl());
+        queue.add("Hello");
+        queue.add("World");
+
+        URI uri = URI.create("http://localhost:"; + 
server.getAddress().getPort());
         AsyncClient client = RestClientBuilder.newBuilder()
                                               .baseUri(uri)
                                               .connectTimeout(5, 
TimeUnit.SECONDS)
@@ -89,8 +88,6 @@ public class AsyncTest {
                                               .build(AsyncClient.class);
         assertNotNull(client);
 
-        
wireMockRule.stubFor(get("/").willReturn(ok().withTransformers("enqueue-transformer")));
-
         String combined = client.get().thenCombine(client.get(), (a, b) -> {
             return a + " " + b;
         }).toCompletableFuture().get(10, TimeUnit.SECONDS);
@@ -100,14 +97,13 @@ public class AsyncTest {
 
     @Test
     public void testAsyncClientCanMapExceptionResponses() throws Exception {
-        URI uri = URI.create(wireMockRule.baseUrl());
+        URI uri = URI.create("http://localhost:"; + 
server.getAddress().getPort());
         AsyncClient client = RestClientBuilder.newBuilder()
                                               .baseUri(uri)
                                               .connectTimeout(5, 
TimeUnit.SECONDS)
                                               .readTimeout(5, TimeUnit.SECONDS)
                                               
.register(NotFoundExceptionMapper.class)
                                               .build(AsyncClient.class);
-        wireMockRule.stubFor(get("/").willReturn(notFound()));
 
         CompletionStage<?> cs = client.get().exceptionally(t -> {
             Throwable t2 = t.getCause();
diff --git a/rt/transports/http-jetty/pom.xml b/rt/transports/http-jetty/pom.xml
index 5509e05876..2039a5bebf 100644
--- a/rt/transports/http-jetty/pom.xml
+++ b/rt/transports/http-jetty/pom.xml
@@ -114,10 +114,6 @@
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-security</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-continuation</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-jmx</artifactId>
diff --git 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
index 6592b80a66..8fb2eed210 100644
--- 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
+++ 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
@@ -40,13 +40,11 @@ import 
org.apache.cxf.common.classloader.ClassLoaderUtils.ClassLoaderHolder;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.configuration.jsse.TLSServerParameters;
 import org.apache.cxf.configuration.security.CertificateConstraintsType;
-import org.apache.cxf.continuations.ContinuationProvider;
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.io.CopyingOutputStream;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.http.DestinationRegistry;
-import 
org.apache.cxf.transport.http_jetty.continuations.JettyContinuationProvider;
 import org.apache.cxf.transport.https.CertConstraintsJaxBUtils;
 import org.apache.cxf.transport.servlet.ServletDestination;
 import org.apache.cxf.transports.http.configuration.HTTPServerPolicy;
@@ -372,17 +370,6 @@ public class JettyHTTPDestination extends 
ServletDestination {
     protected Message retrieveFromContinuation(HttpServletRequest req) {
         return (Message)req.getAttribute(CXF_CONTINUATION_MESSAGE);
     }
-    protected void setupContinuation(Message inMessage,
-                      final HttpServletRequest req,
-                      final HttpServletResponse resp) {
-        if (engine != null && engine.getContinuationsEnabled()) {
-            super.setupContinuation(inMessage, req, resp);
-            if (!inMessage.containsKey(ContinuationProvider.class.getName())) {
-                inMessage.put(ContinuationProvider.class.getName(),
-                    new JettyContinuationProvider(req, resp, inMessage));
-            }
-        }
-    }
 
     private Request getCurrentRequest() {
         try {
diff --git 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPHandler.java
 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPHandler.java
index eb24ae49be..b35b7f9d86 100644
--- 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPHandler.java
+++ 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPHandler.java
@@ -29,6 +29,7 @@ import org.apache.cxf.Bus;
 import org.apache.cxf.transport.http.HttpUrlUtil;
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.server.handler.ContextHandler;
 
 public class JettyHTTPHandler extends AbstractHandler {
     private static final String METHOD_TRACE = "TRACE";
@@ -83,6 +84,10 @@ public class JettyHTTPHandler extends AbstractHandler {
 
     }
 
+    public ContextHandler createContextHandler() {
+        return new ContextHandler();
+    }
+
     public Bus getBus() {
         return jettyHTTPDestination != null ? jettyHTTPDestination.getBus() : 
bus;
     }
diff --git 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
index ee205c6bf5..16bb945667 100644
--- 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
+++ 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
@@ -490,7 +490,7 @@ public class JettyHTTPServerEngine implements ServerEngine, 
HttpServerEngineSupp
         }
 
         String contextName = HttpUriMapper.getContextName(url.getPath());
-        ContextHandler context = new ContextHandler();
+        ContextHandler context = handler.createContextHandler();
         context.setContextPath(contextName);
         // bind the jetty http handler with the context handler
         if (isSessionSupport) {
@@ -625,7 +625,7 @@ public class JettyHTTPServerEngine implements ServerEngine, 
HttpServerEngineSupp
     
     private Connector createConnector(String hosto, int porto, final Bus bus) {
         // now we just use the SelectChannelConnector as the default connector
-        SslContextFactory sslcf = null;
+        SslContextFactory.Server sslcf = null;
         if (tlsServerParameters != null) {
             sslcf = new SslContextFactory.Server() {
                 protected void doStart() throws Exception {
@@ -667,7 +667,7 @@ public class JettyHTTPServerEngine implements ServerEngine, 
HttpServerEngineSupp
         return result;
     }
 
-    AbstractConnector createConnectorJetty(SslContextFactory sslcf, String 
hosto, int porto, 
+    AbstractConnector createConnectorJetty(SslContextFactory.Server sslcf, 
String hosto, int porto, 
             int major, int minor, final Bus bus) {
         final AbstractConnector result;
         try {
@@ -676,6 +676,7 @@ public class JettyHTTPServerEngine implements ServerEngine, 
HttpServerEngineSupp
             HttpConnectionFactory httpFactory = new 
HttpConnectionFactory(httpConfig);
 
             Collection<ConnectionFactory> connectionFactories = new 
ArrayList<>();
+            connectionFactories.add(httpFactory);
 
             result = new org.eclipse.jetty.server.ServerConnector(server);
 
@@ -697,13 +698,15 @@ public class JettyHTTPServerEngine implements 
ServerEngine, HttpServerEngineSupp
                     connectionFactories.add(new 
HTTP2ServerConnectionFactory(httpConfig));
                 }
 
+                // Has to be set before the default protocol change
+                result.setConnectionFactories(connectionFactories);
+
                 String proto = (major > 9 || (major == 9 && minor >= 3)) ? 
"SSL" : "SSL-HTTP/1.1";
                 result.setDefaultProtocol(proto);
             } else if (isHttp2Enabled(bus)) {
                 connectionFactories.add(new 
HTTP2CServerConnectionFactory(httpConfig));
+                result.setConnectionFactories(connectionFactories);
             }
-            connectionFactories.add(httpFactory);
-            result.setConnectionFactories(connectionFactories);
 
             if (getMaxIdleTime() > 0) {
                 result.setIdleTimeout(Long.valueOf(getMaxIdleTime()));
@@ -792,8 +795,7 @@ public class JettyHTTPServerEngine implements ServerEngine, 
HttpServerEngineSupp
         }
     }
 
-    @SuppressWarnings("deprecation")
-    protected void setClientAuthentication(SslContextFactory con,
+    protected void setClientAuthentication(SslContextFactory.Server con,
                                            ClientAuthentication clientAuth) {
         con.setWantClientAuth(true);
         if (clientAuth != null) {
@@ -810,7 +812,7 @@ public class JettyHTTPServerEngine implements ServerEngine, 
HttpServerEngineSupp
      * of the JettySslConnector.
      */
     private void decorateCXFJettySslSocketConnector(
-            SslContextFactory con
+            SslContextFactory.Server con
     ) {
         setClientAuthentication(con,
                                 tlsServerParameters.getClientAuthentication());
@@ -1068,7 +1070,9 @@ public class JettyHTTPServerEngine implements 
ServerEngine, HttpServerEngineSupp
                 if (mBeanContainer != null) {
                     removeServerMBean();
                 }
-                server.destroy();
+                //After upgrade Jetty to 10.0.12, server.destroy() will clear 
all MBeans from container
+                //The old version doesn't behavior like this and this 
+                //server.destroy();
                 server = null;
             }
         }
diff --git 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationProvider.java
 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationProvider.java
deleted file mode 100644
index 877fe094ba..0000000000
--- 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationProvider.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.cxf.transport.http_jetty.continuations;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.cxf.continuations.Continuation;
-import org.apache.cxf.continuations.ContinuationProvider;
-import org.apache.cxf.message.Message;
-
-public class JettyContinuationProvider implements ContinuationProvider {
-
-    private HttpServletRequest request;
-    private HttpServletResponse response;
-    private Message inMessage;
-    private JettyContinuationWrapper wrapper;
-
-    public JettyContinuationProvider(HttpServletRequest req,
-                                     HttpServletResponse resp,
-                                     Message m) {
-        request = req;
-        response = resp;
-        this.inMessage = m;
-    }
-
-    public void complete() {
-        JettyContinuationWrapper r = getContinuation(false);
-        if (r != null) {
-            r.reset();
-        }
-        wrapper = null;
-    }
-    public Continuation getContinuation() {
-        return getContinuation(true);
-    }
-    public JettyContinuationWrapper getContinuation(boolean create) {
-        Message m = inMessage;
-        // Get the real message which is used in the interceptor chain
-        if (m != null && m.getExchange() != null && 
m.getExchange().getInMessage() != null) {
-            m = m.getExchange().getInMessage();
-        }
-        if (m == null || m.getExchange() == null || 
m.getExchange().isOneWay()) {
-            return null;
-        }
-        if (wrapper == null && create) {
-            wrapper = new JettyContinuationWrapper(request, response, m);
-        }
-        return wrapper;
-    }
-
-}
diff --git 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationProviderFactory.java
 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationProviderFactory.java
deleted file mode 100644
index dd6fd5aaf0..0000000000
--- 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationProviderFactory.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.cxf.transport.http_jetty.continuations;
-
-import java.lang.reflect.Method;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletRequestWrapper;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.cxf.common.util.ReflectionUtil;
-import org.apache.cxf.continuations.ContinuationProvider;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.transport.http.AbstractHTTPDestination;
-import org.apache.cxf.transport.http.ContinuationProviderFactory;
-
-/**
- *
- */
-public class JettyContinuationProviderFactory implements 
ContinuationProviderFactory {
-
-    final boolean disableJettyContinuations
-        = 
Boolean.getBoolean("org.apache.cxf.transport.http_jetty.continuations.disable");
-
-    public JettyContinuationProviderFactory() {
-    }
-
-    public ContinuationProvider createContinuationProvider(Message inMessage,
-                                                           HttpServletRequest 
req,
-                                                           HttpServletResponse 
resp) {
-        if (!disableJettyContinuations) {
-            ServletRequest r2 = req;
-            while (r2 instanceof ServletRequestWrapper) {
-                r2 = ((ServletRequestWrapper)r2).getRequest();
-            }
-            if (!r2.getClass().getName().contains("jetty")) {
-                return null;
-            }
-
-            try {
-                Method m = r2.getClass().getMethod("isAsyncSupported");
-                Object o = ReflectionUtil.setAccessible(m).invoke(r2);
-                if (((Boolean)o).booleanValue()) {
-                    return new JettyContinuationProvider(req, resp, inMessage);
-                }
-            } catch (Throwable t) {
-                //ignore - either not a proper Jetty request object or 
classloader issue
-                //or similar.
-            }
-        }
-        return null;
-    }
-
-    public Message retrieveFromContinuation(HttpServletRequest req) {
-        return 
(Message)req.getAttribute(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE);
-    }
-
-}
diff --git 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationWrapper.java
 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationWrapper.java
deleted file mode 100644
index 3e6e4f5248..0000000000
--- 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationWrapper.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.cxf.transport.http_jetty.continuations;
-
-
-import java.util.concurrent.atomic.AtomicLong;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.cxf.continuations.Continuation;
-import org.apache.cxf.continuations.ContinuationCallback;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.transport.http.AbstractHTTPDestination;
-import org.eclipse.jetty.continuation.ContinuationListener;
-import org.eclipse.jetty.continuation.ContinuationSupport;
-
-@SuppressWarnings("deprecation")
-public class JettyContinuationWrapper implements Continuation, 
ContinuationListener {
-    volatile boolean isNew;
-    volatile boolean isResumed;
-    volatile boolean isPending;
-    volatile boolean isTimeout;
-    AtomicLong pendingTimeout = new AtomicLong();
-    volatile Object obj;
-
-    private Message message;
-    private org.eclipse.jetty.continuation.Continuation continuation;
-    private ContinuationCallback callback;
-
-    public JettyContinuationWrapper(HttpServletRequest request,
-                                    HttpServletResponse resp,
-                                    Message m) {
-        continuation = ContinuationSupport.getContinuation(request);
-
-        message = m;
-        isNew = 
request.getAttribute(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE) == null;
-        if (isNew) {
-            
request.setAttribute(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE,
-                                 message.getExchange().getInMessage());
-            continuation.addContinuationListener(this);
-            callback = message.getExchange().get(ContinuationCallback.class);
-        }
-    }
-
-    public Object getObject() {
-        return obj;
-    }
-    public void setObject(Object userObject) {
-        obj = userObject;
-    }
-
-    public void resume() {
-        isResumed = true;
-        isPending = false;
-        continuation.resume();
-    }
-
-    public boolean isNew() {
-        return isNew;
-    }
-
-    public boolean isPending() {
-        return isPending;
-    }
-
-    public boolean isResumed() {
-        return isResumed;
-    }
-
-    public boolean isExpired() {
-        return continuation.isExpired();
-    }
-
-    public void reset() {
-        try {
-            continuation.complete();
-        } catch (Throwable ex) {
-            // explicit complete call does not seem to work
-            // with the non-Servlet3 Jetty Continuation
-        }
-        obj = null;
-        pendingTimeout.set(0L);
-        isTimeout = false;
-    }
-
-
-    public boolean suspend(long timeout) {
-        if (isPending && timeout != 0) {
-            pendingTimeout.addAndGet(timeout);
-        } else {
-            pendingTimeout.set(timeout);
-        }
-        isNew = false;
-
-        message.getExchange().getInMessage().getInterceptorChain().suspend();
-
-        continuation.setTimeout(pendingTimeout.get());
-        if (!isPending) {
-            continuation.suspend();
-            isPending = true;
-        }
-        return true;
-    }
-
-    protected Message getMessage() {
-        Message m = message;
-        if (m != null && m.getExchange().getInMessage() != null) {
-            m = m.getExchange().getInMessage();
-        }
-        return m;
-    }
-
-
-    public void onComplete(org.eclipse.jetty.continuation.Continuation cont) {
-        getMessage().remove(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE);
-        isPending = false;
-        pendingTimeout.set(0L);
-        isResumed = false;
-        if (callback != null) {
-            callback.onComplete();
-        }
-    }
-
-    public void onTimeout(org.eclipse.jetty.continuation.Continuation cont) {
-        isPending = false;
-        pendingTimeout.set(0L);
-        isResumed = true;
-        isTimeout = true;
-    }
-
-    @Override
-    public boolean isReadyForWrite() {
-        return true;
-    }
-
-    @Override
-    public boolean isTimeout() {
-        return isTimeout;
-    }
-
-}
diff --git 
a/rt/transports/http-jetty/src/main/resources/META-INF/cxf/bus-extensions.txt 
b/rt/transports/http-jetty/src/main/resources/META-INF/cxf/bus-extensions.txt
index fc257a6916..ea2b67dc97 100644
--- 
a/rt/transports/http-jetty/src/main/resources/META-INF/cxf/bus-extensions.txt
+++ 
b/rt/transports/http-jetty/src/main/resources/META-INF/cxf/bus-extensions.txt
@@ -1,3 +1,2 @@
 org.apache.cxf.transport.http_jetty.JettyDestinationFactory::true
-org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory::true
-org.apache.cxf.transport.http_jetty.continuations.JettyContinuationProviderFactory:org.apache.cxf.transport.http.ContinuationProviderFactory:true
+org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory::true
\ No newline at end of file
diff --git 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
index 5d42849d5c..670b656d94 100644
--- 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
+++ 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
@@ -676,7 +676,7 @@ public class JettyHTTPDestinationTest {
                 
EasyMock.expect(request.getAttribute("org.eclipse.jetty.ajax.Continuation")).andReturn(null);
                 
EasyMock.expect(request.getAttribute("http.service.redirection")).andReturn(null).anyTimes();
 
-                HttpFields httpFields = new HttpFields();
+                HttpFields.Mutable httpFields = HttpFields.build();
                 httpFields.add("content-type", "text/xml");
                 httpFields.add("content-type", "charset=utf8");
                 httpFields.put(JettyHTTPDestinationTest.AUTH_HEADER, 
JettyHTTPDestinationTest.BASIC_AUTH);
diff --git a/rt/transports/websocket/pom.xml b/rt/transports/websocket/pom.xml
index 27001a4ff2..5098bc3098 100644
--- a/rt/transports/websocket/pom.xml
+++ b/rt/transports/websocket/pom.xml
@@ -165,16 +165,10 @@
             <artifactId>jetty-http</artifactId>
             <optional>true</optional>
         </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-continuation</artifactId>
-            <optional>true</optional>
-        </dependency>
-        
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-server</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <artifactId>websocket-jetty-server</artifactId>
+            <version>${cxf.jetty10.version}</version>
             <optional>true</optional>
             <exclusions>
                 <exclusion>
diff --git 
a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/WebSocketDestinationFactory.java
 
b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/WebSocketDestinationFactory.java
index 05a059a4a5..7d9f3dfb2e 100644
--- 
a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/WebSocketDestinationFactory.java
+++ 
b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/WebSocketDestinationFactory.java
@@ -43,8 +43,8 @@ public class WebSocketDestinationFactory implements 
HttpDestinationFactory {
         
probeClass("org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory");
     private static final boolean UNDERTOW_AVAILABLE = 
         
probeClass("org.apache.cxf.transport.http_undertow.UndertowHTTPServerEngineFactory");
-    private static final Constructor<?> JETTY9_WEBSOCKET_DESTINATION_CTR =
-        
probeConstructor("org.apache.cxf.transport.websocket.jetty9.Jetty9WebSocketDestination");
+    private static final Constructor<?> JETTY10_WEBSOCKET_DESTINATION_CTR =
+        
probeConstructor("org.apache.cxf.transport.websocket.jetty10.Jetty10WebSocketDestination");
     private static final Constructor<?> UNDERTOW_WEBSOCKET_DESTINATION_CTR =
         
probeUndertowConstructor("org.apache.cxf.transport.websocket.undertow.UndertowWebSocketDestination");
     private static final Constructor<?> 
ATMOSPHERE_WEBSOCKET_JETTY_DESTINATION_CTR =
@@ -110,7 +110,7 @@ public class WebSocketDestinationFactory implements 
HttpDestinationFactory {
             // for the embedded mode, we stick to jetty if jetty is available
                 JettyHTTPServerEngineFactory serverEngineFactory = bus
                     .getExtension(JettyHTTPServerEngineFactory.class);
-                return 
createJettyHTTPDestination(JETTY9_WEBSOCKET_DESTINATION_CTR, bus, registry,
+                return 
createJettyHTTPDestination(JETTY10_WEBSOCKET_DESTINATION_CTR, bus, registry,
                                               endpointInfo, 
serverEngineFactory);
             } else if (UNDERTOW_AVAILABLE) {
                 // use UndertowWebSocketDestination
@@ -132,7 +132,7 @@ public class WebSocketDestinationFactory implements 
HttpDestinationFactory {
                                                              
endpointInfo.getAddress());
         }
         // use jetty-websocket
-        return createJettyHTTPDestination(JETTY9_WEBSOCKET_DESTINATION_CTR, 
bus, registry,
+        return createJettyHTTPDestination(JETTY10_WEBSOCKET_DESTINATION_CTR, 
bus, registry,
                                           endpointInfo, null);
     }
 
diff --git 
a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty/JettyWebSocketHandler.java
 
b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty/JettyWebSocketHandler.java
deleted file mode 100644
index 84b70a5ee3..0000000000
--- 
a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty/JettyWebSocketHandler.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cxf.transport.websocket.jetty;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.cxf.transport.http_jetty.JettyHTTPDestination;
-import org.apache.cxf.transport.http_jetty.JettyHTTPHandler;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.websocket.server.WebSocketServerFactory;
-
-/**
- * The extended version of JettyHTTPHandler that can support websocket.
- */
-class JettyWebSocketHandler extends JettyHTTPHandler {
-    private WebSocketServerFactory webSocketFactory;
-
-    JettyWebSocketHandler(JettyHTTPDestination jhd, boolean cmExact,
-                          WebSocketServerFactory webSocketFactory) {
-        super(jhd, cmExact);
-        this.webSocketFactory = webSocketFactory;
-    }
-
-    @Override
-    public void handle(String target, Request baseRequest, HttpServletRequest 
request,
-                       HttpServletResponse response) throws IOException, 
ServletException {
-        if (webSocketFactory.acceptWebSocket(request, response)) {
-            baseRequest.setHandled(true);
-        } else {
-            super.handle(target, baseRequest, request, response);
-        }
-    }
-}
diff --git 
a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty9/Jetty9WebSocketDestination.java
 
b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty10/Jetty10WebSocketDestination.java
similarity index 79%
rename from 
rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty9/Jetty9WebSocketDestination.java
rename to 
rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty10/Jetty10WebSocketDestination.java
index 20e4f8cf1c..35c2ef6d4f 100644
--- 
a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty9/Jetty9WebSocketDestination.java
+++ 
b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty10/Jetty10WebSocketDestination.java
@@ -17,17 +17,17 @@
  * under the License.
  */
 
-package org.apache.cxf.transport.websocket.jetty9;
+package org.apache.cxf.transport.websocket.jetty10;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.net.InetSocketAddress;
 import java.net.URL;
 import java.nio.ByteBuffer;
 import java.security.Principal;
 import java.util.Enumeration;
 import java.util.Locale;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
 import java.util.concurrent.RejectedExecutionException;
 import java.util.logging.Level;
@@ -58,30 +58,28 @@ import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.ContextHandler;
 import org.eclipse.jetty.websocket.api.Session;
+import org.eclipse.jetty.websocket.api.UpgradeRequest;
 import org.eclipse.jetty.websocket.api.WebSocketAdapter;
-import org.eclipse.jetty.websocket.server.WebSocketHandler;
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
-import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
-import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
+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.JettyWebSocketServerContainer;
 
 /**
  *
  */
-public class Jetty9WebSocketDestination extends JettyHTTPDestination implements
+public class Jetty10WebSocketDestination extends JettyHTTPDestination 
implements
     WebSocketDestinationService {
-    private static final Logger LOG = 
LogUtils.getL7dLogger(Jetty9WebSocketDestination.class);
+    private static final Logger LOG = 
LogUtils.getL7dLogger(Jetty10WebSocketDestination.class);
 
     //REVISIT make these keys configurable
     private static final String REQUEST_ID_KEY = 
WebSocketConstants.DEFAULT_REQUEST_ID_KEY;
     private static final String RESPONSE_ID_KEY = 
WebSocketConstants.DEFAULT_RESPONSE_ID_KEY;
 
     private final Executor executor;
+    private JettyWebSocketServerContainer webSocketServerContainer;
 
-    private WebSocketHandler webSockethandler;
-    private WebSocketServletFactory webSocketFactory;
-
-    public Jetty9WebSocketDestination(Bus bus, DestinationRegistry registry, 
EndpointInfo ei,
+    public Jetty10WebSocketDestination(Bus bus, DestinationRegistry registry, 
EndpointInfo ei,
                                      JettyHTTPServerEngineFactory 
serverEngineFactory) throws IOException {
         super(bus, registry, ei,
               serverEngineFactory == null ? null : new 
URL(getNonWSAddress(ei)),
@@ -99,16 +97,31 @@ public class Jetty9WebSocketDestination extends 
JettyHTTPDestination implements
                        final HttpServletRequest request,
                        final HttpServletResponse response) throws IOException {
 
-        WebSocketServletFactory wsf = getWebSocketFactory(config, context);
+        JettyWebSocketServerContainer wssc = getWebSocketContainer(context);
+        JettyWebSocketCreator creator = getCreator();
 
-        if (wsf.isUpgradeRequest(request, response)
-            && wsf.acceptWebSocket(request, response)) {
+        if (wssc.upgrade(creator, request, response)) {
             ((Request)request).setHandled(true);
             return;
         }
         super.invoke(config, context, request, response);
     }
 
+    public JettyWebSocketCreator getCreator() {
+        return new Creator();
+    }
+
+    public synchronized JettyWebSocketServerContainer 
getWebSocketContainer(ServletContext context) {
+        if (webSocketServerContainer == null) {
+            webSocketServerContainer = 
JettyWebSocketServerContainer.getContainer(context);
+            if (webSocketServerContainer == null) {
+                webSocketServerContainer = 
JettyWebSocketServerContainer.ensureContainer(context);
+            }
+            return webSocketServerContainer;
+        }
+        return webSocketServerContainer;
+    }
+
     private static String getNonWSAddress(EndpointInfo endpointInfo) {
         String address = endpointInfo.getAddress();
         if (address.startsWith("ws")) {
@@ -127,33 +140,6 @@ public class Jetty9WebSocketDestination extends 
JettyHTTPDestination implements
         return h.getServer();
     }
 
-    private WebSocketServletFactory getWebSocketFactory(ServletConfig config, 
ServletContext context) {
-        if (webSocketFactory == null) {
-            Server server = getServer(config, context);
-            return getWebSocketFactory(server);
-        }
-        return webSocketFactory;
-    }
-
-    public synchronized WebSocketServletFactory getWebSocketFactory(Server 
server) {
-        if (webSocketFactory == null) {
-            webSockethandler = new WebSocketHandler() {
-                @Override
-                public void configure(WebSocketServletFactory factory) {
-                }
-            };
-            try {
-                webSockethandler.setServer(server);
-                webSockethandler.start();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-            webSocketFactory = webSockethandler.getWebSocketFactory();
-            webSocketFactory.setCreator(new Creator());
-        }
-        return webSocketFactory;
-    }
-
     @Override
     protected JettyHTTPHandler createJettyHTTPHandler(JettyHTTPDestination 
jhd, boolean cmExact) {
         return new JettyWebSocketHandler(jhd, cmExact, this);
@@ -161,11 +147,6 @@ public class Jetty9WebSocketDestination extends 
JettyHTTPDestination implements
 
     @Override
     public void shutdown() {
-        try {
-            webSockethandler.stop();
-        } catch (Exception e) {
-            //nothing needed
-        }
         super.shutdown();
     }
 
@@ -179,7 +160,7 @@ public class Jetty9WebSocketDestination extends 
JettyHTTPDestination implements
             public void run() {
                 HttpServletResponse response = null;
                 try {
-                    WebSocketServletHolder holder = new 
Jetty9WebSocketHolder(session);
+                    WebSocketServletHolder holder = new 
Jetty10WebSocketHolder(session);
                     response = createServletResponse(holder);
                     HttpServletRequest request = createServletRequest(data, 
offset, length, holder, session);
                     String reqid = request.getHeader(REQUEST_ID_KEY);
@@ -233,10 +214,10 @@ public class Jetty9WebSocketDestination extends 
JettyHTTPDestination implements
     }
 
     // hide this jetty9 interface here to avoid CNFE on WebSocketCreator
-    private class Creator implements WebSocketCreator {
+    private class Creator implements JettyWebSocketCreator {
 
         @Override
-        public Object createWebSocket(ServletUpgradeRequest req, 
ServletUpgradeResponse resp) {
+        public Object createWebSocket(JettyServerUpgradeRequest req, 
JettyServerUpgradeResponse resp) {
             return new WebSocketAdapter() {
                 Session session;
                 @Override
@@ -263,16 +244,16 @@ public class Jetty9WebSocketDestination extends 
JettyHTTPDestination implements
 
     }
 
-    class Jetty9WebSocketHolder implements WebSocketServletHolder {
+    class Jetty10WebSocketHolder implements WebSocketServletHolder {
         final Session session;
-        Jetty9WebSocketHolder(Session s) {
+        Jetty10WebSocketHolder(Session s) {
             session = s;
         }
         public String getAuthType() {
             return null;
         }
         public String getContextPath() {
-            return 
((ServletUpgradeRequest)session.getUpgradeRequest()).getHttpServletRequest().getContextPath();
+            return 
getHttpServletRequest(session.getUpgradeRequest()).getContextPath();
         }
         public String getLocalAddr() {
             return null;
@@ -332,21 +313,24 @@ public class Jetty9WebSocketDestination extends 
JettyHTTPDestination implements
             return null;
         }
         public int getServerPort() {
-            return session.getLocalAddress().getPort();
+            return ((InetSocketAddress)session.getLocalAddress()).getPort();
         }
         public Principal getUserPrincipal() {
             return null;
         }
         public Object getAttribute(String name) {
-            return 
((ServletUpgradeRequest)session.getUpgradeRequest()).getHttpServletRequest().getAttribute(name);
+            return 
getHttpServletRequest(session.getUpgradeRequest()).getAttribute(name);
         }
         @Override
         public void write(byte[] data, int offset, int length) throws 
IOException {
-            try {
-                session.getRemote().sendBytesByFuture(ByteBuffer.wrap(data,  
offset, length)).get();
-            } catch (InterruptedException | ExecutionException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
+            session.getRemote().sendBytes(ByteBuffer.wrap(data,  offset, 
length));
+        }
+        
+        private HttpServletRequest getHttpServletRequest(final UpgradeRequest 
upgradeRequest) {
+            if (upgradeRequest instanceof JettyServerUpgradeRequest) {
+                return 
((JettyServerUpgradeRequest)upgradeRequest).getHttpServletRequest();
+            } else {
+                throw new IllegalStateException("Unsupported upgrade request 
class: " + upgradeRequest.getClass());
             }
         }
     }
diff --git 
a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty9/JettyWebSocketHandler.java
 
b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty10/JettyWebSocketHandler.java
similarity index 66%
rename from 
rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty9/JettyWebSocketHandler.java
rename to 
rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty10/JettyWebSocketHandler.java
index 03cb2b4a0b..6108e48305 100644
--- 
a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty9/JettyWebSocketHandler.java
+++ 
b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/jetty10/JettyWebSocketHandler.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.transport.websocket.jetty9;
+package org.apache.cxf.transport.websocket.jetty10;
 
 import java.io.IOException;
 
@@ -27,24 +27,27 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.cxf.transport.http_jetty.JettyHTTPDestination;
 import org.apache.cxf.transport.http_jetty.JettyHTTPHandler;
 import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer;
+import 
org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
 
 /**
  * The extended version of JettyHTTPHandler that can support websocket.
  */
 class JettyWebSocketHandler extends JettyHTTPHandler {
-    final Jetty9WebSocketDestination webSocketDestination;
-    WebSocketServletFactory webSocketFactory;
+    final Jetty10WebSocketDestination webSocketDestination;
+    JettyWebSocketServerContainer webSocketContainer;
 
     JettyWebSocketHandler(JettyHTTPDestination jhd, boolean cmExact,
-                          Jetty9WebSocketDestination wsd) {
+                          Jetty10WebSocketDestination wsd) {
         super(jhd, cmExact);
         this.webSocketDestination = wsd;
     }
     
     @Override
     public void doStart() throws Exception {
-        webSocketFactory = 
webSocketDestination.getWebSocketFactory(this.getServer());
+        webSocketContainer = 
webSocketDestination.getWebSocketContainer(getServletContext());
         super.doStart();
     }
 
@@ -55,12 +58,18 @@ class JettyWebSocketHandler extends JettyHTTPHandler {
                        HttpServletResponse response)
         throws IOException, ServletException {
 
-        if (webSocketFactory.isUpgradeRequest(request, response)
-            && webSocketFactory.acceptWebSocket(request, response)) {
+        if (webSocketContainer.upgrade(webSocketDestination.getCreator(), 
request, response)) {
             baseRequest.setHandled(true);
             return;
         }
         super.handle(target, baseRequest, request, response);
     }
 
+    @Override
+    public ContextHandler createContextHandler() {
+        final ServletContextHandler handler = new ServletContextHandler();
+        JettyWebSocketServletContainerInitializer.configure(handler, null);
+        return handler;
+    }
+
 }
diff --git 
a/rt/transports/websocket/src/test/java/org/apache/cxf/transport/websocket/jetty/JettyWebSocketDestinationTest.java
 
b/rt/transports/websocket/src/test/java/org/apache/cxf/transport/websocket/jetty/JettyWebSocketDestinationTest.java
index 711d7d7253..adb54adb5c 100644
--- 
a/rt/transports/websocket/src/test/java/org/apache/cxf/transport/websocket/jetty/JettyWebSocketDestinationTest.java
+++ 
b/rt/transports/websocket/src/test/java/org/apache/cxf/transport/websocket/jetty/JettyWebSocketDestinationTest.java
@@ -30,7 +30,7 @@ import org.apache.cxf.transport.http.DestinationRegistry;
 import org.apache.cxf.transport.http.HTTPTransportFactory;
 import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine;
 import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory;
-import org.apache.cxf.transport.websocket.jetty9.Jetty9WebSocketDestination;
+import org.apache.cxf.transport.websocket.jetty10.Jetty10WebSocketDestination;
 
 import org.easymock.EasyMock;
 import org.easymock.IMocksControl;
@@ -76,7 +76,7 @@ public class JettyWebSocketDestinationTest {
         assertNull(registry.getDestinationForPath(ENDPOINT_ADDRESS));
     }
 
-    private static class TestJettyWebSocketDestination extends 
Jetty9WebSocketDestination {
+    private static class TestJettyWebSocketDestination extends 
Jetty10WebSocketDestination {
         TestJettyWebSocketDestination(Bus bus, DestinationRegistry registry, 
EndpointInfo ei,
                                       JettyHTTPServerEngineFactory 
serverEngineFactory,
                                       JettyHTTPServerEngine engine) throws 
IOException {
diff --git 
a/systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/jetty/AbstractJettyServer.java
 
b/systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/jetty/AbstractJettyServer.java
index 2645851b2a..d9a178ed4c 100644
--- 
a/systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/jetty/AbstractJettyServer.java
+++ 
b/systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/jetty/AbstractJettyServer.java
@@ -72,10 +72,8 @@ public abstract class AbstractJettyServer extends 
AbstractBusTestServerBase {
                 final WebAppContext context = new WebAppContext();
                 context.setContextPath(contextPath);
                 
context.setBaseResource(Resource.newClassPathResource(resourcePath));
-                context.setServerClasses(new String[] {
-                    "org.eclipse.jetty.servlet.ServletContextHandler.Decorator"
-                });
-
+                
+                WebAppContext.addServerClasses(server, 
"org.eclipse.jetty.servlet.ServletContextHandler.Decorator");
                 HandlerCollection handlers = new HandlerCollection();
                 handlers.setHandlers(new Handler[] {context, new 
DefaultHandler()});
                 server.setHandler(handlers);
diff --git a/systests/cdi/cdi-weld/pom.xml b/systests/cdi/cdi-weld/pom.xml
index 5f0f02448a..b92f018e51 100644
--- a/systests/cdi/cdi-weld/pom.xml
+++ b/systests/cdi/cdi-weld/pom.xml
@@ -118,5 +118,10 @@
             <artifactId>cxf-systests-cdi-base</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-jndi</artifactId>
+            <version>${cxf.jetty.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/systests/jaxrs/pom.xml b/systests/jaxrs/pom.xml
index 63f10931e4..dc80574271 100644
--- a/systests/jaxrs/pom.xml
+++ b/systests/jaxrs/pom.xml
@@ -527,14 +527,14 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>com.github.tomakehurst</groupId>
-            <artifactId>wiremock</artifactId>
-            <version>${cxf.wiremock.version}</version>
+            <groupId>io.specto</groupId>
+            <artifactId>hoverfly-java</artifactId>
+            <version>${cxf.hoverfly.version}</version>
             <scope>test</scope>
             <exclusions>
                 <exclusion>
-                    <groupId>org.xmlunit</groupId>
-                    <artifactId>xmlunit-core</artifactId>
+                    <groupId>ch.qos.logback</groupId>
+                    <artifactId>logback-classic</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
@@ -619,8 +619,8 @@
             <dependencies>
                 <dependency>
                     <groupId>org.eclipse.jetty.websocket</groupId>
-                    <artifactId>websocket-server</artifactId>
-                    <version>${cxf.jetty9.version}</version>
+                    <artifactId>websocket-jetty-server</artifactId>
+                    <version>${cxf.jetty10.version}</version>
                     <exclusions>
                         <exclusion>
                             <groupId>javax.servlet</groupId>
@@ -632,7 +632,7 @@
                 <dependency>
                     <groupId>org.eclipse.jetty</groupId>
                     <artifactId>jetty-jaas</artifactId>
-                    <version>${cxf.jetty9.version}</version>
+                    <version>${cxf.jetty10.version}</version>
                 </dependency>
             </dependencies>
         </profile>
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/metrics/JAXRSClientMetricsTest.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/metrics/JAXRSClientMetricsTest.java
index fb50adc5c8..1417727631 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/metrics/JAXRSClientMetricsTest.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/metrics/JAXRSClientMetricsTest.java
@@ -28,7 +28,6 @@ import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.core.MediaType;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
@@ -40,7 +39,11 @@ import org.apache.cxf.metrics.MetricsProvider;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.springframework.util.SocketUtils;
 
+import io.specto.hoverfly.junit.core.SimulationSource;
+import io.specto.hoverfly.junit.rule.HoverflyRule;
+
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -48,19 +51,16 @@ import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
-import static com.github.tomakehurst.wiremock.client.WireMock.get;
-import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
-import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
-import static 
com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
+import static io.specto.hoverfly.junit.core.HoverflyConfig.localConfigs;
+import static io.specto.hoverfly.junit.dsl.HoverflyDsl.response;
+import static io.specto.hoverfly.junit.dsl.HoverflyDsl.service;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.times;
 
 @RunWith(MockitoJUnitRunner.class)
 public class JAXRSClientMetricsTest {
-    @Rule public WireMockRule wireMockRule = new 
WireMockRule(wireMockConfig().dynamicPort());
+    @ClassRule public static HoverflyRule hoverflyRule = 
HoverflyRule.inSimulationMode(localConfigs().asWebServer());
     @Rule public ExpectedException expectedException = 
ExpectedException.none();
     
     private MetricsProvider provider;
@@ -95,13 +95,14 @@ public class JAXRSClientMetricsTest {
     public void usingClientProxyStopIsCalledWhenServerReturnsNotFound() throws 
Exception {
         final JAXRSClientFactoryBean factory = new JAXRSClientFactoryBean();
         factory.setResourceClass(Library.class);
-        factory.setAddress("http://localhost:"; + wireMockRule.port() + "/");
+        factory.setAddress("http://localhost:"; + hoverflyRule.getProxyPort() + 
"/");
         factory.setFeatures(Arrays.asList(new MetricsFeature(provider)));
         factory.setProvider(JacksonJsonProvider.class);
-        
-        stubFor(get(urlEqualTo("/books/10"))
-            .willReturn(aResponse()
-                .withStatus(404)));
+
+        hoverflyRule.simulate(SimulationSource.dsl(
+            service("localhost")
+                .get("/books/10")
+                .willReturn(response().status(404))));
 
         try {
             final Library client = factory.create(Library.class);
@@ -123,14 +124,15 @@ public class JAXRSClientMetricsTest {
                 .register(new MetricsFeature(provider))
                 .register(JacksonJsonProvider.class);
 
-        stubFor(get(urlEqualTo("/books/10"))
-            .willReturn(aResponse()
-                .withStatus(404)));
+        hoverflyRule.simulate(SimulationSource.dsl(
+            service("localhost")
+                .get("/books/10")
+                .willReturn(response().status(404))));
 
         try {
             expectedException.expect(ProcessingException.class);
             client
-                .target("http://localhost:"; + wireMockRule.port() + 
"/books/10")
+                .target("http://localhost:"; + hoverflyRule.getProxyPort() + 
"/books/10")
                 .request(MediaType.APPLICATION_JSON).get()
                 .readEntity(Book.class);
         } finally {
@@ -174,16 +176,18 @@ public class JAXRSClientMetricsTest {
             .register(new MetricsFeature(provider))
             .register(JacksonJsonProvider.class);
 
-        stubFor(get(urlEqualTo("/books/10"))
-            .withHeader("Accept", equalTo(MediaType.APPLICATION_JSON))
-            .willReturn(aResponse()
-                .withHeader("Content-Type", MediaType.APPLICATION_JSON)
-                .withBody("{}")
-                .withStatus(200)));
+        hoverflyRule.simulate(SimulationSource.dsl(
+            service("localhost")
+                .get("/books/10")
+                    .header("Accept", MediaType.APPLICATION_JSON)
+                .willReturn(response()
+                    .header("Content-Type", MediaType.APPLICATION_JSON)
+                    .body("{}")
+                    .status(200))));
 
         try {
             client
-                .target("http://localhost:"; + wireMockRule.port() + 
"/books/10")
+                .target("http://localhost:"; + hoverflyRule.getProxyPort() + 
"/books/10")
                 .request(MediaType.APPLICATION_JSON)
                 .get()
                 .readEntity(Book.class);
@@ -198,12 +202,13 @@ public class JAXRSClientMetricsTest {
     
     @Test
     public void usingWebClientStopIsCalledWhenServerReturnsNotFound() throws 
Exception {
-        final WebClient client = WebClient.create("http://localhost:"; + 
wireMockRule.port() + "/books/10",
+        final WebClient client = WebClient.create("http://localhost:"; + 
hoverflyRule.getProxyPort() + "/books/10",
             Arrays.asList(JacksonJsonProvider.class), Arrays.asList(new 
MetricsFeature(provider)), null);
 
-        stubFor(get(urlEqualTo("/books/10"))
-            .willReturn(aResponse()
-                .withStatus(404)));
+        hoverflyRule.simulate(SimulationSource.dsl(
+            service("localhost")
+                .get("/books/10")
+                .willReturn(response().status(404))));
 
         try {
             expectedException.expect(ProcessingException.class);
diff --git a/systests/jaxws/pom.xml b/systests/jaxws/pom.xml
index 088fb513b1..7131615b2c 100644
--- a/systests/jaxws/pom.xml
+++ b/systests/jaxws/pom.xml
@@ -168,8 +168,8 @@
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-server</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <artifactId>websocket-jetty-server</artifactId>
+            <version>${cxf.jetty10.version}</version>
             <optional>true</optional>
             <exclusions>
                 <exclusion>
diff --git a/systests/microprofile/client/async/pom.xml 
b/systests/microprofile/client/async/pom.xml
index 3d9d50f3c3..1a11b74d2e 100644
--- a/systests/microprofile/client/async/pom.xml
+++ b/systests/microprofile/client/async/pom.xml
@@ -130,7 +130,7 @@
             </dependency>
             <dependency>
                 <groupId>com.github.tomakehurst</groupId>
-                <artifactId>wiremock</artifactId>
+                <artifactId>wiremock-standalone</artifactId>
                 <version>${cxf.wiremock.version}</version>
                 <scope>test</scope>
                 <exclusions>
diff --git a/systests/microprofile/client/nocdi/pom.xml 
b/systests/microprofile/client/nocdi/pom.xml
index 86bcca1d33..acedc758c0 100644
--- a/systests/microprofile/client/nocdi/pom.xml
+++ b/systests/microprofile/client/nocdi/pom.xml
@@ -126,7 +126,7 @@
         </dependency>
         <dependency>
             <groupId>com.github.tomakehurst</groupId>
-            <artifactId>wiremock</artifactId>
+            <artifactId>wiremock-standalone</artifactId>
             <version>${cxf.wiremock.version}</version>
             <scope>test</scope>
             <exclusions>
diff --git a/systests/microprofile/client/weld/pom.xml 
b/systests/microprofile/client/weld/pom.xml
index 3886034d1d..e7d2541a82 100644
--- a/systests/microprofile/client/weld/pom.xml
+++ b/systests/microprofile/client/weld/pom.xml
@@ -32,8 +32,9 @@
     
     <properties>
         
<cxf.module.name>org.apache.cxf.systests.microprofile.weld</cxf.module.name>
+        <cxf.jetty.version>9.4.49.v20220914</cxf.jetty.version>
     </properties>
-    
+
     <dependencies>
         <dependency>
             <groupId>org.jboss.arquillian.testng</groupId>
@@ -67,6 +68,10 @@
             <groupId>jakarta.json</groupId>
             <artifactId>jakarta.json-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>jakarta.json.bind</groupId>
+            <artifactId>jakarta.json.bind-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-jdk14</artifactId>
@@ -88,6 +93,36 @@
             <artifactId>microprofile-rest-client-tck</artifactId>
             <version>${cxf.microprofile.rest.client.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+            <version>${cxf.jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlet</artifactId>
+            <version>${cxf.jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlets</artifactId>
+            <version>${cxf.jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-webapp</artifactId>
+            <version>${cxf.jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-proxy</artifactId>
+            <version>${cxf.jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
@@ -135,13 +170,17 @@
                     <dependenciesToScan>
                         
<dependency>org.eclipse.microprofile.rest.client:microprofile-rest-client-tck</dependency>
                     </dependenciesToScan>
-                    <suiteXmlFiles>
-                        <suiteXmlFile>testng.xml</suiteXmlFile>
-                    </suiteXmlFiles>
                     <systemPropertyVariables>
                         
<wiremock.server.port>${wiremock.server.port}</wiremock.server.port>
                         <sse.server.port>${sse.server.port}</sse.server.port>
                     </systemPropertyVariables>
+                    <properties>
+                        <property>
+                            <name>listener</name>
+                            
<value>org.apache.cxf.microprofile.AnnotationTransformer</value>
+                        </property>
+                    </properties>
+                    <reuseForks>false</reuseForks>
                 </configuration>
                    <dependencies>
                     <dependency>
diff --git a/systests/microprofile/client/weld/testng.xml 
b/systests/microprofile/client/weld/testng.xml
deleted file mode 100644
index 5fbb897b49..0000000000
--- a/systests/microprofile/client/weld/testng.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"; >
- 
-<suite name="MPRestClientTCK1.3">
-    <listeners>
-        <listener 
class-name="org.apache.cxf.microprofile.AnnotationTransformer"/>
-    </listeners>
-    <test name="All TCK Tests">
-        <packages>
-            <package name="org.eclipse.microprofile.rest.client.tck" />
-            <package name="org.eclipse.microprofile.rest.client.tck.cditests" 
/>
-            <package 
name="org.eclipse.microprofile.rest.client.tck.asynctests" />
-            <package name="org.eclipse.microprofile.rest.client.tck.sse" /> 
-            <package name="org.eclipse.microprofile.rest.client.tck.ssl" />
-            <package name="org.eclipse.microprofile.rest.client.tck.timeout" 
/> 
-        </packages>
-    </test>
-</suite>
diff --git a/systests/microprofile/pom.xml b/systests/microprofile/pom.xml
index 34388a363a..26ed795f17 100644
--- a/systests/microprofile/pom.xml
+++ b/systests/microprofile/pom.xml
@@ -126,51 +126,6 @@
                 <version>${cxf.microprofile.rest.client.version}</version>
                 <scope>test</scope>
             </dependency>
-            <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-server</artifactId>
-            <version>${cxf.jetty.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-io</artifactId>
-            <version>${cxf.jetty.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-security</artifactId>
-            <version>${cxf.jetty.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-plus</artifactId>
-            <version>${cxf.jetty.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-webapp</artifactId>
-            <version>${cxf.jetty.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>apache-jsp</artifactId>
-            <version>${cxf.jetty.version}</version>
-            <exclusions>
-              <exclusion>
-                <groupId>org.glassfish</groupId>
-                <artifactId>javax.el</artifactId>
-              </exclusion>
-              <exclusion>
-                <groupId>org.ow2.asm</groupId>
-                <artifactId>asm-commons</artifactId>
-              </exclusion>
-            </exclusions> 
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-util</artifactId>
-            <version>${cxf.jetty.version}</version>
-        </dependency>
         </dependencies>
     </dependencyManagement>
     <modules>
diff --git a/systests/rs-http-sci/pom.xml b/systests/rs-http-sci/pom.xml
index 5de94ae5ca..15dcdb5c32 100644
--- a/systests/rs-http-sci/pom.xml
+++ b/systests/rs-http-sci/pom.xml
@@ -31,7 +31,7 @@
     <description>Apache CXF Servlet Container Initializer Integration System 
Tests</description>
     <url>https://cxf.apache.org</url>
     <properties>
-        <cxf.jetty.version>${cxf.jetty9.version}</cxf.jetty.version>
+        <cxf.jetty.version>${cxf.jetty10.version}</cxf.jetty.version>
         <cxf.module.name>org.apache.cxf.systests.rs.sci</cxf.module.name>
     </properties>
     <dependencies>
diff --git 
a/systests/rs-http-sci/src/test/java/org/apache/cxf/jaxrs/servlet/jetty/AbstractJettyServer.java
 
b/systests/rs-http-sci/src/test/java/org/apache/cxf/jaxrs/servlet/jetty/AbstractJettyServer.java
index 6c791151f7..064be334ab 100644
--- 
a/systests/rs-http-sci/src/test/java/org/apache/cxf/jaxrs/servlet/jetty/AbstractJettyServer.java
+++ 
b/systests/rs-http-sci/src/test/java/org/apache/cxf/jaxrs/servlet/jetty/AbstractJettyServer.java
@@ -24,6 +24,7 @@ import org.eclipse.jetty.annotations.AnnotationConfiguration;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.util.resource.Resource;
 import org.eclipse.jetty.webapp.Configuration;
+import org.eclipse.jetty.webapp.WebAppConfiguration;
 import org.eclipse.jetty.webapp.WebAppContext;
 import org.eclipse.jetty.webapp.WebXmlConfiguration;
 
@@ -50,6 +51,7 @@ public abstract class AbstractJettyServer extends 
AbstractBusTestServerBase {
 
             context.setConfigurations(new Configuration[] {
                 new WebXmlConfiguration(),
+                new WebAppConfiguration(),
                 new AnnotationConfiguration()
             });
 
diff --git a/systests/rs-sse/rs-sse-jetty/pom.xml 
b/systests/rs-sse/rs-sse-jetty/pom.xml
index a0d91f78f7..abb6a2f245 100644
--- a/systests/rs-sse/rs-sse-jetty/pom.xml
+++ b/systests/rs-sse/rs-sse-jetty/pom.xml
@@ -30,7 +30,7 @@
     <description>Apache CXF SSE Integration System Tests for 
Jetty</description>
     <url>https://cxf.apache.org</url>
     <properties>
-        <cxf.jetty.version>${cxf.jetty9.version}</cxf.jetty.version>
+        <cxf.jetty.version>${cxf.jetty10.version}</cxf.jetty.version>
         <cxf.module.name>org.apache.cxf.systests.rs.sse.jetty</cxf.module.name>
     </properties>
     <dependencies>
@@ -56,12 +56,6 @@
             <artifactId>jetty-plus</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-server</artifactId>
-            <version>${cxf.jetty.version}</version>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-webapp</artifactId>
diff --git a/systests/transports/pom.xml b/systests/transports/pom.xml
index a44bd15d2e..1e95214d7d 100644
--- a/systests/transports/pom.xml
+++ b/systests/transports/pom.xml
@@ -346,19 +346,19 @@
         <dependency>
             <groupId>org.eclipse.jetty.http2</groupId>
             <artifactId>http2-client</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-alpn-java-server</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-alpn-java-client</artifactId>
-            <version>${cxf.jetty9.version}</version>
+            <version>${cxf.jetty10.version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git 
a/systests/transports/src/test/java/org/apache/cxf/systest/http2_jetty/Http2TestClient.java
 
b/systests/transports/src/test/java/org/apache/cxf/systest/http2_jetty/Http2TestClient.java
index 70a388abce..2492b325df 100644
--- 
a/systests/transports/src/test/java/org/apache/cxf/systest/http2_jetty/Http2TestClient.java
+++ 
b/systests/transports/src/test/java/org/apache/cxf/systest/http2_jetty/Http2TestClient.java
@@ -27,7 +27,6 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import javax.ws.rs.ClientErrorException;
 import javax.ws.rs.core.MediaType;
 
 import org.eclipse.jetty.http.HttpFields;
@@ -139,11 +138,11 @@ public class Http2TestClient implements AutoCloseable {
             new ServerSessionListener.Adapter(), sessionPromise);
         final Session session = sessionPromise.get();
 
-        final HttpFields requestFields = new HttpFields();
+        final HttpFields.Mutable requestFields = HttpFields.build();
         requestFields.add(HttpHeader.ACCEPT, accept);
         requestFields.add(HttpHeader.HOST, "localhost");
 
-        final MetaData.Request request = new MetaData.Request(method, new 
HttpURI(address + path), 
+        final MetaData.Request request = new MetaData.Request(method, 
HttpURI.build(address + path), 
             version, requestFields);
 
         final CompletableFuture<ClientResponse> future = new 
CompletableFuture<>();
@@ -192,9 +191,9 @@ public class Http2TestClient implements AutoCloseable {
         }
         
         @Override
-        public void onTimeout(Stream stream, Throwable x) {
+        public boolean onIdleTimeout(Stream stream, Throwable x) {
             future.completeExceptionally(x);
-            super.onTimeout(stream, x);
+            return super.onIdleTimeout(stream, x);
         }
         
         @Override
@@ -202,11 +201,5 @@ public class Http2TestClient implements AutoCloseable {
             future.completeExceptionally(failure);
             super.onFailure(stream, error, reason, failure, callback);
         }
-        
-        @Override
-        public void onFailure(Stream stream, int error, String reason, 
Callback callback) {
-            future.completeExceptionally(new ClientErrorException(reason, 
error));
-            super.onFailure(stream, error, reason, callback);
-        }
     }
 }


Reply via email to