You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2023/06/21 19:35:41 UTC

[camel] branch CAMEL-19481/upgrade-jetty-10 created (now 3ff722d52e6)

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

nfilotto pushed a change to branch CAMEL-19481/upgrade-jetty-10
in repository https://gitbox.apache.org/repos/asf/camel.git


      at 3ff722d52e6 CAMEL-19481: Upgrade to Jetty 10

This branch includes the following new commits:

     new 3ff722d52e6 CAMEL-19481: Upgrade to Jetty 10

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[camel] 01/01: CAMEL-19481: Upgrade to Jetty 10

Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch CAMEL-19481/upgrade-jetty-10
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 3ff722d52e6f6c5ed7224092c9fe44f511523761
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Wed Jun 21 11:56:18 2023 +0200

    CAMEL-19481: Upgrade to Jetty 10
---
 camel-dependencies/pom.xml                         |  4 +-
 .../org/apache/camel/catalog/components/jetty.json |  4 +-
 .../apache/camel/catalog/components/websocket.json |  2 +-
 components/camel-atmosphere-websocket/pom.xml      | 29 ++++++--
 .../camel/component/cometd/CometdComponent.java    |  2 +-
 .../component/jetty/CamelContinuationServlet.java  | 64 +++++++++++------
 .../camel/component/jetty/JettyHttpComponent.java  | 16 +++--
 components/camel-jetty/pom.xml                     | 16 ++---
 .../JettyHttp10EndpointUriFactory.java}            |  4 +-
 .../JettyHttpComponent10Configurer.java}           |  8 +--
 .../JettyHttpEndpoint10Configurer.java}            |  8 +--
 .../services/org/apache/camel/component/jetty      |  2 +-
 .../org/apache/camel/configurer/jetty-component    |  2 +-
 .../org/apache/camel/configurer/jetty-endpoint     |  2 +-
 .../services/org/apache/camel/send-dynamic/jetty   |  2 +-
 .../org/apache/camel/urifactory/jetty-endpoint     |  2 +-
 .../camel/component/{jetty9 => jetty10}/jetty.json |  4 +-
 .../camel-jetty/src/main/docs/jetty-component.adoc |  4 +-
 .../{jetty9 => jetty10}/AttachmentHttpBinding.java | 11 +--
 .../CamelInputStreamContentProvider.java           |  2 +-
 .../{jetty9 => jetty10}/HttpSendDynamicAware.java  |  2 +-
 .../JettyContentExchange10.java}                   |  6 +-
 .../JettyHttpComponent10.java}                     | 10 +--
 .../JettyHttpEndpoint10.java}                      | 12 ++--
 .../jetty/JettyComponentMuteExceptionTest.java     |  4 +-
 .../jetty/JettyHttpEndpointDisconnectTest.java     |  5 +-
 .../JettyAsyncDefaultContinuationTimeoutTest.java  | 76 --------------------
 .../jetty/JettyComponentSpringConfiguredTest.xml   |  2 +-
 .../apache/camel/component/jetty/jetty-https.xml   |  2 +-
 components/camel-resteasy/pom.xml                  |  4 +-
 .../camel/component/resteasy/test/WebTest.java     |  4 +-
 .../codegen/AbstractSalesforceExecution.java       |  2 +-
 .../camel-salesforce-component/pom.xml             | 14 ++--
 .../component/salesforce/SalesforceComponent.java  |  6 +-
 .../component/salesforce/SalesforceHttpClient.java | 13 +++-
 .../internal/client/AbstractClientBase.java        |  9 +--
 .../internal/client/DefaultAnalyticsApiClient.java |  2 +-
 .../internal/client/DefaultBulkApiClient.java      |  3 +-
 .../internal/client/DefaultBulkApiV2Client.java    |  3 +-
 .../internal/client/DefaultCompositeApiClient.java |  3 +-
 ...efaultCompositeSObjectCollectionsApiClient.java |  3 +-
 .../internal/client/DefaultRawClient.java          |  6 +-
 .../internal/client/DefaultRestClient.java         |  3 +-
 .../internal/client/SalesforceSecurityHandler.java | 17 ++---
 .../internal/streaming/SubscriptionHelper.java     |  2 +-
 .../salesforce/BulkApiIntegrationTest.java         | 10 ++-
 .../salesforce/HttpProxyIntegrationTest.java       |  7 +-
 .../salesforce/RestApiIntegrationTest.java         | 17 +++--
 .../internal/SessionIntegrationTest.java           |  2 +-
 .../internal/client/AbstractClientBaseTest.java    |  4 +-
 .../camel-salesforce-maven-plugin/pom.xml          |  6 +-
 components/camel-undertow/pom.xml                  |  8 +--
 components/camel-websocket/pom.xml                 |  6 +-
 .../camel/component/websocket/websocket.json       |  2 +-
 .../component/websocket/DefaultWebsocket.java      |  4 +-
 .../websocket/DefaultWebsocketFactory.java         |  4 +-
 .../websocket/JettyClassPathResource.java          | 14 ++++
 .../component/websocket/WebSocketFactory.java      |  4 +-
 .../component/websocket/WebsocketComponent.java    |  9 ++-
 .../websocket/WebsocketComponentServlet.java       | 21 +++---
 .../component/websocket/WebsocketConstants.java    |  2 +-
 .../component/websocket/WebsocketConsumer.java     |  6 +-
 .../component/websocket/WebsocketProducer.java     | 29 +++++++-
 .../websocket/WebsocketComponentServletTest.java   | 10 +--
 .../WebsocketEndpointConfigurationTest.java        | 42 ++++++------
 .../component/websocket/WebsocketProducerTest.java | 46 +++++++++----
 .../WebsocketSubprotocolNegotiationTest.java       | 10 +--
 .../modules/ROOT/examples/json/jetty.json          |  2 +-
 .../component/ComponentsBuilderFactory.java        |  2 +-
 .../dsl/JettyComponentBuilderFactory.java          | 80 +++++++++++-----------
 .../src/generated/resources/metadata.json          |  4 +-
 .../camel-component-known-dependencies.properties  |  2 +-
 parent/pom.xml                                     |  4 +-
 .../infra/jetty/services/JettyEmbeddedService.java | 31 +++++++--
 74 files changed, 437 insertions(+), 352 deletions(-)

diff --git a/camel-dependencies/pom.xml b/camel-dependencies/pom.xml
index d10874cc148..a6d6576f96c 100644
--- a/camel-dependencies/pom.xml
+++ b/camel-dependencies/pom.xml
@@ -48,7 +48,7 @@
     <aries-blueprint-proxy-version>1.1.12</aries-blueprint-proxy-version>
     <aries-spifly-version>1.3.5</aries-spifly-version>
     <aries-util-version>1.1.3</aries-util-version>
-    <arquillian-jetty-embedded-9-version>1.0.0.CR3</arquillian-jetty-embedded-9-version>
+    <arquillian-jetty-embedded-10-version>1.0.0.Final</arquillian-jetty-embedded-10-version>
     <arquillian-version>1.6.0.Final</arquillian-version>
     <arquillian-weld-embedded-version>2.0.0.Final</arquillian-weld-embedded-version>
     <as2-lib-version>4.11.0</as2-lib-version>
@@ -323,7 +323,7 @@
     <jettison-version>1.5.3</jettison-version>
     <jetty-plugin-version>${jetty-version}</jetty-plugin-version>
     <jetty-runner-groupId>org.eclipse.jetty</jetty-runner-groupId>
-    <jetty-version>${jetty9-version}</jetty-version>
+    <jetty-version>10.0.15</jetty-version>
     <jetty9-version>9.4.51.v20230217</jetty9-version>
     <jgit-version>6.3.0.202209071007-r</jgit-version>
     <jgroups-raft-leveldbjni-version>1.8</jgroups-raft-leveldbjni-version>
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jetty.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jetty.json
index b3df5be1a2a..ac6b6db3e01 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jetty.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jetty.json
@@ -3,12 +3,12 @@
     "kind": "component",
     "name": "jetty",
     "title": "Jetty",
-    "description": "Expose HTTP endpoints using Jetty 9.",
+    "description": "Expose HTTP endpoints using Jetty 10.",
     "deprecated": false,
     "deprecationNote": "",
     "firstVersion": "1.2.0",
     "label": "http",
-    "javaType": "org.apache.camel.component.jetty9.JettyHttpComponent9",
+    "javaType": "org.apache.camel.component.jetty10.JettyHttpComponent10",
     "supportLevel": "Stable",
     "groupId": "org.apache.camel",
     "artifactId": "camel-jetty",
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/websocket.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/websocket.json
index e05f6f832c4..dffc72fa297 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/websocket.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/websocket.json
@@ -42,7 +42,7 @@
   "headers": {
     "websocket.connectionKey": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: Sends the message to all clients which are currently connected. You can use the sendToAll option on the endpoint instead of using this header. Consumer: Connection key identifying an individual client connection. You can save this and specify [...]
     "websocket.sendToAll": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sends the message to all clients which are currently connected. You can use the sendToAll option on the endpoint instead of using this header.", "constantName": "org.apache.camel.component.websocket.WebsocketConstants#SEND_TO_ALL" },
-    "websocket.remoteAddress": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "java.net.InetSocketAddress", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Remote address of the websocket session.", "constantName": "org.apache.camel.component.websocket.WebsocketConstants#REMOTE_ADDRESS" },
+    "websocket.remoteAddress": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "java.net.SocketAddress", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Remote address of the websocket session.", "constantName": "org.apache.camel.component.websocket.WebsocketConstants#REMOTE_ADDRESS" },
     "websocket.subprotocol": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If a specific subprotocol was negotiated, it will be specfied in this header. Note that if you specify the any subprotocol to be supported, and a client requests a specific subprotocol, the connection will be accepted without a specific subprot [...]
     "websocket.relativePath": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If you specify a wildcard URI path for an endpoint, and a websocket client connects to that websocket endpoing, the relative path that the client specified will be provided in this header. For example, if you specified websocket:\/\/0.0.0.0:80 [...]
   },
