You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/06/14 05:45:15 UTC
(camel) 01/01: CAMEL-20830: Upgrade jetty. Remove ServletRequest/ServletResponse object in Camel headers as they should only be accessible via the HttpMessage class.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch jet
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 690b16865b7efbc6059cb2cf9fac9e33623c5ef5
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jun 14 07:45:02 2024 +0200
CAMEL-20830: Upgrade jetty. Remove ServletRequest/ServletResponse object in Camel headers as they should only be accessible via the HttpMessage class.
---
.../cxf/jaxrs/CxfRsSpringConsumerTest.java | 1 -
.../message/DefaultCxfMessageMapperTest.java | 7 +++--
components/camel-cxf/camel-cxf-transport/pom.xml | 9 +++---
.../transport/message/DefaultCxfMessageMapper.java | 14 ++++-----
.../message/DefaultCxfMessageMapperTest.java | 7 +++--
.../apache/camel/http/common/HttpConverter.java | 12 ++++----
.../org/apache/camel/http/common/HttpMessage.java | 3 --
.../component/jetty/JettyConverterLoader.java | 5 ----
.../camel/component/jetty/JettyConverter.java | 9 +++---
.../camel/component/jetty/HttpConverterTest.java | 33 ++--------------------
.../component/jetty/HttpGZipEncodingTest.java | 4 +--
.../camel/component/jetty/HttpHeaderTest.java | 4 +--
.../component/servlet/HttpClientRouteTest.java | 6 ++--
.../camel/component/undertow/ExchangeHeaders.java | 2 --
.../src/main/java/org/apache/camel/Exchange.java | 2 ++
.../ROOT/pages/camel-4x-upgrade-guide-4_7.adoc | 21 ++++++++++++++
parent/pom.xml | 2 +-
17 files changed, 64 insertions(+), 77 deletions(-)
diff --git a/components/camel-cxf/camel-cxf-spring-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java b/components/camel-cxf/camel-cxf-spring-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
index edef5481aec..e7a7fa11817 100644
--- a/components/camel-cxf/camel-cxf-spring-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
+++ b/components/camel-cxf/camel-cxf-spring-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
@@ -82,7 +82,6 @@ public class CxfRsSpringConsumerTest extends CamelSpringTestSupport {
@Test
public void testInvokeCxfRsConsumer() throws Exception {
- System.out.println("port1 is " + port1);
String address = "http://localhost:" + port1 + "/CxfRsSpringConsumerInvokeService/customerservice/customers/123";
WebClient wc = WebClient.create(address);
Customer c = wc.accept("application/json").get(Customer.class);
diff --git a/components/camel-cxf/camel-cxf-spring-transport/src/test/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapperTest.java b/components/camel-cxf/camel-cxf-spring-transport/src/test/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapperTest.java
index e63bdaa5598..1be26e77244 100644
--- a/components/camel-cxf/camel-cxf-spring-transport/src/test/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapperTest.java
+++ b/components/camel-cxf/camel-cxf-spring-transport/src/test/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapperTest.java
@@ -25,6 +25,7 @@ import jakarta.servlet.http.HttpServletRequest;
import org.apache.camel.Exchange;
import org.apache.camel.component.cxf.transport.CamelTransportConstants;
import org.apache.camel.component.cxf.transport.message.DefaultCxfMessageMapper;
+import org.apache.camel.http.common.HttpMessage;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.cxf.common.security.SimplePrincipal;
import org.apache.cxf.message.ExchangeImpl;
@@ -77,6 +78,7 @@ public class DefaultCxfMessageMapperTest {
private Exchange setupCamelExchange(String requestURI, String requestPath, HttpServletRequest request) {
org.apache.camel.Message camelMessage = mock(org.apache.camel.Message.class);
+ org.apache.camel.http.common.HttpMessage camelHttpMessage = mock(org.apache.camel.http.common.HttpMessage.class);
Exchange camelExchange = mock(Exchange.class);
when(camelExchange.getProperty(CamelTransportConstants.CXF_EXCHANGE,
org.apache.cxf.message.Exchange.class)).thenReturn(new ExchangeImpl());
@@ -92,8 +94,9 @@ public class DefaultCxfMessageMapperTest {
when(camelMessage.getHeader(Exchange.HTTP_BASE_URI, String.class)).thenReturn(requestPath);
when(camelMessage.getHeader(Exchange.HTTP_METHOD, String.class)).thenReturn("GET");
when(camelMessage.getHeader(Exchange.HTTP_QUERY, String.class)).thenReturn("");
- when(camelMessage.getHeader(Exchange.HTTP_SERVLET_REQUEST)).thenReturn(request);
- when(camelMessage.getHeader(Exchange.HTTP_SERVLET_RESPONSE)).thenReturn(null);
+ when(camelExchange.getIn(HttpMessage.class)).thenReturn(camelHttpMessage);
+ when(camelHttpMessage.getRequest()).thenReturn(request);
+ when(camelHttpMessage.getResponse()).thenReturn(null);
when(camelMessage.getBody(InputStream.class)).thenReturn(new ByteArrayInputStream("".getBytes()));
return camelExchange;
}
diff --git a/components/camel-cxf/camel-cxf-transport/pom.xml b/components/camel-cxf/camel-cxf-transport/pom.xml
index 71dd71939fe..d4cd0f2ef6b 100644
--- a/components/camel-cxf/camel-cxf-transport/pom.xml
+++ b/components/camel-cxf/camel-cxf-transport/pom.xml
@@ -36,9 +36,6 @@
<firstVersion>2.8.0</firstVersion>
<label>soap,webservice</label>
<title>CXF Transport</title>
-
-
-
</properties>
<dependencies>
@@ -46,7 +43,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-support</artifactId>
</dependency>
-
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-http-common</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
@@ -59,7 +59,6 @@
<version>${cxf-version}</version>
</dependency>
-
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
diff --git a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/message/DefaultCxfMessageMapper.java b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/message/DefaultCxfMessageMapper.java
index 916c46260da..6395a90a9e0 100644
--- a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/message/DefaultCxfMessageMapper.java
+++ b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/message/DefaultCxfMessageMapper.java
@@ -23,6 +23,7 @@ import java.util.Map;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.camel.Exchange;
+import org.apache.camel.http.common.HttpMessage;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.message.Message;
@@ -66,16 +67,13 @@ public class DefaultCxfMessageMapper implements CxfMessageMapper {
answer.put(org.apache.cxf.message.Message.ENCODING, enc);
answer.put(org.apache.cxf.message.Message.QUERY_STRING, queryString);
- HttpServletRequest request = (HttpServletRequest) camelMessage.getHeader(Exchange.HTTP_SERVLET_REQUEST);
- answer.put(CXF_HTTP_REQUEST, request);
-
- if (request != null) {
- setSecurityContext(answer, request);
+ HttpMessage hm = camelExchange.getIn(HttpMessage.class);
+ if (hm != null) {
+ answer.put(CXF_HTTP_REQUEST, hm.getRequest());
+ answer.put(CXF_HTTP_RESPONSE, hm.getResponse());
+ setSecurityContext(answer, hm.getRequest());
}
- Object response = camelMessage.getHeader(Exchange.HTTP_SERVLET_RESPONSE);
- answer.put(CXF_HTTP_RESPONSE, response);
-
LOG.trace(
"Processing {}, requestContentType = {}, acceptContentTypes = {}, encoding = {}, path = {}, basePath = {}, verb = {}",
camelExchange, requestContentType, acceptContentTypes, enc, path, basePath, verb);
diff --git a/components/camel-cxf/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapperTest.java b/components/camel-cxf/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapperTest.java
index e63bdaa5598..1be26e77244 100644
--- a/components/camel-cxf/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapperTest.java
+++ b/components/camel-cxf/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapperTest.java
@@ -25,6 +25,7 @@ import jakarta.servlet.http.HttpServletRequest;
import org.apache.camel.Exchange;
import org.apache.camel.component.cxf.transport.CamelTransportConstants;
import org.apache.camel.component.cxf.transport.message.DefaultCxfMessageMapper;
+import org.apache.camel.http.common.HttpMessage;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.cxf.common.security.SimplePrincipal;
import org.apache.cxf.message.ExchangeImpl;
@@ -77,6 +78,7 @@ public class DefaultCxfMessageMapperTest {
private Exchange setupCamelExchange(String requestURI, String requestPath, HttpServletRequest request) {
org.apache.camel.Message camelMessage = mock(org.apache.camel.Message.class);
+ org.apache.camel.http.common.HttpMessage camelHttpMessage = mock(org.apache.camel.http.common.HttpMessage.class);
Exchange camelExchange = mock(Exchange.class);
when(camelExchange.getProperty(CamelTransportConstants.CXF_EXCHANGE,
org.apache.cxf.message.Exchange.class)).thenReturn(new ExchangeImpl());
@@ -92,8 +94,9 @@ public class DefaultCxfMessageMapperTest {
when(camelMessage.getHeader(Exchange.HTTP_BASE_URI, String.class)).thenReturn(requestPath);
when(camelMessage.getHeader(Exchange.HTTP_METHOD, String.class)).thenReturn("GET");
when(camelMessage.getHeader(Exchange.HTTP_QUERY, String.class)).thenReturn("");
- when(camelMessage.getHeader(Exchange.HTTP_SERVLET_REQUEST)).thenReturn(request);
- when(camelMessage.getHeader(Exchange.HTTP_SERVLET_RESPONSE)).thenReturn(null);
+ when(camelExchange.getIn(HttpMessage.class)).thenReturn(camelHttpMessage);
+ when(camelHttpMessage.getRequest()).thenReturn(request);
+ when(camelHttpMessage.getResponse()).thenReturn(null);
when(camelMessage.getBody(InputStream.class)).thenReturn(new ByteArrayInputStream("".getBytes()));
return camelExchange;
}
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
index 29e27a5e8d0..ab248ed57c8 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
@@ -41,18 +41,18 @@ public final class HttpConverter {
@Converter
public static HttpServletRequest toServletRequest(Message message) {
- if (message == null) {
- return null;
+ if (message instanceof HttpMessage hm) {
+ return hm.getRequest();
}
- return message.getHeader(Exchange.HTTP_SERVLET_REQUEST, HttpServletRequest.class);
+ return null;
}
@Converter
public static HttpServletResponse toServletResponse(Message message) {
- if (message == null) {
- return null;
+ if (message instanceof HttpMessage hm) {
+ return hm.getResponse();
}
- return message.getHeader(Exchange.HTTP_SERVLET_RESPONSE, HttpServletResponse.class);
+ return null;
}
@Converter
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpMessage.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpMessage.java
index 56edd680bfe..0e5d612911a 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpMessage.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpMessage.java
@@ -58,9 +58,6 @@ public class HttpMessage extends DefaultMessage {
this.request = request;
this.response = response;
- // Put the request and response into the message header
- this.setHeader(Exchange.HTTP_SERVLET_REQUEST, request);
- this.setHeader(Exchange.HTTP_SERVLET_RESPONSE, response);
// Check the setting of exchange
Boolean flag = exchange.getProperty(Exchange.SKIP_WWW_FORM_URLENCODED, Boolean.class);
diff --git a/components/camel-jetty-common/src/generated/java/org/apache/camel/component/jetty/JettyConverterLoader.java b/components/camel-jetty-common/src/generated/java/org/apache/camel/component/jetty/JettyConverterLoader.java
index 9d022eaf871..5e6ab0ebe6d 100644
--- a/components/camel-jetty-common/src/generated/java/org/apache/camel/component/jetty/JettyConverterLoader.java
+++ b/components/camel-jetty-common/src/generated/java/org/apache/camel/component/jetty/JettyConverterLoader.java
@@ -40,14 +40,9 @@ public final class JettyConverterLoader implements TypeConverterLoader, CamelCon
@Override
public void load(TypeConverterRegistry registry) throws TypeConverterLoaderException {
- registerConverters(registry);
registerFallbackConverters(registry);
}
- private void registerConverters(TypeConverterRegistry registry) {
- addTypeConverter(registry, java.lang.String.class, org.eclipse.jetty.server.Response.class, false,
- (type, exchange, value) -> org.apache.camel.component.jetty.JettyConverter.toString((org.eclipse.jetty.server.Response) value));
- }
private static void addTypeConverter(TypeConverterRegistry registry, Class<?> toType, Class<?> fromType, boolean allowNull, SimpleTypeConverter.ConversionMethod method) {
registry.addTypeConverter(toType, fromType, new SimpleTypeConverter(allowNull, method));
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyConverter.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyConverter.java
index ced938822d3..8f261df33da 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyConverter.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyConverter.java
@@ -31,11 +31,6 @@ public final class JettyConverter {
//Helper class
}
- @Converter
- public static String toString(Response response) {
- return response.toString();
- }
-
@Converter(fallback = true)
@SuppressWarnings("unchecked")
public static <T> T convertTo(Class<T> type, Exchange exchange, Object value, TypeConverterRegistry registry) {
@@ -44,6 +39,10 @@ public final class JettyConverter {
if (Request.class.isAssignableFrom(value.getClass())) {
return (T) MISS_VALUE;
}
+ // should not try to convert Response as its not possible
+ if (Response.class.isAssignableFrom(value.getClass())) {
+ return (T) MISS_VALUE;
+ }
}
return null;
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpConverterTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpConverterTest.java
index c8a934cf78a..b9d4e381bf3 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpConverterTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpConverterTest.java
@@ -20,7 +20,6 @@ import java.io.InputStream;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
@@ -40,32 +39,6 @@ public class HttpConverterTest extends BaseJettyTest {
return false;
}
- @Test
- public void testToServletRequestAndResponse() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() {
- from("jetty://http://localhost:{{port}}/test")
- // add this node to make sure the convert can work within
- // DefaultMessageImpl
- .convertBodyTo(String.class).process(new Processor() {
- public void process(Exchange exchange) {
- HttpServletRequest request = exchange.getIn(HttpServletRequest.class);
- assertNotNull(request, "We should get request object here");
- HttpServletResponse response = exchange.getIn(HttpServletResponse.class);
- assertNotNull(response, "We should get response object here");
- String s = exchange.getIn().getBody(String.class);
- assertEquals("Hello World", s);
- }
- }).transform(constant("Bye World"));
- }
- });
- context.start();
-
- String out = template.requestBody("http://localhost:{{port}}/test", "Hello World", String.class);
- assertEquals("Bye World", out);
- }
-
@Test
public void testToServletInputStreamWithStreamCaching() throws Exception {
context.addRoutes(new RouteBuilder() {
@@ -73,7 +46,7 @@ public class HttpConverterTest extends BaseJettyTest {
public void configure() {
from("jetty://http://localhost:{{port}}/test").process(new Processor() {
public void process(Exchange exchange) throws Exception {
- HttpMessage msg = exchange.getIn(HttpMessage.class);
+ HttpMessage msg = exchange.getMessage(HttpMessage.class);
// The ServletInputStream should be cached, and you can't read message here
ServletInputStream sis = HttpConverter.toServletInputStream(msg);
@@ -99,7 +72,7 @@ public class HttpConverterTest extends BaseJettyTest {
public void configure() {
from("jetty://http://localhost:{{port}}/test?disableStreamCache=true").process(new Processor() {
public void process(Exchange exchange) throws Exception {
- HttpMessage msg = exchange.getIn(HttpMessage.class);
+ HttpMessage msg = exchange.getMessage(HttpMessage.class);
// The ServletInputStream should not be cached
ServletInputStream sis = HttpConverter.toServletInputStream(msg);
@@ -126,7 +99,7 @@ public class HttpConverterTest extends BaseJettyTest {
public void configure() {
from("jetty://http://localhost:{{port}}/test").process(new Processor() {
public void process(Exchange exchange) {
- HttpMessage msg = exchange.getIn(HttpMessage.class);
+ HttpMessage msg = exchange.getMessage(HttpMessage.class);
InputStream sis = msg.getBody(InputStream.class);
assertNotNull(sis);
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpGZipEncodingTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpGZipEncodingTest.java
index 54f8ca71d5f..e49041462f2 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpGZipEncodingTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpGZipEncodingTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.Processor;
import org.apache.camel.builder.ExpressionBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.http.HttpClientConfigurer;
+import org.apache.camel.http.common.HttpMessage;
import org.apache.camel.spi.Registry;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.junit.jupiter.api.Disabled;
@@ -86,8 +87,7 @@ public class HttpGZipEncodingTest extends BaseJettyTest {
from("jetty:http://localhost:" + port1 + "/gzip").process(new Processor() {
public void process(Exchange exchange) {
// check the request method
- HttpServletRequest request
- = exchange.getIn().getHeader(Exchange.HTTP_SERVLET_REQUEST, HttpServletRequest.class);
+ HttpServletRequest request = exchange.getMessage(HttpMessage.class).getRequest();
if ("POST".equals(request.getMethod())) {
String requestBody = exchange.getIn().getBody(String.class);
assertEquals("<Hello>World</Hello>", requestBody, "Get a wrong request string");
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
index 4e15d204e3b..88406fac9f1 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
@@ -24,6 +24,7 @@ import jakarta.servlet.ServletRequest;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.http.common.HttpMessage;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -73,8 +74,7 @@ public class HttpHeaderTest extends BaseJettyTest {
from("jetty:http://localhost:{{port}}/myapp/mytest").process(new Processor() {
public void process(Exchange exchange) {
Map<String, Object> headers = exchange.getIn().getHeaders();
- ServletRequest request
- = exchange.getIn().getHeader(Exchange.HTTP_SERVLET_REQUEST, ServletRequest.class);
+ ServletRequest request = exchange.getIn(HttpMessage.class).getRequest();
assertNotNull(request);
assertEquals("HTTP/1.0", request.getProtocol(), "Get a wong http protocol version");
for (Entry<String, Object> entry : headers.entrySet()) {
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
index b47b94c5b30..bdfc5ab2608 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
@@ -25,6 +25,7 @@ import jakarta.servlet.http.HttpServletResponse;
import org.apache.camel.Exchange;
import org.apache.camel.FailedToStartRouteException;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.http.common.HttpMessage;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -160,11 +161,10 @@ public class HttpClientRouteTest extends ServletCamelRouterTestSupport {
});
from("servlet:testConverter?matchOnUriPrefix=true")
- .convertBodyTo(String.class)
.process(exchange -> {
- HttpServletRequest request = exchange.getIn(HttpServletRequest.class);
+ HttpServletRequest request = exchange.getIn(HttpMessage.class).getRequest();
assertNotNull(request, "We should get request object here");
- HttpServletResponse response = exchange.getIn(HttpServletResponse.class);
+ HttpServletResponse response = exchange.getIn(HttpMessage.class).getResponse();
assertNotNull(response, "We should get response object here");
String s = exchange.getIn().getBody(String.class);
assertEquals("<request> hello world </request>", s);
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/ExchangeHeaders.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/ExchangeHeaders.java
index 59e50bfb7c5..47af57fb11f 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/ExchangeHeaders.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/ExchangeHeaders.java
@@ -98,8 +98,6 @@ public final class ExchangeHeaders {
public static final HttpString HTTP_URI = new HttpString("CamelHttpUri");
public static final HttpString HTTP_URL = new HttpString("CamelHttpUrl");
public static final HttpString HTTP_CHUNKED = new HttpString("CamelHttpChunked");
- public static final HttpString HTTP_SERVLET_REQUEST = new HttpString("CamelHttpServletRequest");
- public static final HttpString HTTP_SERVLET_RESPONSE = new HttpString("CamelHttpServletResponse");
public static final HttpString INTERCEPTED_ENDPOINT = new HttpString("CamelInterceptedEndpoint");
public static final HttpString INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED
diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
index 82d256b5f2d..41cd9b83b82 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
@@ -195,7 +195,9 @@ public interface Exchange extends VariableAware {
String HTTP_URI = "CamelHttpUri";
String HTTP_URL = "CamelHttpUrl";
String HTTP_CHUNKED = "CamelHttpChunked";
+ @Deprecated(since = "4.7.0")
String HTTP_SERVLET_REQUEST = "CamelHttpServletRequest";
+ @Deprecated(since = "4.7.0")
String HTTP_SERVLET_RESPONSE = "CamelHttpServletResponse";
@Metadata(label = "interceptFrom,interceptSendToEndpoint", description = "The endpoint URI that was intercepted",
diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_7.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_7.adoc
index 6db2b4b26de..d0adc9c660a 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_7.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_7.adoc
@@ -82,6 +82,27 @@ To:
</route>
----
+=== camel-jetty / camel-servlet / camel-undertow
+
+When using embedded HTTP server (consumer) then the headers `CamelHttpServletRequest` and `CamelHttpServletResponse`
+has been removed.
+
+To gain access to these then you need to use the `HttpMessage` API instead as shown below:
+
+[source,java]
+----
+ServletRequest request = exchange.getIn().getHeader(Exchange.HTTP_SERVLET_REQUEST, ServletRequest.class);
+ServletResponse request = exchange.getIn().getHeader(Exchange.HTTP_SERVLET_RESPONSE, ServletResponse.class);
+----
+
+Should be changed to:
+
+[source,java]
+----
+ServletRequest request = exchange.getMessage(HttpMessage.class).getRequest();
+ServletResponse response = exchange.getMessage(HttpMessage.class).getResponse();
+----
+
=== camel-seda / camel-disruptor
When using `InOnly` exchange pattern then the producer makes a copy of the message to be added to the queue.
diff --git a/parent/pom.xml b/parent/pom.xml
index 456ec091635..3936fe33203 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -273,7 +273,7 @@
<jcr-version>2.0</jcr-version>
<jedis-client-version>5.1.3</jedis-client-version>
<jetcd-version>0.8.2</jetcd-version>
- <jetty-version>12.0.8</jetty-version>
+ <jetty-version>12.0.10</jetty-version>
<jetty-plugin-version>${jetty-version}</jetty-plugin-version>
<jetty-runner-groupId>org.eclipse.jetty</jetty-runner-groupId>
<jettison-version>1.5.4</jettison-version>