diff --git a/components/camel-atmosphere-websocket/pom.xml b/components/camel-atmosphere-websocket/pom.xml
index 1d8e7381474..dd9d6334b29 100644
--- a/components/camel-atmosphere-websocket/pom.xml
+++ b/components/camel-atmosphere-websocket/pom.xml
@@ -64,6 +64,18 @@
             <version>${javax-servlet-api-version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.eclipse.jetty.websocket</groupId>
+            <artifactId>websocket-server</artifactId>
+            <version>${jetty9-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+            <version>${jetty9-version}</version>
+        </dependency>
+
         <!--  atmosphere -->
         <dependency>
             <groupId>org.atmosphere</groupId>
@@ -99,13 +111,16 @@
             <version>${project.version}</version>
             <type>test-jar</type>
 	        <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-server</artifactId>
-            <version>${jetty-version}</version>
-            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.eclipse.jetty.websocket</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.eclipse.jetty</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
diff --git a/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java b/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
index e256d623515..f8fabc70207 100644
--- a/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
+++ b/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
@@ -233,7 +233,7 @@ public class CometdComponent extends DefaultComponent implements SSLContextParam
             sslParams = retrieveGlobalSslContextParameters();
         }
 
-        SslContextFactory sslContextFactory = new SslContextFactory();
+        SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
         sslContextFactory.setEndpointIdentificationAlgorithm(null);
         if (sslParams != null) {
             sslContextFactory.setSslContext(sslParams.createSSLContext(getCamelContext()));
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
index 0f3d51ea68e..b692006c0f9 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
@@ -23,6 +23,10 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 
+import javax.servlet.AsyncContext;
+import javax.servlet.AsyncEvent;
+import javax.servlet.AsyncListener;
+import javax.servlet.DispatcherType;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -41,14 +45,14 @@ import org.apache.camel.http.common.HttpMessage;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.util.UnsafeUriCharactersEncoder;
-import org.eclipse.jetty.continuation.Continuation;
-import org.eclipse.jetty.continuation.ContinuationSupport;
 
 /**
  * Servlet which leverage <a href="http://wiki.eclipse.org/Jetty/Feature/Continuations">Jetty Continuations</a>.
  */
 public class CamelContinuationServlet extends CamelServlet {
 
+    static final String TIMEOUT_ERROR = "CamelTimeoutException";
+
     static final String EXCHANGE_ATTRIBUTE_NAME = "CamelExchange";
     static final String EXCHANGE_ATTRIBUTE_ID = "CamelExchangeId";
 
@@ -178,27 +182,20 @@ public class CamelContinuationServlet extends CamelServlet {
         final Exchange result = (Exchange) request.getAttribute(EXCHANGE_ATTRIBUTE_NAME);
         if (result == null) {
             // no asynchronous result so leverage continuation
-            final Continuation continuation = ContinuationSupport.getContinuation(request);
-            if (continuation.isInitial() && continuationTimeout != null) {
+            AsyncContext asyncContext = request.startAsync();
+            if (isInitial(request) && continuationTimeout != null) {
                 // set timeout on initial
-                continuation.setTimeout(continuationTimeout);
+                asyncContext.setTimeout(continuationTimeout.longValue());
             }
 
+            asyncContext.addListener(new ExpiredListener(), request, response);
+
             // are we suspended and a request is dispatched initially?
-            if (consumer.isSuspended() && continuation.isInitial()) {
+            if (consumer.isSuspended() && isInitial(request)) {
                 response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
                 return;
             }
 
-            if (continuation.isExpired()) {
-                String id = (String) continuation.getAttribute(EXCHANGE_ATTRIBUTE_ID);
-                // remember this id as expired
-                expiredExchanges.put(id, id);
-                log.warn("Continuation expired of exchangeId: {}", id);
-                consumer.getBinding().doWriteExceptionResponse(new TimeoutException(), response);
-                return;
-            }
-
             // a new request so create an exchange
             // must be prototype scoped (not pooled) so we create the exchange via endpoint
             final Exchange exchange = consumer.createExchange(false);
@@ -231,7 +228,7 @@ public class CamelContinuationServlet extends CamelServlet {
             if (log.isTraceEnabled()) {
                 log.trace("Suspending continuation of exchangeId: {}", exchange.getExchangeId());
             }
-            continuation.setAttribute(EXCHANGE_ATTRIBUTE_ID, exchange.getExchangeId());
+            request.setAttribute(EXCHANGE_ATTRIBUTE_ID, exchange.getExchangeId());
 
             // we want to handle the UoW
             UnitOfWork uow = exchange.getUnitOfWork();
@@ -248,9 +245,6 @@ public class CamelContinuationServlet extends CamelServlet {
                 ee.setUnitOfWork(uow);
             }
 
-            // must suspend before we process the exchange
-            continuation.suspend();
-
             ClassLoader oldTccl = overrideTccl(exchange);
 
             if (log.isTraceEnabled()) {
@@ -267,8 +261,8 @@ public class CamelContinuationServlet extends CamelServlet {
                             log.trace("Resuming continuation of exchangeId: {}", exchange.getExchangeId());
                         }
                         // resume processing after both, sync and async callbacks
-                        continuation.setAttribute(EXCHANGE_ATTRIBUTE_NAME, exchange);
-                        continuation.resume();
+                        request.setAttribute(EXCHANGE_ATTRIBUTE_NAME, exchange);
+                        asyncContext.dispatch();
                     } else {
                         log.warn("Cannot resume expired continuation of exchangeId: {}", exchange.getExchangeId());
                         consumer.releaseExchange(exchange, false);
@@ -308,6 +302,34 @@ public class CamelContinuationServlet extends CamelServlet {
         }
     }
 
+    private boolean isInitial(HttpServletRequest request) {
+        return request.getDispatcherType() != DispatcherType.ASYNC;
+    }
+
+    private class ExpiredListener implements AsyncListener {
+        @Override
+        public void onComplete(AsyncEvent event) throws IOException {
+        }
+
+        @Override
+        public void onTimeout(AsyncEvent event) throws IOException {
+            HttpServletRequest request = (HttpServletRequest) event.getSuppliedRequest();
+            String id = (String) request.getAttribute(EXCHANGE_ATTRIBUTE_ID);
+            // remember this id as expired
+            expiredExchanges.put(id, id);
+            log.warn("Continuation expired of exchangeId: {}", id);
+            request.setAttribute(TIMEOUT_ERROR, Boolean.TRUE);
+        }
+
+        @Override
+        public void onError(AsyncEvent event) throws IOException {
+        }
+
+        @Override
+        public void onStartAsync(AsyncEvent event) throws IOException {
+        }
+    }
+
     private void updateHttpPath(Exchange exchange, String contextPath) {
         String httpPath = (String) exchange.getIn().getHeader(JettyHttpConstants.HTTP_PATH);
         // encode context path in case it contains unsafe chars, because HTTP_PATH isn't decoded at this moment
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
index c69a50c96ae..2738813f438 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
@@ -26,6 +26,7 @@ import java.net.URISyntaxException;
 import java.security.GeneralSecurityException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.EventListener;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -591,7 +592,7 @@ public abstract class JettyHttpComponent extends HttpCommonComponent
     protected Connector createConnector(Server server, JettyHttpEndpoint endpoint) {
 
         // now we just use the SelectChannelConnector as the default connector
-        SslContextFactory sslcf = null;
+        SslContextFactory.Server sslcf = null;
 
         // Note that this was set on the endpoint when it was constructed.  It was
         // either explicitly set at the component or on the endpoint, but either way,
@@ -601,12 +602,12 @@ public abstract class JettyHttpComponent extends HttpCommonComponent
 
         if (endpointSslContextParameters != null) {
             try {
-                sslcf = createSslContextFactory(endpointSslContextParameters, false);
+                sslcf = (SslContextFactory.Server) createSslContextFactory(endpointSslContextParameters, false);
             } catch (Exception e) {
                 throw new RuntimeCamelException(e);
             }
         } else if ("https".equals(endpoint.getProtocol())) {
-            sslcf = new SslContextFactory();
+            sslcf = new SslContextFactory.Server();
             sslcf.setEndpointIdentificationAlgorithm(null);
             String keystoreProperty = System.getProperty(JETTY_SSL_KEYSTORE);
             if (keystoreProperty != null) {
@@ -634,7 +635,7 @@ public abstract class JettyHttpComponent extends HttpCommonComponent
     }
 
     protected abstract AbstractConnector createConnectorJettyInternal(
-            Server server, JettyHttpEndpoint endpoint, SslContextFactory sslcf);
+            Server server, JettyHttpEndpoint endpoint, SslContextFactory.Server sslcf);
 
     private SslContextFactory createSslContextFactory(SSLContextParameters ssl, boolean client)
             throws GeneralSecurityException, IOException {
@@ -1278,6 +1279,11 @@ public abstract class JettyHttpComponent extends HttpCommonComponent
                         HttpServletRequest request, HttpServletResponse response)
                         throws IOException, ServletException {
                     String msg = HttpStatus.getMessage(response.getStatus());
+                    Object timeout = request.getAttribute(CamelContinuationServlet.TIMEOUT_ERROR);
+                    if (Boolean.TRUE.equals(timeout)) {
+                        request.setAttribute(RequestDispatcher.ERROR_STATUS_CODE, 504);
+                        response.setStatus(504);
+                    }
                     request.setAttribute(RequestDispatcher.ERROR_MESSAGE, msg);
                     super.handle(target, baseRequest, request, response);
                 }
@@ -1344,7 +1350,7 @@ public abstract class JettyHttpComponent extends HttpCommonComponent
 
         try {
             Object o = getContainer(server);
-            o.getClass().getMethod("addEventListener", Container.Listener.class).invoke(o, mbContainer);
+            o.getClass().getMethod("addEventListener", EventListener.class).invoke(o, mbContainer);
             mbContainer.getClass().getMethod("beanAdded", Container.class, Object.class)
                     .invoke(mbContainer, null, server);
         } catch (RuntimeException rex) {
diff --git a/components/camel-jetty/pom.xml b/components/camel-jetty/pom.xml
index bba07777f9b..e5087194a1a 100644
--- a/components/camel-jetty/pom.xml
+++ b/components/camel-jetty/pom.xml
@@ -34,7 +34,7 @@
 
     <properties>
         <camel.osgi.import.before.defaults>
-            org.eclipse.jetty.*;version="[9.4,10)",
+            org.eclipse.jetty.*;version="[10,11)",
             javax.activation.*;version="${javax-activation-version-range}",
             javax.servlet.*;version="${servlet-version-range}"
         </camel.osgi.import.before.defaults>
@@ -58,7 +58,7 @@
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-server</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.eclipse.jetty.orbit</groupId>
@@ -69,32 +69,32 @@
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-servlet</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-security</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-servlets</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-client</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-jmx</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-util</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
 
         <!-- test dependencies -->
diff --git a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttp9EndpointUriFactory.java b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttp10EndpointUriFactory.java
similarity index 94%
rename from components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttp9EndpointUriFactory.java
rename to components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttp10EndpointUriFactory.java
index f5efcfcb92b..2bf9d830e23 100644
--- a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttp9EndpointUriFactory.java
+++ b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttp10EndpointUriFactory.java
@@ -1,5 +1,5 @@
 /* Generated by camel build tools - do NOT edit this file! */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import java.net.URISyntaxException;
 import java.util.Collections;
@@ -13,7 +13,7 @@ import org.apache.camel.spi.EndpointUriFactory;
 /**
  * Generated by camel build tools - do NOT edit this file!
  */
-public class JettyHttp9EndpointUriFactory extends org.apache.camel.support.component.EndpointUriFactorySupport implements EndpointUriFactory {
+public class JettyHttp10EndpointUriFactory extends org.apache.camel.support.component.EndpointUriFactorySupport implements EndpointUriFactory {
 
     private static final String BASE = ":httpUri";
 
diff --git a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttpComponent9Configurer.java b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttpComponent10Configurer.java
similarity index 97%
rename from components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttpComponent9Configurer.java
rename to components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttpComponent10Configurer.java
index 8211d97dbd2..4c4bf25743d 100644
--- a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttpComponent9Configurer.java
+++ b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttpComponent10Configurer.java
@@ -1,5 +1,5 @@
 /* Generated by camel build tools - do NOT edit this file! */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import java.util.Map;
 
@@ -15,11 +15,11 @@ import org.apache.camel.support.component.PropertyConfigurerSupport;
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class JettyHttpComponent9Configurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+public class JettyHttpComponent10Configurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
-        JettyHttpComponent9 target = (JettyHttpComponent9) obj;
+        JettyHttpComponent10 target = (JettyHttpComponent10) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowjavaserializedobject":
         case "allowJavaSerializedObject": target.setAllowJavaSerializedObject(property(camelContext, boolean.class, value)); return true;
@@ -164,7 +164,7 @@ public class JettyHttpComponent9Configurer extends PropertyConfigurerSupport imp
 
     @Override
     public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
-        JettyHttpComponent9 target = (JettyHttpComponent9) obj;
+        JettyHttpComponent10 target = (JettyHttpComponent10) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowjavaserializedobject":
         case "allowJavaSerializedObject": return target.isAllowJavaSerializedObject();
diff --git a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9Configurer.java b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttpEndpoint10Configurer.java
similarity index 97%
rename from components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9Configurer.java
rename to components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttpEndpoint10Configurer.java
index 5e258336b5f..b21452fe12b 100644
--- a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9Configurer.java
+++ b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty10/JettyHttpEndpoint10Configurer.java
@@ -1,5 +1,5 @@
 /* Generated by camel build tools - do NOT edit this file! */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import java.util.Map;
 
@@ -15,11 +15,11 @@ import org.apache.camel.support.component.PropertyConfigurerSupport;
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class JettyHttpEndpoint9Configurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+public class JettyHttpEndpoint10Configurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
-        JettyHttpEndpoint9 target = (JettyHttpEndpoint9) obj;
+        JettyHttpEndpoint10 target = (JettyHttpEndpoint10) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "async": target.setAsync(property(camelContext, boolean.class, value)); return true;
         case "bridgeerrorhandler":
@@ -154,7 +154,7 @@ public class JettyHttpEndpoint9Configurer extends PropertyConfigurerSupport impl
 
     @Override
     public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
-        JettyHttpEndpoint9 target = (JettyHttpEndpoint9) obj;
+        JettyHttpEndpoint10 target = (JettyHttpEndpoint10) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "async": return target.isAsync();
         case "bridgeerrorhandler":
diff --git a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/component/jetty b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/component/jetty
index 18fd1ba8f0f..7419241bf20 100644
--- a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/component/jetty
+++ b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/component/jetty
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.jetty9.JettyHttpComponent9
+class=org.apache.camel.component.jetty10.JettyHttpComponent10
diff --git a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/configurer/jetty-component b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/configurer/jetty-component
index 1f0792cf87c..5611033b879 100644
--- a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/configurer/jetty-component
+++ b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/configurer/jetty-component
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.jetty9.JettyHttpComponent9Configurer
+class=org.apache.camel.component.jetty10.JettyHttpComponent10Configurer
diff --git a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/configurer/jetty-endpoint b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/configurer/jetty-endpoint
index d8a0689b558..baee67ccacc 100644
--- a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/configurer/jetty-endpoint
+++ b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/configurer/jetty-endpoint
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.jetty9.JettyHttpEndpoint9Configurer
+class=org.apache.camel.component.jetty10.JettyHttpEndpoint10Configurer
diff --git a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/send-dynamic/jetty b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/send-dynamic/jetty
index ca555990bee..e1889e2e5b7 100644
--- a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/send-dynamic/jetty
+++ b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/send-dynamic/jetty
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.jetty9.HttpSendDynamicAware
+class=org.apache.camel.component.jetty10.HttpSendDynamicAware
diff --git a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/urifactory/jetty-endpoint b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/urifactory/jetty-endpoint
index c66b1220ece..b1334160fe8 100644
--- a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/urifactory/jetty-endpoint
+++ b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/urifactory/jetty-endpoint
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.jetty9.JettyHttp9EndpointUriFactory
+class=org.apache.camel.component.jetty10.JettyHttp10EndpointUriFactory
diff --git a/components/camel-jetty/src/generated/resources/org/apache/camel/component/jetty9/jetty.json b/components/camel-jetty/src/generated/resources/org/apache/camel/component/jetty10/jetty.json
similarity index 99%
rename from components/camel-jetty/src/generated/resources/org/apache/camel/component/jetty9/jetty.json
rename to components/camel-jetty/src/generated/resources/org/apache/camel/component/jetty10/jetty.json
index b3df5be1a2a..ac6b6db3e01 100644
--- a/components/camel-jetty/src/generated/resources/org/apache/camel/component/jetty9/jetty.json
+++ b/components/camel-jetty/src/generated/resources/org/apache/camel/component/jetty10/jetty.json
@@ -3,12 +3,12 @@
     "kind": "component",
     "name": "jetty",
     "title": "Jetty",
-    "description": "Expose HTTP endpoints using Jetty 9.",
+    "description": "Expose HTTP endpoints using Jetty 10.",
     "deprecated": false,
     "deprecationNote": "",
     "firstVersion": "1.2.0",
     "label": "http",
-    "javaType": "org.apache.camel.component.jetty9.JettyHttpComponent9",
+    "javaType": "org.apache.camel.component.jetty10.JettyHttpComponent10",
     "supportLevel": "Stable",
     "groupId": "org.apache.camel",
     "artifactId": "camel-jetty",
diff --git a/components/camel-jetty/src/main/docs/jetty-component.adoc b/components/camel-jetty/src/main/docs/jetty-component.adoc
index 90ae00c0dae..9018ee68d1c 100644
--- a/components/camel-jetty/src/main/docs/jetty-component.adoc
+++ b/components/camel-jetty/src/main/docs/jetty-component.adoc
@@ -2,7 +2,7 @@
 :doctitle: Jetty
 :shortname: jetty
 :artifactid: camel-jetty
-:description: Expose HTTP endpoints using Jetty 9.
+:description: Expose HTTP endpoints using Jetty 10.
 :since: 1.2
 :supportlevel: Stable
 :component-header: Only consumer is supported
@@ -496,7 +496,7 @@ from("jetty:http://0.0.0.0:9080/myservice?handlers=securityHandler")
 If you need more handlers, set the `handlers` option equal to a
 comma-separated list of bean IDs.
 
-Blueprint based definition of basic authentication (based on Jetty 9):
+Blueprint based definition of basic authentication (based on Jetty 10):
 
 [source,xml]
 ----
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/AttachmentHttpBinding.java
similarity index 94%
rename from components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
rename to components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/AttachmentHttpBinding.java
index 2446167ec23..786fac778d2 100644
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/AttachmentHttpBinding.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -37,13 +37,14 @@ import org.apache.camel.attachment.DefaultAttachment;
 import org.apache.camel.component.jetty.MultiPartFilter;
 import org.apache.camel.http.common.DefaultHttpBinding;
 import org.apache.camel.http.common.HttpHelper;
+import org.eclipse.jetty.http.HttpFields;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * To handle attachments with Jetty 9.
+ * To handle attachments with Jetty 10.
  * <p/>
- * This implementation is needed to deal with attachments when using Jetty 9.
+ * This implementation is needed to deal with attachments when using Jetty 10.
  */
 final class AttachmentHttpBinding extends DefaultHttpBinding {
     private static final Logger LOG = LoggerFactory.getLogger(AttachmentHttpBinding.class);
@@ -92,7 +93,9 @@ final class AttachmentHttpBinding extends DefaultHttpBinding {
         // remove Content-Encoding from request
         if (request instanceof org.eclipse.jetty.server.Request) {
             org.eclipse.jetty.server.Request jettyRequest = (org.eclipse.jetty.server.Request) request;
-            jettyRequest.getHttpFields().remove(Exchange.CONTENT_ENCODING);
+            HttpFields originalFields = jettyRequest.getHttpFields();
+            HttpFields newFields = HttpFields.build(originalFields).remove(Exchange.CONTENT_ENCODING);
+            jettyRequest.setHttpFields(newFields);
         }
 
         // attachment is optional
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/CamelInputStreamContentProvider.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/CamelInputStreamContentProvider.java
similarity index 96%
rename from components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/CamelInputStreamContentProvider.java
rename to components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/CamelInputStreamContentProvider.java
index 1b1cf7ea4a9..17e49b316c4 100644
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/CamelInputStreamContentProvider.java
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/CamelInputStreamContentProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import java.io.InputStream;
 
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/HttpSendDynamicAware.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/HttpSendDynamicAware.java
similarity index 95%
rename from components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/HttpSendDynamicAware.java
rename to components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/HttpSendDynamicAware.java
index eee06bc1e06..c7c506bcb19 100644
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/HttpSendDynamicAware.java
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/HttpSendDynamicAware.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import org.apache.camel.spi.annotations.SendDynamic;
 
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyContentExchange10.java
similarity index 98%
rename from components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java
rename to components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyContentExchange10.java
index 2ca5924fc18..3ab4dd7e903 100644
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyContentExchange10.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
@@ -55,9 +55,9 @@ import org.slf4j.LoggerFactory;
 /**
  * Jetty specific exchange which keeps track of the request and response.
  */
-public class JettyContentExchange9 implements JettyContentExchange {
+public class JettyContentExchange10 implements JettyContentExchange {
 
-    private static final Logger LOG = LoggerFactory.getLogger(JettyContentExchange9.class);
+    private static final Logger LOG = LoggerFactory.getLogger(JettyContentExchange10.class);
 
     private volatile Exchange exchange;
     private volatile AsyncCallback callback;
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyHttpComponent10.java
similarity index 96%
rename from components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java
rename to components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyHttpComponent10.java
index d7ef71f8962..15fe4c4fe85 100644
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyHttpComponent10.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -40,20 +40,20 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component("jetty")
-public class JettyHttpComponent9 extends JettyHttpComponent {
+public class JettyHttpComponent10 extends JettyHttpComponent {
 
     public static Map<String, Throwable> connectorCreation = new ConcurrentHashMap<>();
 
-    private static final Logger LOG = LoggerFactory.getLogger(JettyHttpComponent9.class);
+    private static final Logger LOG = LoggerFactory.getLogger(JettyHttpComponent10.class);
 
     @Override
     protected JettyHttpEndpoint createEndpoint(URI endpointUri, URI httpUri) throws URISyntaxException {
-        return new JettyHttpEndpoint9(this, endpointUri.toString(), httpUri);
+        return new JettyHttpEndpoint10(this, endpointUri.toString(), httpUri);
     }
 
     @Override
     protected AbstractConnector createConnectorJettyInternal(
-            Server server, JettyHttpEndpoint endpoint, SslContextFactory sslcf) {
+            Server server, JettyHttpEndpoint endpoint, SslContextFactory.Server sslcf) {
         try {
             String host = endpoint.getHttpUri().getHost();
             int port = endpoint.getPort();
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyHttpEndpoint10.java
similarity index 88%
rename from components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java
rename to components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyHttpEndpoint10.java
index 52157b962bc..0875b0cf56e 100644
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty10/JettyHttpEndpoint10.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.jetty9;
+package org.apache.camel.component.jetty10;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -30,24 +30,24 @@ import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 
 /**
- * Expose HTTP endpoints using Jetty 9.
+ * Expose HTTP endpoints using Jetty 10.
  */
 @UriEndpoint(firstVersion = "1.2.0", scheme = "jetty", extendsScheme = "http", title = "Jetty", syntax = "jetty:httpUri",
              category = { Category.HTTP }, consumerOnly = true, lenientProperties = true,
              headersClass = JettyHttpConstants.class)
 @Metadata(excludeProperties = "authMethod,authMethodPriority,authUsername,authPassword,authDomain,authHost"
                               + "proxyAuthScheme,proxyAuthMethod,proxyAuthUsername,proxyAuthPassword,proxyAuthHost,proxyAuthPort,proxyAuthDomain")
-public class JettyHttpEndpoint9 extends JettyHttpEndpoint implements AsyncEndpoint {
+public class JettyHttpEndpoint10 extends JettyHttpEndpoint implements AsyncEndpoint {
 
     private HttpBinding binding;
 
-    public JettyHttpEndpoint9(JettyHttpComponent component, String uri, URI httpURL) throws URISyntaxException {
+    public JettyHttpEndpoint10(JettyHttpComponent component, String uri, URI httpURL) throws URISyntaxException {
         super(component, uri, httpURL);
     }
 
     @Override
     public HttpBinding getHttpBinding() {
-        // make sure we include jetty9 variant of the http binding
+        // make sure we include jetty10 variant of the http binding
         if (this.binding == null) {
             this.binding = new AttachmentHttpBinding();
             this.binding.setTransferException(isTransferException());
@@ -72,6 +72,6 @@ public class JettyHttpEndpoint9 extends JettyHttpEndpoint implements AsyncEndpoi
 
     @Override
     public JettyContentExchange createContentExchange() {
-        return new JettyContentExchange9();
+        return new JettyContentExchange10();
     }
 }
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyComponentMuteExceptionTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyComponentMuteExceptionTest.java
index 509587b1e13..e4c1378376e 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyComponentMuteExceptionTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyComponentMuteExceptionTest.java
@@ -17,7 +17,7 @@
 package org.apache.camel.component.jetty;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.jetty9.JettyHttpComponent9;
+import org.apache.camel.component.jetty10.JettyHttpComponent10;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -49,7 +49,7 @@ public class JettyComponentMuteExceptionTest extends BaseJettyTest {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                JettyHttpComponent9 jc = context.getComponent("jetty", JettyHttpComponent9.class);
+                JettyHttpComponent10 jc = context.getComponent("jetty", JettyHttpComponent10.class);
                 jc.setMuteException(true);
 
                 from("jetty:http://localhost:{{port}}/foo").to("mock:destination")
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
index 258f2a329e1..5060921cbc9 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
@@ -20,8 +20,7 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.jetty9.JettyHttpComponent9;
-import org.eclipse.jetty.util.Jetty;
+import org.apache.camel.component.jetty10.JettyHttpComponent10;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.parallel.Isolated;
 
@@ -42,7 +41,7 @@ public class JettyHttpEndpointDisconnectTest extends BaseJettyTest {
                 () -> {
                     StringBuilder sb = new StringBuilder("Connector should have been removed\n");
                     for (String key : JettyHttpComponent.CONNECTORS.keySet()) {
-                        Throwable t = JettyHttpComponent9.connectorCreation.get(key);
+                        Throwable t = JettyHttpComponent10.connectorCreation.get(key);
                         if (t == null) {
                             t = new Throwable("Unable to find connector creation");
                         }
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/async/JettyAsyncDefaultContinuationTimeoutTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/async/JettyAsyncDefaultContinuationTimeoutTest.java
deleted file mode 100644
index 98ceee96be6..00000000000
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/async/JettyAsyncDefaultContinuationTimeoutTest.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.camel.component.jetty.async;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.camel.CamelExecutionException;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.jetty.BaseJettyTest;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.http.base.HttpOperationFailedException;
-import org.apache.camel.util.StopWatch;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-@Disabled("This test takes a long time to run, so run it manually")
-public class JettyAsyncDefaultContinuationTimeoutTest extends BaseJettyTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(JettyAsyncDefaultContinuationTimeoutTest.class);
-
-    @Test
-    public void testJettyAsyncTimeout() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
-
-        StopWatch watch = new StopWatch();
-        try {
-            template.requestBody("http://localhost:{{port}}/myservice", null, String.class);
-            fail("Should have thrown an exception");
-        } catch (CamelExecutionException e) {
-            LOG.info("Timeout hit and client got reply with failure status code");
-
-            long taken = watch.taken();
-
-            HttpOperationFailedException cause = assertIsInstanceOf(HttpOperationFailedException.class, e.getCause());
-            assertEquals(504, cause.getStatusCode());
-
-            // should be approx 30-34 sec.
-            assertTrue(taken < 34000, "Timeout should occur faster than " + taken);
-        }
-
-        MockEndpoint.assertIsSatisfied(context, 2, TimeUnit.MINUTES);
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() {
-        return new RouteBuilder() {
-            @Override
-            public void configure() {
-                context.addComponent("async", new MyAsyncComponent());
-
-                from("jetty:http://localhost:{{port}}/myservice").to("async:bye:world?delay=45s").to("mock:result");
-            }
-        };
-    }
-}
diff --git a/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml b/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml
index a67186f1068..9fb941673c2 100644
--- a/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml
+++ b/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml
@@ -24,7 +24,7 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
-	<bean id="jetty2" class="org.apache.camel.component.jetty9.JettyHttpComponent9">
+	<bean id="jetty2" class="org.apache.camel.component.jetty10.JettyHttpComponent10">
 		<property name="enableJmx" value="true"/>
 		<property name="minThreads" value="10"/>
 		<property name="maxThreads" value="50"/>
diff --git a/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml b/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml
index 1228a21ae06..ff454360a3d 100644
--- a/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml
+++ b/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml
@@ -23,7 +23,7 @@
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
-    <bean id="jetty" class="org.apache.camel.component.jetty9.JettyHttpComponent9">
+    <bean id="jetty" class="org.apache.camel.component.jetty10.JettyHttpComponent10">
         <property name="sslPassword" value="changeit"/>
         <property name="sslKeyPassword" value="changeit"/>
         <property name="keystore" value="src/test/resources/jsse/localhost.p12"/>
diff --git a/components/camel-resteasy/pom.xml b/components/camel-resteasy/pom.xml
index 692c17f748d..f4461ede0a8 100644
--- a/components/camel-resteasy/pom.xml
+++ b/components/camel-resteasy/pom.xml
@@ -236,8 +236,8 @@
         <!-- jetty test dependencies -->
         <dependency>
             <groupId>org.jboss.arquillian.container</groupId>
-            <artifactId>arquillian-jetty-embedded-9</artifactId>
-            <version>${arquillian-jetty-embedded-9-version}</version>
+            <artifactId>arquillian-jetty-embedded-10</artifactId>
+            <version>${arquillian-jetty-embedded-10-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/components/camel-resteasy/src/test/java/org/apache/camel/component/resteasy/test/WebTest.java b/components/camel-resteasy/src/test/java/org/apache/camel/component/resteasy/test/WebTest.java
index 8b87d37d51f..0732649c206 100644
--- a/components/camel-resteasy/src/test/java/org/apache/camel/component/resteasy/test/WebTest.java
+++ b/components/camel-resteasy/src/test/java/org/apache/camel/component/resteasy/test/WebTest.java
@@ -29,8 +29,8 @@ import java.util.stream.Stream;
 import javax.servlet.ServletContext;
 
 import org.eclipse.jetty.deploy.App;
-import org.jboss.arquillian.container.jetty.embedded_9.JettyEmbeddedConfiguration;
-import org.jboss.arquillian.container.jetty.embedded_9.JettyEmbeddedContainer;
+import org.jboss.arquillian.container.jetty.embedded_10.JettyEmbeddedConfiguration;
+import org.jboss.arquillian.container.jetty.embedded_10.JettyEmbeddedContainer;
 import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
 import org.jboss.arquillian.container.test.impl.enricher.resource.URIResourceProvider;
 import org.jboss.arquillian.container.test.impl.enricher.resource.URLResourceProvider;
diff --git a/components/camel-salesforce/camel-salesforce-codegen/src/main/java/org/apache/camel/component/salesforce/codegen/AbstractSalesforceExecution.java b/components/camel-salesforce/camel-salesforce-codegen/src/main/java/org/apache/camel/component/salesforce/codegen/AbstractSalesforceExecution.java
index db6eeb356a3..a7cf151ebb3 100644
--- a/components/camel-salesforce/camel-salesforce-codegen/src/main/java/org/apache/camel/component/salesforce/codegen/AbstractSalesforceExecution.java
+++ b/components/camel-salesforce/camel-salesforce-codegen/src/main/java/org/apache/camel/component/salesforce/codegen/AbstractSalesforceExecution.java
@@ -203,7 +203,7 @@ public abstract class AbstractSalesforceExecution {
 
         // set ssl context parameters
         try {
-            final SslContextFactory sslContextFactory = new SslContextFactory();
+            final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
             sslContextFactory.setSslContext(sslContextParameters.createSSLContext(camelContext));
 
             SecurityUtils.adaptToIBMCipherNames(sslContextFactory);
diff --git a/components/camel-salesforce/camel-salesforce-component/pom.xml b/components/camel-salesforce/camel-salesforce-component/pom.xml
index 48c8ae40aae..9b220154153 100644
--- a/components/camel-salesforce/camel-salesforce-component/pom.xml
+++ b/components/camel-salesforce/camel-salesforce-component/pom.xml
@@ -53,22 +53,22 @@
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-client</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-util</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-util-ajax</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-io</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -178,19 +178,19 @@
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-server</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-servlet</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-proxy</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
index 6fac729d865..8659ba42e1a 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
@@ -391,7 +391,7 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP
                         .orElseGet(() -> Optional.ofNullable(retrieveGlobalSslContextParameters())
                                 .orElseGet(() -> new SSLContextParameters()));
 
-                final SslContextFactory sslContextFactory = new SslContextFactory();
+                final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
                 sslContextFactory.setSslContext(contextParameters.createSSLContext(getCamelContext()));
 
                 httpClient = createHttpClient(this, sslContextFactory, getCamelContext(), workerPoolSize, workerPoolMaxSize);
@@ -820,7 +820,7 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP
         // let's work with a copy so original properties are intact
         PropertyBindingSupport.bindProperties(camelContext, sslContextParameters, new HashMap<>(properties));
 
-        final SslContextFactory sslContextFactory = new SslContextFactory();
+        final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
         sslContextFactory.setSslContext(sslContextParameters.createSSLContext(camelContext));
 
         final SalesforceHttpClient httpClient
@@ -838,7 +838,7 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP
     }
 
     static SalesforceHttpClient createHttpClient(
-            Object source, final SslContextFactory sslContextFactory, final CamelContext context, int workerPoolSize,
+            Object source, final SslContextFactory.Client sslContextFactory, final CamelContext context, int workerPoolSize,
             int workerPoolMaxSize) {
         SecurityUtils.adaptToIBMCipherNames(sslContextFactory);
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceHttpClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceHttpClient.java
index e12403c498a..67aceb4c9a6 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceHttpClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceHttpClient.java
@@ -33,6 +33,7 @@ import org.eclipse.jetty.client.HttpRequest;
 import org.eclipse.jetty.client.ProtocolHandler;
 import org.eclipse.jetty.client.api.Request;
 import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP;
+import org.eclipse.jetty.io.ClientConnector;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 
 /**
@@ -61,12 +62,12 @@ public class SalesforceHttpClient extends HttpClient {
         this(null);
     }
 
-    public SalesforceHttpClient(SslContextFactory sslContextFactory) {
+    public SalesforceHttpClient(SslContextFactory.Client sslContextFactory) {
         this(null, Executors.newCachedThreadPool(), sslContextFactory);
     }
 
-    public SalesforceHttpClient(CamelContext context, ExecutorService workerPool, SslContextFactory sslContextFactory) {
-        super(new HttpClientTransportOverHTTP(), sslContextFactory);
+    public SalesforceHttpClient(CamelContext context, ExecutorService workerPool, SslContextFactory.Client sslContextFactory) {
+        super(new HttpClientTransportOverHTTP(newConnector(sslContextFactory)));
         this.workerPool = workerPool;
         this.camelContext = context;
 
@@ -90,6 +91,12 @@ public class SalesforceHttpClient extends HttpClient {
         }
     }
 
+    private static ClientConnector newConnector(SslContextFactory.Client sslContextFactory) {
+        ClientConnector connector = new ClientConnector();
+        connector.setSslContextFactory(sslContextFactory);
+        return connector;
+    }
+
     @Override
     public HttpRequest newHttpRequest(HttpConversation conversation, URI uri) {
         final SalesforceHttpRequest request = new SalesforceHttpRequest(this, conversation, uri);
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
index cdbc0462509..984cb05a001 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
@@ -368,10 +368,11 @@ public abstract class AbstractClientBase extends ServiceSupport
             return;
         }
 
-        final HttpFields requestHeaders = request.getHeaders();
-        for (Entry<String, List<String>> header : headers.entrySet()) {
-            requestHeaders.put(header.getKey(), header.getValue());
-        }
+        request.headers(requestHeaders -> {
+            for (Entry<String, List<String>> header : headers.entrySet()) {
+                requestHeaders.put(header.getKey(), header.getValue());
+            }
+        });
     }
 
     static Map<String, List<String>> determineHeaders(final Exchange exchange) {
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
index fa9725fddf4..eee09ac6fdd 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
@@ -250,7 +250,7 @@ public class DefaultAnalyticsApiClient extends AbstractClientBase implements Ana
     @Override
     protected void setAccessToken(Request request) {
         // replace old token
-        request.getHeaders().put(HttpHeader.AUTHORIZATION, TOKEN_PREFIX + accessToken);
+        request.header(HttpHeader.AUTHORIZATION, TOKEN_PREFIX + accessToken);
     }
 
     @Override
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiClient.java
index 09fa12c6d76..78bf19afdb1 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiClient.java
@@ -366,7 +366,8 @@ public class DefaultBulkApiClient extends AbstractClientBase implements BulkApiC
     @Override
     protected void setAccessToken(Request request) {
         // replace old token
-        request.getHeaders().put(TOKEN_HEADER, accessToken);
+        request.header(TOKEN_HEADER, null);
+        request.header(TOKEN_HEADER, accessToken);
     }
 
     @Override
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiV2Client.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiV2Client.java
index 38f11b3274d..7cfd3bf23d5 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiV2Client.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiV2Client.java
@@ -312,7 +312,8 @@ public class DefaultBulkApiV2Client extends AbstractClientBase implements BulkAp
 
     @Override
     protected void setAccessToken(Request request) {
-        request.getHeaders().put(AUTHORIZATION_HEADER, BEARER_PREFIX + accessToken);
+        request.header(AUTHORIZATION_HEADER, null);
+        request.header(AUTHORIZATION_HEADER, BEARER_PREFIX + accessToken);
     }
 
     private String jobUrl(String jobId) {
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
index 9b05fa62240..596ebc795dc 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
@@ -228,7 +228,8 @@ public class DefaultCompositeApiClient extends AbstractClientBase implements Com
 
     @Override
     protected void setAccessToken(final Request request) {
-        request.getHeaders().put("Authorization", "Bearer " + accessToken);
+        request.header("Authorization", null);
+        request.header("Authorization", "Bearer " + accessToken);
     }
 
     static void checkCompositeBatchVersion(final String configuredVersion, final Version batchVersion)
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeSObjectCollectionsApiClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeSObjectCollectionsApiClient.java
index 734ae54b4de..f3b72a4c3a4 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeSObjectCollectionsApiClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeSObjectCollectionsApiClient.java
@@ -182,7 +182,8 @@ public class DefaultCompositeSObjectCollectionsApiClient extends AbstractClientB
 
     @Override
     protected void setAccessToken(final Request request) {
-        request.getHeaders().put("Authorization", "Bearer " + accessToken);
+        request.header("Authorization", null);
+        request.header("Authorization", "Bearer " + accessToken);
     }
 
     private Request createRequest(final String method, final String url, final Map<String, List<String>> headers) {
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRawClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRawClient.java
index c4483d4e0af..d4d2689471f 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRawClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRawClient.java
@@ -49,8 +49,10 @@ public class DefaultRawClient extends AbstractClientBase implements RawClient {
     @Override
     protected void setAccessToken(Request request) {
         // replace old token
-        request.getHeaders().put(BULK_TOKEN_HEADER, accessToken);
-        request.getHeaders().put(REST_TOKEN_HEADER, TOKEN_PREFIX + accessToken);
+        request.header(BULK_TOKEN_HEADER, null);
+        request.header(REST_TOKEN_HEADER, null);
+        request.header(BULK_TOKEN_HEADER, accessToken);
+        request.header(REST_TOKEN_HEADER, TOKEN_PREFIX + accessToken);
     }
 
     @Override
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
index fc1329186bf..221b753a884 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
@@ -406,7 +406,8 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient
     @Override
     protected void setAccessToken(Request request) {
         // replace old token
-        request.getHeaders().put(TOKEN_HEADER, TOKEN_PREFIX + accessToken);
+        request.header(TOKEN_HEADER, null);
+        request.header(TOKEN_HEADER, TOKEN_PREFIX + accessToken);
     }
 
     private String urlEncode(String query) throws UnsupportedEncodingException {
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java
index b672f5c101f..fd5f3380327 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java
@@ -253,15 +253,16 @@ public class SalesforceSecurityHandler implements ProtocolHandler {
             if (copy) {
                 newRequest = httpClient.copyRequest(request, request.getURI());
                 newRequest.method(request.getMethod());
-                HttpFields headers = newRequest.getHeaders();
-                // copy cookies and host for subscriptions to avoid
-                // '403::Unknown Client' errors
-                for (HttpField field : request.getHeaders()) {
-                    HttpHeader header = field.getHeader();
-                    if (HttpHeader.COOKIE.equals(header) || HttpHeader.HOST.equals(header)) {
-                        headers.add(header, field.getValue());
+                newRequest.headers(headers -> {
+                    // copy cookies and host for subscriptions to avoid
+                    // '403::Unknown Client' errors
+                    for (HttpField field : request.getHeaders()) {
+                        HttpHeader header = field.getHeader();
+                        if (HttpHeader.COOKIE.equals(header) || HttpHeader.HOST.equals(header)) {
+                            headers.add(header, field.getValue());
+                        }
                     }
-                }
+                });
             } else {
                 newRequest = request;
             }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
index 51441670ef5..169ab68ab46 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
@@ -401,7 +401,7 @@ public class SubscriptionHelper extends ServiceSupport {
                         throw new RuntimeException(e);
                     }
                 }
-                request.getHeaders().put(HttpHeader.AUTHORIZATION, "OAuth " + accessToken);
+                request.header(HttpHeader.AUTHORIZATION, "OAuth " + accessToken);
             }
         };
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiIntegrationTest.java
index 3e4fb04a798..fc9b405cab8 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiIntegrationTest.java
@@ -24,10 +24,13 @@ import org.apache.camel.component.salesforce.api.dto.bulk.OperationEnum;
 import org.apache.camel.component.salesforce.dto.generated.Merchandise__c;
 import org.apache.camel.support.jsse.SSLContextParameters;
 import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.HttpClientTransport;
 import org.eclipse.jetty.client.api.ContentResponse;
 import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP;
 import org.eclipse.jetty.http.HttpMethod;
 import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.io.ClientConnector;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
@@ -42,9 +45,12 @@ public class BulkApiIntegrationTest extends AbstractBulkApiTestBase {
         final SalesforceComponent sf = context().getComponent("salesforce", SalesforceComponent.class);
         final String accessToken = sf.getSession().getAccessToken();
 
-        final SslContextFactory sslContextFactory = new SslContextFactory.Client();
+        final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
         sslContextFactory.setSslContext(new SSLContextParameters().createSSLContext(context));
-        final HttpClient httpClient = new HttpClient(sslContextFactory);
+        final ClientConnector connector = new ClientConnector();
+        connector.setSslContextFactory(sslContextFactory);
+        final HttpClientTransport transport = new HttpClientTransportOverHTTP(connector);
+        final HttpClient httpClient = new HttpClient(transport);
         httpClient.setConnectTimeout(60000);
         httpClient.start();
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/HttpProxyIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/HttpProxyIntegrationTest.java
index 555379373bf..4cd095d0154 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/HttpProxyIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/HttpProxyIntegrationTest.java
@@ -16,7 +16,9 @@
  */
 package org.apache.camel.component.salesforce;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -36,8 +38,6 @@ import org.apache.camel.test.junit5.params.Test;
 import org.eclipse.jetty.proxy.ConnectHandler;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.util.B64Code;
-import org.eclipse.jetty.util.StringUtil;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.slf4j.Logger;
@@ -108,7 +108,8 @@ public class HttpProxyIntegrationTest extends AbstractSalesforceTestBase {
         server.addConnector(connector);
 
         final String authenticationString
-                = "Basic " + B64Code.encode(HTTP_PROXY_USER_NAME + ":" + HTTP_PROXY_PASSWORD, StringUtil.__ISO_8859_1);
+                = "Basic " + Base64.getEncoder().encodeToString(
+                (HTTP_PROXY_USER_NAME + ":" + HTTP_PROXY_PASSWORD).getBytes(StandardCharsets.ISO_8859_1));
 
         ConnectHandler connectHandler = new ConnectHandler() {
             @Override
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
index 0966e5ee092..cc5ec0f4bf4 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
@@ -59,10 +59,13 @@ import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.jsse.SSLContextParameters;
 import org.apache.commons.io.IOUtils;
 import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.HttpClientTransport;
 import org.eclipse.jetty.client.api.ContentResponse;
 import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP;
 import org.eclipse.jetty.http.HttpMethod;
 import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.io.ClientConnector;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -619,9 +622,12 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
         final SalesforceComponent sf = context().getComponent("salesforce", SalesforceComponent.class);
         final String accessToken = sf.getSession().getAccessToken();
 
-        final SslContextFactory sslContextFactory = new SslContextFactory.Client();
+        final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
         sslContextFactory.setSslContext(new SSLContextParameters().createSSLContext(context));
-        final HttpClient httpClient = new HttpClient(sslContextFactory);
+        final ClientConnector connector = new ClientConnector();
+        connector.setSslContextFactory(sslContextFactory);
+        final HttpClientTransport transport = new HttpClientTransportOverHTTP(connector);
+        final HttpClient httpClient = new HttpClient(transport);
         httpClient.setConnectTimeout(60000);
         httpClient.start();
 
@@ -639,9 +645,12 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
         final SalesforceComponent sf = context().getComponent("salesforce", SalesforceComponent.class);
         final String accessToken = sf.getSession().getAccessToken();
 
-        final SslContextFactory sslContextFactory = new SslContextFactory.Client();
+        final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
         sslContextFactory.setSslContext(new SSLContextParameters().createSSLContext(context));
-        final HttpClient httpClient = new HttpClient(sslContextFactory);
+        final ClientConnector connector = new ClientConnector();
+        connector.setSslContextFactory(sslContextFactory);
+        final HttpClientTransport transport = new HttpClientTransportOverHTTP(connector);
+        final HttpClient httpClient = new HttpClient(transport);
         httpClient.setConnectTimeout(60000);
         httpClient.start();
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/SessionIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/SessionIntegrationTest.java
index 3566d639a77..900f2a8cf37 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/SessionIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/SessionIntegrationTest.java
@@ -40,7 +40,7 @@ public class SessionIntegrationTest implements SalesforceSession.SalesforceSessi
     @Test
     public void testLogin() throws Exception {
 
-        final SslContextFactory sslContextFactory = new SslContextFactory.Client();
+        final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
         sslContextFactory.setSslContext(new SSLContextParameters().createSSLContext(new DefaultCamelContext()));
         final SalesforceHttpClient httpClient = new SalesforceHttpClient(sslContextFactory);
         httpClient.setConnectTimeout(TIMEOUT);
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
index af35dfe3ff7..9b430ed7c45 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
@@ -113,7 +113,7 @@ public class AbstractClientBaseTest {
     @Test
     public void shouldDetermineHeadersFromResponse() {
         final Response response = mock(Response.class);
-        final HttpFields httpHeaders = new HttpFields();
+        final HttpFields.Mutable httpHeaders = HttpFields.build();
         httpHeaders.add("Date", "Mon, 20 May 2013 22:21:46 GMT");
         httpHeaders.add("Sforce-Limit-Info", "api-usage=18/5000");
         httpHeaders.add("Last-Modified", "Mon, 20 May 2013 20:49:32 GMT");
@@ -139,7 +139,7 @@ public class AbstractClientBaseTest {
         final Result result = mock(Result.class);
         final Response response = mock(Response.class);
         when(result.getResponse()).thenReturn(response);
-        when(response.getHeaders()).thenReturn(new HttpFields());
+        when(response.getHeaders()).thenReturn(HttpFields.build());
 
         final SalesforceHttpRequest salesforceRequest = mock(SalesforceHttpRequest.class);
         when(result.getRequest()).thenReturn(salesforceRequest);
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/pom.xml b/components/camel-salesforce/camel-salesforce-maven-plugin/pom.xml
index 749b52998fb..03c5932ec39 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/pom.xml
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/pom.xml
@@ -140,19 +140,19 @@
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-server</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-servlet</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-proxy</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/components/camel-undertow/pom.xml b/components/camel-undertow/pom.xml
index 3d243b98b36..10534cb45b5 100644
--- a/components/camel-undertow/pom.xml
+++ b/components/camel-undertow/pom.xml
@@ -153,25 +153,25 @@
         <dependency>
             <groupId>org.eclipse.jetty.http2</groupId>
             <artifactId>http2-client</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-client</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty.http2</groupId>
             <artifactId>http2-http-client-transport</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-util</artifactId>
-            <version>${jetty9-version}</version>
+            <version>${jetty-version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/components/camel-websocket/pom.xml b/components/camel-websocket/pom.xml
index 97e24eeb0b3..a1cf5f18b2c 100644
--- a/components/camel-websocket/pom.xml
+++ b/components/camel-websocket/pom.xml
@@ -51,17 +51,17 @@
         <!-- Jetty -->
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-server</artifactId>
+            <artifactId>websocket-jetty-client</artifactId>
             <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-client</artifactId>
+            <artifactId>websocket-servlet</artifactId>
             <version>${jetty-version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty.websocket</groupId>
-            <artifactId>websocket-api</artifactId>
+            <artifactId>websocket-jetty-server</artifactId>
             <version>${jetty-version}</version>
         </dependency>
         <dependency>
diff --git a/components/camel-websocket/src/generated/resources/org/apache/camel/component/websocket/websocket.json b/components/camel-websocket/src/generated/resources/org/apache/camel/component/websocket/websocket.json
index e05f6f832c4..dffc72fa297 100644
--- a/components/camel-websocket/src/generated/resources/org/apache/camel/component/websocket/websocket.json
+++ b/components/camel-websocket/src/generated/resources/org/apache/camel/component/websocket/websocket.json
@@ -42,7 +42,7 @@
   "headers": {
     "websocket.connectionKey": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: Sends the message to all clients which are currently connected. You can use the sendToAll option on the endpoint instead of using this header. Consumer: Connection key identifying an individual client connection. You can save this and specify [...]
     "websocket.sendToAll": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sends the message to all clients which are currently connected. You can use the sendToAll option on the endpoint instead of using this header.", "constantName": "org.apache.camel.component.websocket.WebsocketConstants#SEND_TO_ALL" },
-    "websocket.remoteAddress": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "java.net.InetSocketAddress", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Remote address of the websocket session.", "constantName": "org.apache.camel.component.websocket.WebsocketConstants#REMOTE_ADDRESS" },
+    "websocket.remoteAddress": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "java.net.SocketAddress", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Remote address of the websocket session.", "constantName": "org.apache.camel.component.websocket.WebsocketConstants#REMOTE_ADDRESS" },
     "websocket.subprotocol": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If a specific subprotocol was negotiated, it will be specfied in this header. Note that if you specify the any subprotocol to be supported, and a client requests a specific subprotocol, the connection will be accepted without a specific subprot [...]
     "websocket.relativePath": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If you specify a wildcard URI path for an endpoint, and a websocket client connects to that websocket endpoing, the relative path that the client specified will be provided in this header. For example, if you specified websocket:\/\/0.0.0.0:80 [...]
   },
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/DefaultWebsocket.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/DefaultWebsocket.java
index 246fd3ba215..f280a4c5369 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/DefaultWebsocket.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/DefaultWebsocket.java
@@ -17,7 +17,7 @@
 package org.apache.camel.component.websocket;
 
 import java.io.Serializable;
-import java.net.InetSocketAddress;
+import java.net.SocketAddress;
 import java.util.UUID;
 
 import org.eclipse.jetty.websocket.api.Session;
@@ -93,7 +93,7 @@ public class DefaultWebsocket implements Serializable {
         }
     }
 
-    private InetSocketAddress getRemoteAddress() {
+    private SocketAddress getRemoteAddress() {
         Session current = session;
         return current != null ? current.getRemoteAddress() : null;
     }
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/DefaultWebsocketFactory.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/DefaultWebsocketFactory.java
index aa8cb1bad40..8234e1b36af 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/DefaultWebsocketFactory.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/DefaultWebsocketFactory.java
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.component.websocket;
 
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
 
 /**
  * Default websocket factory. Used when no custom websocket is needed.
@@ -25,7 +25,7 @@ public class DefaultWebsocketFactory implements WebSocketFactory {
 
     @Override
     public DefaultWebsocket newInstance(
-            ServletUpgradeRequest request,
+            JettyServerUpgradeRequest request,
             String pathSpec,
             NodeSynchronization sync,
             WebsocketConsumer consumer,
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/JettyClassPathResource.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/JettyClassPathResource.java
index 96198928b48..484408664f4 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/JettyClassPathResource.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/JettyClassPathResource.java
@@ -20,6 +20,8 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.nio.channels.ReadableByteChannel;
 
@@ -74,6 +76,18 @@ public class JettyClassPathResource extends Resource {
     }
 
     @Override
+    public URI getURI() {
+        URL url = getURL();
+        if (url == null) {
+            return null;
+        }
+        try {
+            return url.toURI();
+        } catch (URISyntaxException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     public URL getURL() {
         return resolver.loadResourceAsURL(path);
     }
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebSocketFactory.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebSocketFactory.java
index e377bf8cab8..ce0fa9b1817 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebSocketFactory.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebSocketFactory.java
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.component.websocket;
 
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
 
 /**
  * Web socket factory interface.
@@ -24,7 +24,7 @@ import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
 public interface WebSocketFactory {
 
     DefaultWebsocket newInstance(
-            ServletUpgradeRequest request,
+            JettyServerUpgradeRequest request,
             String pathSpec,
             NodeSynchronization sync,
             WebsocketConsumer consumer,
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java
index 98fc9f9052f..6d756f485d9 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java
@@ -55,6 +55,7 @@ import org.eclipse.jetty.util.resource.Resource;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 import org.eclipse.jetty.util.thread.QueuedThreadPool;
 import org.eclipse.jetty.util.thread.ThreadPool;
+import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -200,6 +201,7 @@ public class WebsocketComponent extends DefaultComponent implements SSLContextPa
                 if (endpoint.isSessionSupport()) {
                     enableSessionSupport(connectorRef.server, connectorKey);
                 }
+                JettyWebSocketServletContainerInitializer.configure(context, null);
                 LOG.info("Jetty Server starting on host: {}:{}", connector.getHost(), connector.getPort());
                 connectorRef.memoryStore.start();
                 connectorRef.server.start();
@@ -514,12 +516,12 @@ public class WebsocketComponent extends DefaultComponent implements SSLContextPa
     private ServerConnector getSslSocketConnector(Server server, SSLContextParameters sslContextParameters) throws Exception {
         ServerConnector sslSocketConnector = null;
         if (sslContextParameters != null) {
-            SslContextFactory sslContextFactory = new WebSocketComponentSslContextFactory();
+            SslContextFactory.Server sslContextFactory = new WebSocketComponentSslContextFactory();
             sslContextFactory.setEndpointIdentificationAlgorithm(null);
             sslContextFactory.setSslContext(sslContextParameters.createSSLContext(getCamelContext()));
             sslSocketConnector = new ServerConnector(server, sslContextFactory);
         } else {
-            SslContextFactory sslContextFactory = new SslContextFactory();
+            SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
             sslContextFactory.setEndpointIdentificationAlgorithm(null);
             sslContextFactory.setKeyStorePassword(sslKeyPassword);
             sslContextFactory.setKeyManagerPassword(sslPassword);
@@ -536,7 +538,7 @@ public class WebsocketComponent extends DefaultComponent implements SSLContextPa
      * Override the key/trust store check method as it does not account for a factory that has a pre-configured
      * {@link javax.net.ssl.SSLContext}.
      */
-    private static final class WebSocketComponentSslContextFactory extends SslContextFactory {
+    private static final class WebSocketComponentSslContextFactory extends SslContextFactory.Server {
         // This method is for Jetty 7.0.x ~ 7.4.x
         @SuppressWarnings("unused")
         public boolean checkConfig() {
@@ -827,6 +829,7 @@ public class WebsocketComponent extends DefaultComponent implements SSLContextPa
             LOG.info("Starting static resources server {}:{} with static resource: {}", host, port, staticResources);
             ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
             staticResourcesServer = createStaticResourcesServer(context, host, port, staticResources);
+            JettyWebSocketServletContainerInitializer.configure(context, null);
             staticResourcesServer.start();
             ServerConnector connector = (ServerConnector) staticResourcesServer.getConnectors()[0];
 
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponentServlet.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponentServlet.java
index 042c827e8ed..e383e13730f 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponentServlet.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponentServlet.java
@@ -21,16 +21,17 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.stream.Collectors;
 
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
-import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
-import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
+import org.eclipse.jetty.websocket.api.WebSocketPolicy;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse;
+import org.eclipse.jetty.websocket.server.JettyWebSocketServlet;
+import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.eclipse.jetty.websocket.api.WebSocketConstants.SEC_WEBSOCKET_PROTOCOL;
+import static org.eclipse.jetty.websocket.api.util.WebSocketConstants.SEC_WEBSOCKET_PROTOCOL;
 
-public class WebsocketComponentServlet extends WebSocketServlet {
+public class WebsocketComponentServlet extends JettyWebSocketServlet {
     public static final String UNSPECIFIED_SUBPROTOCOL = "default";
     public static final String ANY_SUBPROTOCOL = "any";
 
@@ -68,7 +69,7 @@ public class WebsocketComponentServlet extends WebSocketServlet {
         consumers.remove(consumer.getPath());
     }
 
-    public DefaultWebsocket doWebSocketConnect(ServletUpgradeRequest request, ServletUpgradeResponse resp) {
+    public DefaultWebsocket doWebSocketConnect(JettyServerUpgradeRequest request, JettyServerUpgradeResponse resp) {
         String subprotocol = negotiateSubprotocol(request, consumer);
         if (subprotocol == null) {
             return null;       // no agreeable subprotocol was found, reject the connection
@@ -106,7 +107,7 @@ public class WebsocketComponentServlet extends WebSocketServlet {
         return factory.newInstance(request, pathSpec, sync, consumer, subprotocol, relativePath);
     }
 
-    private String negotiateSubprotocol(ServletUpgradeRequest request, WebsocketConsumer consumer) {
+    private String negotiateSubprotocol(JettyServerUpgradeRequest request, WebsocketConsumer consumer) {
         final String[] supportedSubprotocols = Optional.ofNullable(consumer)
                 .map(WebsocketConsumer::getEndpoint)
                 .map(WebsocketEndpoint::getSubprotocol)
@@ -153,8 +154,8 @@ public class WebsocketComponentServlet extends WebSocketServlet {
         this.socketFactory = socketFactory;
     }
 
-    @Override
-    public void configure(WebSocketServletFactory factory) {
+    protected void configure(JettyWebSocketServletFactory factory) {
+        getServletContext().setAttribute(WebSocketPolicy.class.getName(), factory);
         factory.setCreator(this::doWebSocketConnect);
     }
 }
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketConstants.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketConstants.java
index 3036b0b4725..bd62f993158 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketConstants.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketConstants.java
@@ -34,7 +34,7 @@ public final class WebsocketConstants {
               javaType = "Boolean")
     public static final String SEND_TO_ALL = "websocket.sendToAll";
     @Metadata(label = "consumer", description = "Remote address of the websocket session.",
-              javaType = "java.net.InetSocketAddress")
+              javaType = "java.net.SocketAddress")
     public static final String REMOTE_ADDRESS = "websocket.remoteAddress";
     @Metadata(label = "consumer",
               description = "If a specific subprotocol was negotiated, it will be specfied in this header. " +
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketConsumer.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketConsumer.java
index 2c431a328c0..96d92b1c7ce 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketConsumer.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketConsumer.java
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.component.websocket;
 
-import java.net.InetSocketAddress;
+import java.net.SocketAddress;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
@@ -56,7 +56,7 @@ public class WebsocketConsumer extends DefaultConsumer implements WebsocketProdu
     public void sendMessage(
             final String connectionKey,
             final String message,
-            final InetSocketAddress remote,
+            final SocketAddress remote,
             final String subprotocol,
             final String relativePath) {
         sendMessage(connectionKey, (Object) message, remote, subprotocol, relativePath);
@@ -65,7 +65,7 @@ public class WebsocketConsumer extends DefaultConsumer implements WebsocketProdu
     public void sendMessage(
             final String connectionKey,
             final Object message,
-            final InetSocketAddress remote,
+            final SocketAddress remote,
             final String subprotocol,
             final String relativePath) {
 
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketProducer.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketProducer.java
index 06eb2d297e9..18376049aee 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketProducer.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketProducer.java
@@ -27,6 +27,8 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.util.StopWatch;
+import org.eclipse.jetty.util.FutureCallback;
+import org.eclipse.jetty.websocket.api.WriteCallback;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -165,10 +167,14 @@ public class WebsocketProducer extends DefaultProducer implements WebsocketProdu
         if (websocket != null && websocket.getSession().isOpen()) {
             LOG.trace("Sending to websocket {} -> {}", websocket.getConnectionKey(), message);
             if (message instanceof String) {
-                future = websocket.getSession().getRemote().sendStringByFuture((String) message);
+                FutureWriteCallback callback = new FutureWriteCallback();
+                websocket.getSession().getRemote().sendString((String) message, callback);
+                future = callback;
             } else if (message instanceof byte[]) {
+                FutureWriteCallback callback = new FutureWriteCallback();
                 ByteBuffer buf = ByteBuffer.wrap((byte[]) message);
-                future = websocket.getSession().getRemote().sendBytesByFuture(buf);
+                websocket.getSession().getRemote().sendBytes(buf, callback);
+                future = callback;
             }
         }
         return future;
@@ -194,4 +200,23 @@ public class WebsocketProducer extends DefaultProducer implements WebsocketProdu
         throw e;
     }
 
+    private static class FutureWriteCallback extends FutureCallback implements WriteCallback {
+        private static final Logger LOG = LoggerFactory.getLogger(FutureWriteCallback.class);
+
+        @Override
+        public void writeFailed(Throwable cause) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(".writeFailed", cause);
+            }
+            failed(cause);
+        }
+
+        @Override
+        public void writeSuccess() {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(".writeSuccess");
+            }
+            succeeded();
+        }
+    }
 }
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketComponentServletTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketComponentServletTest.java
index 40a4da1e012..6446cee1540 100644
--- a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketComponentServletTest.java
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketComponentServletTest.java
@@ -21,9 +21,9 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.eclipse.jetty.websocket.api.Session;
-import org.eclipse.jetty.websocket.api.WebSocketConstants;
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
+import org.eclipse.jetty.websocket.api.util.WebSocketConstants;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
@@ -56,9 +56,9 @@ public class WebsocketComponentServletTest {
     @Mock
     private NodeSynchronization sync;
     @Mock
-    private ServletUpgradeRequest request;
+    private JettyServerUpgradeRequest request;
     @Mock
-    private ServletUpgradeResponse response;
+    private JettyServerUpgradeResponse response;
 
     private WebsocketComponentServlet websocketComponentServlet;
 
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketEndpointConfigurationTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketEndpointConfigurationTest.java
index 1a0180fbc7d..7e99dc23dac 100644
--- a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketEndpointConfigurationTest.java
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketEndpointConfigurationTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.websocket;
 
+import java.time.Duration;
+
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.component.websocket.WebsocketComponent.ConnectorRef;
@@ -23,7 +25,7 @@ import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.util.thread.QueuedThreadPool;
-import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
+import org.eclipse.jetty.websocket.api.WebSocketPolicy;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoSettings;
@@ -68,16 +70,16 @@ public class WebsocketEndpointConfigurationTest extends CamelTestSupport {
         String maxBinaryMessageSize = context.getInitParameter("maxBinaryMessageSize");
         assertEquals("550", maxBinaryMessageSize, "Got a wrong maxBinaryMessageSize");
 
-        WebSocketServletFactory factory
-                = (WebSocketServletFactory) context.getServletContext().getAttribute(WebSocketServletFactory.class.getName());
-        int factoryBufferSize = factory.getPolicy().getInputBufferSize();
+        WebSocketPolicy policy
+                = (WebSocketPolicy) context.getServletContext().getAttribute(WebSocketPolicy.class.getName());
+        int factoryBufferSize = policy.getInputBufferSize();
         assertEquals(25000, factoryBufferSize, "Got a wrong buffersize");
-        long factoryMaxIdleTime = factory.getPolicy().getIdleTimeout();
-        assertEquals(3000, factoryMaxIdleTime, "Got a wrong maxIdleTime");
-        int factoryMaxTextMessageSize = factory.getPolicy().getMaxTextMessageSize();
-        assertEquals(500, factoryMaxTextMessageSize, "Got a wrong maxTextMessageSize");
-        int factoryMaxBinaryMessageSize = factory.getPolicy().getMaxBinaryMessageSize();
-        assertEquals(550, factoryMaxBinaryMessageSize, "Got a wrong maxBinaryMessageSize");
+        Duration factoryMaxIdleTime = policy.getIdleTimeout();
+        assertEquals(3000, factoryMaxIdleTime.toMillis(), "Got a wrong maxIdleTime");
+        long factoryMaxTextMessageSize = policy.getMaxTextMessageSize();
+        assertEquals(500L, factoryMaxTextMessageSize, "Got a wrong maxTextMessageSize");
+        long factoryMaxBinaryMessageSize = policy.getMaxBinaryMessageSize();
+        assertEquals(550L, factoryMaxBinaryMessageSize, "Got a wrong maxBinaryMessageSize");
     }
 
     @Test
@@ -101,12 +103,12 @@ public class WebsocketEndpointConfigurationTest extends CamelTestSupport {
         String maxIdleTime = context.getInitParameter("maxIdleTime");
         assertEquals("3000", maxIdleTime, "Got a wrong maxIdleTime");
 
-        WebSocketServletFactory factory
-                = (WebSocketServletFactory) context.getServletContext().getAttribute(WebSocketServletFactory.class.getName());
-        int factoryBufferSize = factory.getPolicy().getInputBufferSize();
+        WebSocketPolicy policy
+                = (WebSocketPolicy) context.getServletContext().getAttribute(WebSocketPolicy.class.getName());
+        int factoryBufferSize = policy.getInputBufferSize();
         assertEquals(25000, factoryBufferSize, "Got a wrong buffersize");
-        long factoryMaxIdleTime = factory.getPolicy().getIdleTimeout();
-        assertEquals(3000, factoryMaxIdleTime, "Got a wrong maxIdleTime");
+        Duration factoryMaxIdleTime = policy.getIdleTimeout();
+        assertEquals(3000, factoryMaxIdleTime.toMillis(), "Got a wrong maxIdleTime");
     }
 
     @Test
@@ -131,12 +133,12 @@ public class WebsocketEndpointConfigurationTest extends CamelTestSupport {
         String maxIdleTime = context.getInitParameter("maxIdleTime");
         assertEquals("3000", maxIdleTime, "Got a wrong maxIdleTime");
 
-        WebSocketServletFactory factory
-                = (WebSocketServletFactory) context.getServletContext().getAttribute(WebSocketServletFactory.class.getName());
-        int factoryBufferSize = factory.getPolicy().getInputBufferSize();
+        WebSocketPolicy policy
+                = (WebSocketPolicy) context.getServletContext().getAttribute(WebSocketPolicy.class.getName());
+        int factoryBufferSize = policy.getInputBufferSize();
         assertEquals(25000, factoryBufferSize, "Got a wrong buffersize");
-        long factoryMaxIdleTime = factory.getPolicy().getIdleTimeout();
-        assertEquals(3000, factoryMaxIdleTime, "Got a wrong maxIdleTime");
+        Duration factoryMaxIdleTime = policy.getIdleTimeout();
+        assertEquals(3000, factoryMaxIdleTime.toMillis(), "Got a wrong maxIdleTime");
     }
 
 }
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketProducerTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketProducerTest.java
index f67393186f7..008643aa81e 100644
--- a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketProducerTest.java
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketProducerTest.java
@@ -18,12 +18,12 @@ package org.apache.camel.component.websocket;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.concurrent.Future;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.eclipse.jetty.websocket.api.RemoteEndpoint;
 import org.eclipse.jetty.websocket.api.Session;
+import org.eclipse.jetty.websocket.api.WriteCallback;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
@@ -36,6 +36,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
@@ -62,9 +65,6 @@ public class WebsocketProducerTest {
     private Message inMessage;
     @Mock
     private RemoteEndpoint remoteEndpoint;
-    @Mock
-    private Future<Void> future;
-
     private WebsocketProducer websocketProducer;
     private Collection<DefaultWebsocket> sockets;
 
@@ -85,6 +85,11 @@ public class WebsocketProducerTest {
         when(defaultWebsocket1.getSession()).thenReturn(session);
         when(session.isOpen()).thenReturn(true);
         when(session.getRemote()).thenReturn(remoteEndpoint);
+        doAnswer(
+                invocation -> {
+                    invocation.getArgument(1, WriteCallback.class).writeSuccess();
+                    return null;
+                }).when(remoteEndpoint).sendString(eq(MESSAGE), any());
 
         websocketProducer.process(exchange);
 
@@ -98,7 +103,8 @@ public class WebsocketProducerTest {
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
+        inOrder.verify(endpoint, times(1)).getSendTimeout();
         inOrder.verifyNoMoreInteractions();
     }
 
@@ -112,7 +118,6 @@ public class WebsocketProducerTest {
         when(defaultWebsocket1.getSession()).thenReturn(session);
         when(session.isOpen()).thenReturn(true);
         when(session.getRemote()).thenReturn(remoteEndpoint);
-        when(remoteEndpoint.sendStringByFuture(MESSAGE)).thenReturn(future);
 
         try {
             websocketProducer.process(exchange);
@@ -131,13 +136,14 @@ public class WebsocketProducerTest {
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
         inOrder.verify(endpoint, times(1)).getSendTimeout();
         inOrder.verifyNoMoreInteractions();
     }
 
     @Test
     public void testProcessMultipleMessages() throws Exception {
+        when(endpoint.getSendTimeout()).thenReturn(20);
         when(exchange.getIn()).thenReturn(inMessage);
         when(inMessage.getMandatoryBody()).thenReturn(MESSAGE);
         when(inMessage.getHeader(WebsocketConstants.SEND_TO_ALL, false, Boolean.class)).thenReturn(true);
@@ -146,6 +152,11 @@ public class WebsocketProducerTest {
         when(defaultWebsocket2.getSession()).thenReturn(session);
         when(session.isOpen()).thenReturn(true);
         when(session.getRemote()).thenReturn(remoteEndpoint);
+        doAnswer(
+                invocation -> {
+                    invocation.getArgument(1, WriteCallback.class).writeSuccess();
+                    return null;
+                }).when(remoteEndpoint).sendString(eq(MESSAGE), any());
 
         websocketProducer.process(exchange);
 
@@ -158,11 +169,11 @@ public class WebsocketProducerTest {
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
         inOrder.verify(defaultWebsocket2, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket2, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
         inOrder.verify(endpoint, times(1)).getSendTimeout();
         inOrder.verifyNoMoreInteractions();
     }
@@ -203,7 +214,7 @@ public class WebsocketProducerTest {
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
         inOrder.verifyNoMoreInteractions();
     }
 
@@ -242,11 +253,17 @@ public class WebsocketProducerTest {
 
     @Test
     public void testSendToAll() throws Exception {
+        when(endpoint.getSendTimeout()).thenReturn(20);
         when(store.getAll()).thenReturn(sockets);
         when(defaultWebsocket1.getSession()).thenReturn(session);
         when(defaultWebsocket2.getSession()).thenReturn(session);
         when(session.getRemote()).thenReturn(remoteEndpoint);
         when(session.isOpen()).thenReturn(true);
+        doAnswer(
+                invocation -> {
+                    invocation.getArgument(1, WriteCallback.class).writeSuccess();
+                    return null;
+                }).when(remoteEndpoint).sendString(eq(MESSAGE), any());
 
         websocketProducer.sendToAll(store, MESSAGE, exchange);
 
@@ -255,11 +272,11 @@ public class WebsocketProducerTest {
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
         inOrder.verify(defaultWebsocket2, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket2, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
         inOrder.verifyNoMoreInteractions();
     }
 
@@ -273,7 +290,6 @@ public class WebsocketProducerTest {
         when(defaultWebsocket2.getSession()).thenReturn(session);
         when(session.getRemote()).thenReturn(remoteEndpoint);
         when(session.isOpen()).thenReturn(true);
-        when(remoteEndpoint.sendStringByFuture(MESSAGE)).thenReturn(future);
 
         try {
             websocketProducer.process(exchange);
@@ -287,11 +303,11 @@ public class WebsocketProducerTest {
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket1, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
         inOrder.verify(defaultWebsocket2, times(1)).getSession();
         inOrder.verify(session, times(1)).isOpen();
         inOrder.verify(defaultWebsocket2, times(1)).getSession();
-        inOrder.verify(remoteEndpoint, times(1)).sendStringByFuture(MESSAGE);
+        inOrder.verify(remoteEndpoint, times(1)).sendString(eq(MESSAGE), any());
         inOrder.verifyNoMoreInteractions();
     }
 }
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketSubprotocolNegotiationTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketSubprotocolNegotiationTest.java
index dbb94523533..01a25d4ae73 100644
--- a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketSubprotocolNegotiationTest.java
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketSubprotocolNegotiationTest.java
@@ -19,13 +19,13 @@ package org.apache.camel.component.websocket;
 import java.util.*;
 import java.util.stream.Stream;
 
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
-import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
+import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
-import static org.eclipse.jetty.websocket.api.WebSocketConstants.SEC_WEBSOCKET_PROTOCOL;
+import static org.eclipse.jetty.websocket.api.util.WebSocketConstants.SEC_WEBSOCKET_PROTOCOL;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.params.provider.Arguments.arguments;
@@ -85,8 +85,8 @@ public class WebsocketSubprotocolNegotiationTest {
         // mock the test component inputs
         NodeSynchronization sync = mock(NodeSynchronization.class);
         Map<String, WebSocketFactory> factoryMap = mock(Map.class);
-        ServletUpgradeRequest req = mock(ServletUpgradeRequest.class);
-        ServletUpgradeResponse res = mock(ServletUpgradeResponse.class);
+        JettyServerUpgradeRequest req = mock(JettyServerUpgradeRequest.class);
+        JettyServerUpgradeResponse res = mock(JettyServerUpgradeResponse.class);
         WebsocketConsumer consumer = mock(WebsocketConsumer.class);
         WebsocketEndpoint endpoint = mock(WebsocketEndpoint.class);
         DefaultWebsocket implementation = mock(DefaultWebsocket.class);
diff --git a/docs/components/modules/ROOT/examples/json/jetty.json b/docs/components/modules/ROOT/examples/json/jetty.json
index 6ccff7b448c..d75cffe146d 120000
--- a/docs/components/modules/ROOT/examples/json/jetty.json
+++ b/docs/components/modules/ROOT/examples/json/jetty.json
@@ -1 +1 @@
-../../../../../../components/camel-jetty/src/generated/resources/org/apache/camel/component/jetty9/jetty.json
\ No newline at end of file
+../../../../../../components/camel-jetty/src/generated/resources/org/apache/camel/component/jetty10/jetty.json
\ No newline at end of file
diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index 619e13ab88f..5995f20f3f3 100644
--- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -2334,7 +2334,7 @@ public interface ComponentsBuilderFactory {
     }
     /**
      * Jetty (camel-jetty)
-     * Expose HTTP endpoints using Jetty 9.
+     * Expose HTTP endpoints using Jetty 10.
      * 
      * Category: http
      * Since: 1.2
diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JettyComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JettyComponentBuilderFactory.java
index b5b006567cc..5be9fc2d47a 100644
--- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JettyComponentBuilderFactory.java
+++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JettyComponentBuilderFactory.java
@@ -20,10 +20,10 @@ import javax.annotation.Generated;
 import org.apache.camel.Component;
 import org.apache.camel.builder.component.AbstractComponentBuilder;
 import org.apache.camel.builder.component.ComponentBuilder;
-import org.apache.camel.component.jetty9.JettyHttpComponent9;
+import org.apache.camel.component.jetty10.JettyHttpComponent10;
 
 /**
- * Expose HTTP endpoints using Jetty 9.
+ * Expose HTTP endpoints using Jetty 10.
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
@@ -32,7 +32,7 @@ public interface JettyComponentBuilderFactory {
 
     /**
      * Jetty (camel-jetty)
-     * Expose HTTP endpoints using Jetty 9.
+     * Expose HTTP endpoints using Jetty 10.
      * 
      * Category: http
      * Since: 1.2
@@ -49,7 +49,7 @@ public interface JettyComponentBuilderFactory {
      */
     interface JettyComponentBuilder
             extends
-                ComponentBuilder<JettyHttpComponent9> {
+                ComponentBuilder<JettyHttpComponent10> {
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -608,12 +608,12 @@ public interface JettyComponentBuilderFactory {
 
     class JettyComponentBuilderImpl
             extends
-                AbstractComponentBuilder<JettyHttpComponent9>
+                AbstractComponentBuilder<JettyHttpComponent10>
             implements
                 JettyComponentBuilder {
         @Override
-        protected JettyHttpComponent9 buildConcreteComponent() {
-            return new JettyHttpComponent9();
+        protected JettyHttpComponent10 buildConcreteComponent() {
+            return new JettyHttpComponent10();
         }
         @Override
         protected boolean setPropertyOnComponent(
@@ -621,39 +621,39 @@ public interface JettyComponentBuilderFactory {
                 String name,
                 Object value) {
             switch (name) {
-            case "bridgeErrorHandler": ((JettyHttpComponent9) component).setBridgeErrorHandler((boolean) value); return true;
-            case "continuationTimeout": ((JettyHttpComponent9) component).setContinuationTimeout((java.lang.Long) value); return true;
-            case "enableJmx": ((JettyHttpComponent9) component).setEnableJmx((boolean) value); return true;
-            case "maxThreads": ((JettyHttpComponent9) component).setMaxThreads((java.lang.Integer) value); return true;
-            case "minThreads": ((JettyHttpComponent9) component).setMinThreads((java.lang.Integer) value); return true;
-            case "muteException": ((JettyHttpComponent9) component).setMuteException((boolean) value); return true;
-            case "requestBufferSize": ((JettyHttpComponent9) component).setRequestBufferSize((java.lang.Integer) value); return true;
-            case "requestHeaderSize": ((JettyHttpComponent9) component).setRequestHeaderSize((java.lang.Integer) value); return true;
-            case "responseBufferSize": ((JettyHttpComponent9) component).setResponseBufferSize((java.lang.Integer) value); return true;
-            case "responseHeaderSize": ((JettyHttpComponent9) component).setResponseHeaderSize((java.lang.Integer) value); return true;
-            case "sendServerVersion": ((JettyHttpComponent9) component).setSendServerVersion((boolean) value); return true;
-            case "useContinuation": ((JettyHttpComponent9) component).setUseContinuation((boolean) value); return true;
-            case "useXForwardedForHeader": ((JettyHttpComponent9) component).setUseXForwardedForHeader((boolean) value); return true;
-            case "threadPool": ((JettyHttpComponent9) component).setThreadPool((org.eclipse.jetty.util.thread.ThreadPool) value); return true;
-            case "allowJavaSerializedObject": ((JettyHttpComponent9) component).setAllowJavaSerializedObject((boolean) value); return true;
-            case "autowiredEnabled": ((JettyHttpComponent9) component).setAutowiredEnabled((boolean) value); return true;
-            case "errorHandler": ((JettyHttpComponent9) component).setErrorHandler((org.eclipse.jetty.server.handler.ErrorHandler) value); return true;
-            case "httpBinding": ((JettyHttpComponent9) component).setHttpBinding((org.apache.camel.http.common.HttpBinding) value); return true;
-            case "httpConfiguration": ((JettyHttpComponent9) component).setHttpConfiguration((org.apache.camel.http.common.HttpConfiguration) value); return true;
-            case "jettyHttpBinding": ((JettyHttpComponent9) component).setJettyHttpBinding((org.apache.camel.component.jetty.JettyHttpBinding) value); return true;
-            case "mbContainer": ((JettyHttpComponent9) component).setMbContainer((org.eclipse.jetty.jmx.MBeanContainer) value); return true;
-            case "headerFilterStrategy": ((JettyHttpComponent9) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true;
-            case "proxyHost": ((JettyHttpComponent9) component).setProxyHost((java.lang.String) value); return true;
-            case "proxyPort": ((JettyHttpComponent9) component).setProxyPort((java.lang.Integer) value); return true;
-            case "keystore": ((JettyHttpComponent9) component).setKeystore((java.lang.String) value); return true;
-            case "socketConnectorProperties": ((JettyHttpComponent9) component).setSocketConnectorProperties((java.util.Map) value); return true;
-            case "socketConnectors": ((JettyHttpComponent9) component).setSocketConnectors((java.util.Map) value); return true;
-            case "sslContextParameters": ((JettyHttpComponent9) component).setSslContextParameters((org.apache.camel.support.jsse.SSLContextParameters) value); return true;
-            case "sslKeyPassword": ((JettyHttpComponent9) component).setSslKeyPassword((java.lang.String) value); return true;
-            case "sslPassword": ((JettyHttpComponent9) component).setSslPassword((java.lang.String) value); return true;
-            case "sslSocketConnectorProperties": ((JettyHttpComponent9) component).setSslSocketConnectorProperties((java.util.Map) value); return true;
-            case "sslSocketConnectors": ((JettyHttpComponent9) component).setSslSocketConnectors((java.util.Map) value); return true;
-            case "useGlobalSslContextParameters": ((JettyHttpComponent9) component).setUseGlobalSslContextParameters((boolean) value); return true;
+            case "bridgeErrorHandler": ((JettyHttpComponent10) component).setBridgeErrorHandler((boolean) value); return true;
+            case "continuationTimeout": ((JettyHttpComponent10) component).setContinuationTimeout((java.lang.Long) value); return true;
+            case "enableJmx": ((JettyHttpComponent10) component).setEnableJmx((boolean) value); return true;
+            case "maxThreads": ((JettyHttpComponent10) component).setMaxThreads((java.lang.Integer) value); return true;
+            case "minThreads": ((JettyHttpComponent10) component).setMinThreads((java.lang.Integer) value); return true;
+            case "muteException": ((JettyHttpComponent10) component).setMuteException((boolean) value); return true;
+            case "requestBufferSize": ((JettyHttpComponent10) component).setRequestBufferSize((java.lang.Integer) value); return true;
+            case "requestHeaderSize": ((JettyHttpComponent10) component).setRequestHeaderSize((java.lang.Integer) value); return true;
+            case "responseBufferSize": ((JettyHttpComponent10) component).setResponseBufferSize((java.lang.Integer) value); return true;
+            case "responseHeaderSize": ((JettyHttpComponent10) component).setResponseHeaderSize((java.lang.Integer) value); return true;
+            case "sendServerVersion": ((JettyHttpComponent10) component).setSendServerVersion((boolean) value); return true;
+            case "useContinuation": ((JettyHttpComponent10) component).setUseContinuation((boolean) value); return true;
+            case "useXForwardedForHeader": ((JettyHttpComponent10) component).setUseXForwardedForHeader((boolean) value); return true;
+            case "threadPool": ((JettyHttpComponent10) component).setThreadPool((org.eclipse.jetty.util.thread.ThreadPool) value); return true;
+            case "allowJavaSerializedObject": ((JettyHttpComponent10) component).setAllowJavaSerializedObject((boolean) value); return true;
+            case "autowiredEnabled": ((JettyHttpComponent10) component).setAutowiredEnabled((boolean) value); return true;
+            case "errorHandler": ((JettyHttpComponent10) component).setErrorHandler((org.eclipse.jetty.server.handler.ErrorHandler) value); return true;
+            case "httpBinding": ((JettyHttpComponent10) component).setHttpBinding((org.apache.camel.http.common.HttpBinding) value); return true;
+            case "httpConfiguration": ((JettyHttpComponent10) component).setHttpConfiguration((org.apache.camel.http.common.HttpConfiguration) value); return true;
+            case "jettyHttpBinding": ((JettyHttpComponent10) component).setJettyHttpBinding((org.apache.camel.component.jetty.JettyHttpBinding) value); return true;
+            case "mbContainer": ((JettyHttpComponent10) component).setMbContainer((org.eclipse.jetty.jmx.MBeanContainer) value); return true;
+            case "headerFilterStrategy": ((JettyHttpComponent10) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true;
+            case "proxyHost": ((JettyHttpComponent10) component).setProxyHost((java.lang.String) value); return true;
+            case "proxyPort": ((JettyHttpComponent10) component).setProxyPort((java.lang.Integer) value); return true;
+            case "keystore": ((JettyHttpComponent10) component).setKeystore((java.lang.String) value); return true;
+            case "socketConnectorProperties": ((JettyHttpComponent10) component).setSocketConnectorProperties((java.util.Map) value); return true;
+            case "socketConnectors": ((JettyHttpComponent10) component).setSocketConnectors((java.util.Map) value); return true;
+            case "sslContextParameters": ((JettyHttpComponent10) component).setSslContextParameters((org.apache.camel.support.jsse.SSLContextParameters) value); return true;
+            case "sslKeyPassword": ((JettyHttpComponent10) component).setSslKeyPassword((java.lang.String) value); return true;
+            case "sslPassword": ((JettyHttpComponent10) component).setSslPassword((java.lang.String) value); return true;
+            case "sslSocketConnectorProperties": ((JettyHttpComponent10) component).setSslSocketConnectorProperties((java.util.Map) value); return true;
+            case "sslSocketConnectors": ((JettyHttpComponent10) component).setSslSocketConnectors((java.util.Map) value); return true;
+            case "useGlobalSslContextParameters": ((JettyHttpComponent10) component).setUseGlobalSslContextParameters((boolean) value); return true;
             default: return false;
             }
         }
diff --git a/dsl/camel-componentdsl/src/generated/resources/metadata.json b/dsl/camel-componentdsl/src/generated/resources/metadata.json
index 9771dbf633e..602bb1bd8e5 100644
--- a/dsl/camel-componentdsl/src/generated/resources/metadata.json
+++ b/dsl/camel-componentdsl/src/generated/resources/metadata.json
@@ -3821,12 +3821,12 @@
     "kind": "component",
     "name": "jetty",
     "title": "Jetty",
-    "description": "Expose HTTP endpoints using Jetty 9.",
+    "description": "Expose HTTP endpoints using Jetty 10.",
     "deprecated": false,
     "deprecationNote": "",
     "firstVersion": "1.2.0",
     "label": "http",
-    "javaType": "org.apache.camel.component.jetty9.JettyHttpComponent9",
+    "javaType": "org.apache.camel.component.jetty10.JettyHttpComponent10",
     "supportLevel": "Stable",
     "groupId": "org.apache.camel",
     "artifactId": "camel-jetty",
diff --git a/dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties b/dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties
index adea0c80f43..c2694d03d29 100644
--- a/dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties
+++ b/dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties
@@ -182,7 +182,7 @@ org.apache.camel.component.jcache.JCacheComponent=camel:jcache
 org.apache.camel.component.jclouds.JcloudsComponent=camel:jclouds
 org.apache.camel.component.jcr.JcrComponent=camel:jcr
 org.apache.camel.component.jdbc.JdbcComponent=camel:jdbc
-org.apache.camel.component.jetty9.JettyHttpComponent9=camel:jetty
+org.apache.camel.component.jetty10.JettyHttpComponent10=camel:jetty
 org.apache.camel.component.jgroups.JGroupsComponent=camel:jgroups
 org.apache.camel.component.jgroups.raft.JGroupsRaftComponent=camel:jgroups-raft
 org.apache.camel.component.jira.JiraComponent=camel:jira
diff --git a/parent/pom.xml b/parent/pom.xml
index 4ddb39db2cc..1b6d8eefd9e 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -64,7 +64,7 @@
         <aries-blueprint-proxy-version>1.1.12</aries-blueprint-proxy-version>
         <aries-spifly-version>1.3.5</aries-spifly-version>
         <aries-util-version>1.1.3</aries-util-version>
-        <arquillian-jetty-embedded-9-version>1.0.0.CR3</arquillian-jetty-embedded-9-version>
+        <arquillian-jetty-embedded-10-version>1.0.0.Final</arquillian-jetty-embedded-10-version>
         <arquillian-version>1.6.0.Final</arquillian-version>
         <arquillian-weld-embedded-version>2.0.0.Final</arquillian-weld-embedded-version>
         <as2-lib-version>4.11.0</as2-lib-version>
@@ -304,8 +304,8 @@
         <jetcd-grpc-version>1.47.0</jetcd-grpc-version>
         <jetcd-guava-version>31.1-jre</jetcd-guava-version>
         <jetcd-version>0.7.3</jetcd-version>
+        <jetty-version>10.0.15</jetty-version>
         <jetty9-version>9.4.51.v20230217</jetty9-version>
-        <jetty-version>${jetty9-version}</jetty-version>
         <jetty-plugin-version>${jetty-version}</jetty-plugin-version>
         <jetty-runner-groupId>org.eclipse.jetty</jetty-runner-groupId>
         <jettison-version>1.5.3</jettison-version>
diff --git a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyEmbeddedService.java b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyEmbeddedService.java
index bffe10568bd..ffea22ae092 100644
--- a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyEmbeddedService.java
+++ b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyEmbeddedService.java
@@ -27,7 +27,9 @@ import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SslConnectionFactory;
+import org.eclipse.jetty.util.Jetty;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.jetbrains.annotations.NotNull;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
@@ -54,10 +56,7 @@ public class JettyEmbeddedService implements JettyService, BeforeEachCallback, A
         ServerConnector connector;
         SSLContext sslContext = jettyConfiguration.getSslContext();
         if (sslContext != null) {
-            SslContextFactory sslContextFactory = new SslContextFactory.Server();
-            sslContextFactory.setSslContext(sslContext);
-
-            connector = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, null));
+            connector = new ServerConnector(server, createSslConnectionFactory(sslContext));
         } else {
             connector = new ServerConnector(server);
         }
@@ -65,6 +64,30 @@ public class JettyEmbeddedService implements JettyService, BeforeEachCallback, A
         return connector;
     }
 
+    @NotNull
+    private static SslConnectionFactory createSslConnectionFactory(SSLContext sslContext) {
+        try {
+            SslContextFactory sslContextFactory = createSslContextFactory(sslContext);
+            sslContextFactory.setSslContext(sslContext);
+            return SslConnectionFactory.class.getConstructor(sslContextFactory.getClass(), String.class)
+                    .newInstance(sslContextFactory, null);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @NotNull
+    private static SslContextFactory createSslContextFactory(SSLContext sslContext) throws Exception {
+        Class<?> factoryClass;
+        if (Jetty.VERSION.startsWith("9")) {
+            // Jetty 9 detected
+            factoryClass = Class.forName("org.eclipse.jetty.util.ssl.SslContextFactory");
+        } else {
+            factoryClass = Class.forName("org.eclipse.jetty.util.ssl.SslContextFactory$Server");
+        }
+        return (SslContextFactory) factoryClass.getConstructor().newInstance();
+    }
+
     @Override
     public void registerProperties() {
         System.setProperty(JettyProperties.JETTY_ADDRESS, "localhost:" + getPort());