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

oscerd pushed a commit to branch camel-4.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit fdcf67a00470783ccb93b948883b6a4c5275aff5
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Jun 10 18:23:46 2026 +0200

    CAMEL-23651: align muteException default in netty-http and undertow
    
    camel-netty-http and camel-undertow now default the muteException
    consumer option to true, aligning them with the other HTTP server
    components (camel-http, camel-jetty, camel-servlet and
    camel-platform-http). When an exchange fails processing on the
    consumer side, the HTTP response now has an empty body instead of
    returning the exception stack trace as text/plain.
    
    The default is flipped at both component and endpoint level in both
    components. In camel-undertow the Rest DSL consumer path now also
    propagates the endpoint muteException value to the
    RestUndertowHttpBinding, which previously hard-coded it to false and
    silently ignored the option in Rest DSL mode.
    
    muteException keeps taking precedence over transferException, as in
    the other HTTP server components. Routes that rely on the stack trace
    in the response body must set muteException=false explicitly.
    
    Includes new tests for the default behaviour (plain consumers and
    undertow Rest DSL), updated tests opting out explicitly, regenerated
    metadata (component JSONs, catalog, endpoint/component DSL) and a
    4.21 upgrade-guide entry.
    
    Closes #23913
---
 .../camel/catalog/components/netty-http.json       |  4 +--
 .../apache/camel/catalog/components/undertow.json  |  4 +--
 .../camel/component/netty/http/netty-http.json     |  4 +--
 .../component/netty/http/NettyHttpComponent.java   |  4 +--
 .../netty/http/NettyHttpConfiguration.java         |  4 +--
 ...ettyHttp500ErrorThrowExceptionOnServerTest.java |  2 +-
 .../http/NettyHttpMuteExceptionByDefaultTest.java} | 33 ++++++++++------------
 .../netty/http/NettyHttpTransferExceptionTest.java |  2 +-
 .../apache/camel/component/undertow/undertow.json  |  4 +--
 .../component/undertow/UndertowComponent.java      |  8 ++++--
 .../camel/component/undertow/UndertowEndpoint.java |  4 +--
 ...ava => UndertowMuteExceptionByDefaultTest.java} | 23 +++++++--------
 .../undertow/UndertowTransferExceptionTest.java    |  3 +-
 .../RestUndertowMuteExceptionByDefaultTest.java}   | 33 ++++++++++++----------
 .../ROOT/pages/camel-4x-upgrade-guide-4_18.adoc    | 25 ++++++++++++++++
 .../dsl/NettyHttpComponentBuilderFactory.java      |  2 +-
 .../dsl/UndertowComponentBuilderFactory.java       |  2 +-
 .../dsl/NettyHttpEndpointBuilderFactory.java       |  4 +--
 .../dsl/UndertowEndpointBuilderFactory.java        |  4 +--
 19 files changed, 97 insertions(+), 72 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/netty-http.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/netty-http.json
index f0cee1713118..3733a6b9ba65 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/netty-http.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/netty-http.json
@@ -35,7 +35,7 @@
     "networkInterface": { "index": 7, "kind": "property", "displayName": 
"Network Interface", "group": "common (advanced)", "label": "common,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "When using UDP then this option can be used to 
specify a network interface by its [...]
     "bridgeErrorHandler": { "index": 8, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
     "clientMode": { "index": 9, "kind": "property", "displayName": "Client 
Mode", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "If the clientMode is true, netty consumer will 
connect the address as a TCP client." },
-    "muteException": { "index": 10, "kind": "property", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "If enabled and 
an Exchange failed processing on the consumer side the response's body won't 
contain the exception's stack trace." },
+    "muteException": { "index": 10, "kind": "property", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "description": "If enabled and an 
Exchange failed processing on the consumer side the response's body won't 
contain the exception's stack trace." },
     "reconnect": { "index": 11, "kind": "property", "displayName": 
"Reconnect", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "Used only in clientMode in consumer, the 
consumer will attempt to reconnect on disconnection if t [...]
     "reconnectInterval": { "index": 12, "kind": "property", "displayName": 
"Reconnect Interval", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 10000, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "Used if reconnect and clientMode is enabled. 
The interval in milli seconds to attem [...]
     "backlog": { "index": 13, "kind": "property", "displayName": "Backlog", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "Allows to configure a backlog for netty 
consumer (server). Note the backlog is just a best effort depending [...]
@@ -144,7 +144,7 @@
     "sync": { "index": 9, "kind": "parameter", "displayName": "Sync", "group": 
"common", "label": "", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Setting to set endpoint 
as one-way (false) or request-response (true)" },
     "tcpNoDelay": { "index": 10, "kind": "parameter", "displayName": "Tcp No 
Delay", "group": "common", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": true, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Setting to improve TCP 
protocol performance" },
     "matchOnUriPrefix": { "index": 11, "kind": "parameter", "displayName": 
"Match On Uri Prefix", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Whether or not Camel 
should try to find a target consumer by matching [...]
-    "muteException": { "index": 12, "kind": "parameter", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "If enabled and an 
Exchange failed processing on the consumer side the respons [...]
+    "muteException": { "index": 12, "kind": "parameter", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "If enabled and an 
Exchange failed processing on the consumer side the response [...]
     "send503whenSuspended": { "index": 13, "kind": "parameter", "displayName": 
"Send503when Suspended", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, 
"configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Whether to send back 
HTTP status code 503 when the consumer has  [...]
     "backlog": { "index": 14, "kind": "parameter", "displayName": "Backlog", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Allows to configure a 
backlog for netty consumer (server). Note the backlog is just a best effort 
[...]
     "bossCount": { "index": 15, "kind": "parameter", "displayName": "Boss 
Count", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "When netty works on nio 
mode, it uses default bossCount parameter from Ne [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/undertow.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/undertow.json
index f1f8e37d62a4..74f0752a7161 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/undertow.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/undertow.json
@@ -26,7 +26,7 @@
   },
   "componentProperties": {
     "bridgeErrorHandler": { "index": 0, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
-    "muteException": { "index": 1, "kind": "property", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "If enabled and 
an Exchange failed processing on the consumer side the response's body won't 
contain the exception's stack trace." },
+    "muteException": { "index": 1, "kind": "property", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "description": "If enabled and an 
Exchange failed processing on the consumer side the response's body won't 
contain the exception's stack trace." },
     "lazyStartProducer": { "index": 2, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fail [...]
     "autowiredEnabled": { "index": 3, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching t [...]
     "hostOptions": { "index": 4, "kind": "property", "displayName": "Host 
Options", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": 
"org.apache.camel.component.undertow.UndertowHostOptions", "deprecated": false, 
"autowired": false, "secret": false, "description": "To configure common 
options, such as thread pools" },
@@ -60,7 +60,7 @@
     "accessLog": { "index": 2, "kind": "parameter", "displayName": "Access 
Log", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Whether or not 
the consumer should write access log" },
     "httpMethodRestrict": { "index": 3, "kind": "parameter", "displayName": 
"Http Method Restrict", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Used to only allow 
consuming if the HttpMethod matches, such as GET\/POST\/PUT etc. Multiple 
methods can be specified separated by comma." },
     "matchOnUriPrefix": { "index": 4, "kind": "parameter", "displayName": 
"Match On Uri Prefix", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether or not the consumer should try to find a target consumer by matching 
the URI prefix if no exact match is found." },
-    "muteException": { "index": 5, "kind": "parameter", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": "If 
enabled and an Exchange failed processing on the consumer side the response's 
body won't contain the exception's stack trace." },
+    "muteException": { "index": 5, "kind": "parameter", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": "If 
enabled and an Exchange failed processing on the consumer side the response's 
body won't contain the exception's stack trace." },
     "optionsEnabled": { "index": 6, "kind": "parameter", "displayName": 
"Options Enabled", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Specifies 
whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is 
turned off." },
     "transferException": { "index": 7, "kind": "parameter", "displayName": 
"Transfer Exception", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": "If 
enabled and an Exchange failed processing on the consumer side and if the 
caused Exception was send back serialized in the response as a 
application\/x-java-serialized-object content [...]
     "bridgeErrorHandler": { "index": 8, "kind": "parameter", "displayName": 
"Bridge Error Handler", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Allows for bridging the consumer to the 
Camel routing Error Handler, which mean any exceptions (if possible) occurred 
while the Camel consumer is trying to pickup incoming  [...]
diff --git 
a/components/camel-netty-http/src/generated/resources/META-INF/org/apache/camel/component/netty/http/netty-http.json
 
b/components/camel-netty-http/src/generated/resources/META-INF/org/apache/camel/component/netty/http/netty-http.json
index f0cee1713118..3733a6b9ba65 100644
--- 
a/components/camel-netty-http/src/generated/resources/META-INF/org/apache/camel/component/netty/http/netty-http.json
+++ 
b/components/camel-netty-http/src/generated/resources/META-INF/org/apache/camel/component/netty/http/netty-http.json
@@ -35,7 +35,7 @@
     "networkInterface": { "index": 7, "kind": "property", "displayName": 
"Network Interface", "group": "common (advanced)", "label": "common,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "When using UDP then this option can be used to 
specify a network interface by its [...]
     "bridgeErrorHandler": { "index": 8, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
     "clientMode": { "index": 9, "kind": "property", "displayName": "Client 
Mode", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "If the clientMode is true, netty consumer will 
connect the address as a TCP client." },
-    "muteException": { "index": 10, "kind": "property", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "If enabled and 
an Exchange failed processing on the consumer side the response's body won't 
contain the exception's stack trace." },
+    "muteException": { "index": 10, "kind": "property", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "description": "If enabled and an 
Exchange failed processing on the consumer side the response's body won't 
contain the exception's stack trace." },
     "reconnect": { "index": 11, "kind": "property", "displayName": 
"Reconnect", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "Used only in clientMode in consumer, the 
consumer will attempt to reconnect on disconnection if t [...]
     "reconnectInterval": { "index": 12, "kind": "property", "displayName": 
"Reconnect Interval", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 10000, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "Used if reconnect and clientMode is enabled. 
The interval in milli seconds to attem [...]
     "backlog": { "index": 13, "kind": "property", "displayName": "Backlog", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.netty.NettyConfiguration", "configurationField": 
"configuration", "description": "Allows to configure a backlog for netty 
consumer (server). Note the backlog is just a best effort depending [...]
@@ -144,7 +144,7 @@
     "sync": { "index": 9, "kind": "parameter", "displayName": "Sync", "group": 
"common", "label": "", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Setting to set endpoint 
as one-way (false) or request-response (true)" },
     "tcpNoDelay": { "index": 10, "kind": "parameter", "displayName": "Tcp No 
Delay", "group": "common", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": true, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Setting to improve TCP 
protocol performance" },
     "matchOnUriPrefix": { "index": 11, "kind": "parameter", "displayName": 
"Match On Uri Prefix", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Whether or not Camel 
should try to find a target consumer by matching [...]
-    "muteException": { "index": 12, "kind": "parameter", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "If enabled and an 
Exchange failed processing on the consumer side the respons [...]
+    "muteException": { "index": 12, "kind": "parameter", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "If enabled and an 
Exchange failed processing on the consumer side the response [...]
     "send503whenSuspended": { "index": 13, "kind": "parameter", "displayName": 
"Send503when Suspended", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, 
"configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Whether to send back 
HTTP status code 503 when the consumer has  [...]
     "backlog": { "index": 14, "kind": "parameter", "displayName": "Backlog", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "Allows to configure a 
backlog for netty consumer (server). Note the backlog is just a best effort 
[...]
     "bossCount": { "index": 15, "kind": "parameter", "displayName": "Boss 
Count", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1, "configurationClass": 
"org.apache.camel.component.netty.http.NettyHttpConfiguration", 
"configurationField": "configuration", "description": "When netty works on nio 
mode, it uses default bossCount parameter from Ne [...]
diff --git 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
index b1aded8fcac4..65a9506a82ac 100644
--- 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
+++ 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
@@ -74,8 +74,8 @@ public class NettyHttpComponent extends NettyComponent
     private NettyHttpSecurityConfiguration securityConfiguration;
     @Metadata(label = "security", defaultValue = "false")
     private boolean useGlobalSslContextParameters;
-    @Metadata(label = "consumer")
-    private boolean muteException;
+    @Metadata(label = "consumer", defaultValue = "true")
+    private boolean muteException = true;
 
     public NettyHttpComponent() {
         // use the http configuration and filter strategy
diff --git 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConfiguration.java
 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConfiguration.java
index f5108e049124..9a28081fd4c6 100644
--- 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConfiguration.java
+++ 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConfiguration.java
@@ -55,8 +55,8 @@ public class NettyHttpConfiguration extends 
NettyConfiguration {
     private boolean transferException;
     @UriParam(label = "advanced,security")
     private String deserializationFilter;
-    @UriParam(label = "consumer")
-    private boolean muteException;
+    @UriParam(label = "consumer", defaultValue = "true")
+    private boolean muteException = true;
     @UriParam(label = "consumer")
     private boolean matchOnUriPrefix;
     @UriParam(label = "consumer,advanced", defaultValue = "true")
diff --git 
a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttp500ErrorThrowExceptionOnServerTest.java
 
b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttp500ErrorThrowExceptionOnServerTest.java
index 940658cf9c1f..5bbc0de2d63c 100644
--- 
a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttp500ErrorThrowExceptionOnServerTest.java
+++ 
b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttp500ErrorThrowExceptionOnServerTest.java
@@ -62,7 +62,7 @@ public class NettyHttp500ErrorThrowExceptionOnServerTest 
extends BaseNettyTestSu
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("netty-http:http://0.0.0.0:{{port}}/foo";)
+                
from("netty-http:http://0.0.0.0:{{port}}/foo?muteException=false";)
                         .to("mock:input")
                         .throwException(new IllegalArgumentException("Camel 
cannot do this"));
             }
diff --git 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
 
b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpMuteExceptionByDefaultTest.java
similarity index 64%
copy from 
components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
copy to 
components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpMuteExceptionByDefaultTest.java
index 4ce054564d09..27a1f2e357f0 100644
--- 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
+++ 
b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpMuteExceptionByDefaultTest.java
@@ -14,45 +14,42 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.undertow;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
+package org.apache.camel.component.netty.http;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.hc.client5.http.classic.methods.HttpGet;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
 import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.core5.http.io.entity.EntityUtils;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class UndertowTransferExceptionTest extends BaseUndertowTest {
+public class NettyHttpMuteExceptionByDefaultTest extends BaseNettyTestSupport {
 
     @Test
-    public void getSerializedExceptionTest() throws IOException, 
ClassNotFoundException {
-        HttpGet get = new HttpGet("http://localhost:"; + getPort() + 
"/test/transfer");
-        get.addHeader("Accept", "application/x-java-serialized-object");
-
-        try (CloseableHttpClient httpClient = HttpClients.createDefault();
-             CloseableHttpResponse response = httpClient.execute(get)) {
-
-            ObjectInputStream in = new 
ObjectInputStream(response.getEntity().getContent());
-            IllegalArgumentException e = (IllegalArgumentException) 
in.readObject();
-            assertNotNull(e);
+    public void testMuteExceptionByDefault() throws Exception {
+        HttpGet get = new HttpGet("http://localhost:"; + getPort() + "/foo");
+        get.addHeader("Accept", "application/text");
+        try (CloseableHttpClient client = HttpClients.createDefault();
+             CloseableHttpResponse response = client.execute(get)) {
+            String body = EntityUtils.toString(response.getEntity(), "UTF-8");
+            assertNotNull(body);
+            assertEquals("", body);
             assertEquals(500, response.getCode());
-            assertEquals("Camel cannot do this", e.getMessage());
         }
     }
 
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
-
+            @Override
             public void configure() {
-                from("undertow:http://localhost:"; + getPort() + 
"/test/transfer?transferException=true").to("mock:input")
+                // muteException is not configured so the default (true) 
applies
+                from("netty-http:http://0.0.0.0:{{port}}/foo";)
+                        .to("mock:input")
                         .throwException(new IllegalArgumentException("Camel 
cannot do this"));
             }
         };
diff --git 
a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTransferExceptionTest.java
 
b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTransferExceptionTest.java
index 91be061ba2b0..a173b6660a93 100644
--- 
a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTransferExceptionTest.java
+++ 
b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpTransferExceptionTest.java
@@ -46,7 +46,7 @@ public class NettyHttpTransferExceptionTest extends 
BaseNettyTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                
from("netty-http:http://0.0.0.0:{{port}}/foo?transferException=true";)
+                
from("netty-http:http://0.0.0.0:{{port}}/foo?muteException=false&transferException=true";)
                         .to("mock:input")
                         .throwException(new IllegalArgumentException("Camel 
cannot do this"));
             }
diff --git 
a/components/camel-undertow/src/generated/resources/META-INF/org/apache/camel/component/undertow/undertow.json
 
b/components/camel-undertow/src/generated/resources/META-INF/org/apache/camel/component/undertow/undertow.json
index f1f8e37d62a4..74f0752a7161 100644
--- 
a/components/camel-undertow/src/generated/resources/META-INF/org/apache/camel/component/undertow/undertow.json
+++ 
b/components/camel-undertow/src/generated/resources/META-INF/org/apache/camel/component/undertow/undertow.json
@@ -26,7 +26,7 @@
   },
   "componentProperties": {
     "bridgeErrorHandler": { "index": 0, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
-    "muteException": { "index": 1, "kind": "property", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "If enabled and 
an Exchange failed processing on the consumer side the response's body won't 
contain the exception's stack trace." },
+    "muteException": { "index": 1, "kind": "property", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "description": "If enabled and an 
Exchange failed processing on the consumer side the response's body won't 
contain the exception's stack trace." },
     "lazyStartProducer": { "index": 2, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fail [...]
     "autowiredEnabled": { "index": 3, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching t [...]
     "hostOptions": { "index": 4, "kind": "property", "displayName": "Host 
Options", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": 
"org.apache.camel.component.undertow.UndertowHostOptions", "deprecated": false, 
"autowired": false, "secret": false, "description": "To configure common 
options, such as thread pools" },
@@ -60,7 +60,7 @@
     "accessLog": { "index": 2, "kind": "parameter", "displayName": "Access 
Log", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Whether or not 
the consumer should write access log" },
     "httpMethodRestrict": { "index": 3, "kind": "parameter", "displayName": 
"Http Method Restrict", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Used to only allow 
consuming if the HttpMethod matches, such as GET\/POST\/PUT etc. Multiple 
methods can be specified separated by comma." },
     "matchOnUriPrefix": { "index": 4, "kind": "parameter", "displayName": 
"Match On Uri Prefix", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether or not the consumer should try to find a target consumer by matching 
the URI prefix if no exact match is found." },
-    "muteException": { "index": 5, "kind": "parameter", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": "If 
enabled and an Exchange failed processing on the consumer side the response's 
body won't contain the exception's stack trace." },
+    "muteException": { "index": 5, "kind": "parameter", "displayName": "Mute 
Exception", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": "If 
enabled and an Exchange failed processing on the consumer side the response's 
body won't contain the exception's stack trace." },
     "optionsEnabled": { "index": 6, "kind": "parameter", "displayName": 
"Options Enabled", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Specifies 
whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is 
turned off." },
     "transferException": { "index": 7, "kind": "parameter", "displayName": 
"Transfer Exception", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": "If 
enabled and an Exchange failed processing on the consumer side and if the 
caused Exception was send back serialized in the response as a 
application\/x-java-serialized-object content [...]
     "bridgeErrorHandler": { "index": 8, "kind": "parameter", "displayName": 
"Bridge Error Handler", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Allows for bridging the consumer to the 
Camel routing Error Handler, which mean any exceptions (if possible) occurred 
while the Camel consumer is trying to pickup incoming  [...]
diff --git 
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
 
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
index 9b57bb5b6a63..67bf2ca62113 100644
--- 
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
+++ 
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
@@ -81,8 +81,8 @@ public class UndertowComponent extends DefaultComponent
     private boolean useGlobalSslContextParameters;
     @Metadata(label = "advanced")
     private UndertowHostOptions hostOptions;
-    @Metadata(label = "consumer")
-    private boolean muteException;
+    @Metadata(label = "consumer", defaultValue = "true")
+    private boolean muteException = true;
     @Metadata(label = "security")
     private Object securityConfiguration;
     @Metadata(label = "security")
@@ -271,7 +271,9 @@ public class UndertowComponent extends DefaultComponent
 
         if (!map.containsKey("undertowHttpBinding")) {
             // use the rest binding, if not using a custom http binding
-            endpoint.setUndertowHttpBinding(new 
RestUndertowHttpBinding(endpoint.isUseStreaming()));
+            UndertowHttpBinding binding = new 
RestUndertowHttpBinding(endpoint.isUseStreaming());
+            binding.setMuteException(endpoint.getMuteException());
+            endpoint.setUndertowHttpBinding(binding);
         }
 
         // configure consumer properties
diff --git 
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
 
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
index a4e1d259359b..1edcadeaf1d4 100644
--- 
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
+++ 
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
@@ -98,8 +98,8 @@ public class UndertowEndpoint extends DefaultEndpoint
     private Boolean throwExceptionOnFailure = Boolean.TRUE;
     @UriParam(label = "consumer", defaultValue = "false")
     private Boolean transferException = Boolean.FALSE;
-    @UriParam(label = "consumer", defaultValue = "false")
-    private Boolean muteException = Boolean.FALSE;
+    @UriParam(label = "consumer", defaultValue = "true")
+    private Boolean muteException = Boolean.TRUE;
     @UriParam(label = "producer", defaultValue = "true")
     private Boolean keepAlive = Boolean.TRUE;
     @UriParam(label = "producer", defaultValue = "true")
diff --git 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
 
b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowMuteExceptionByDefaultTest.java
similarity index 74%
copy from 
components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
copy to 
components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowMuteExceptionByDefaultTest.java
index 4ce054564d09..bbe93586a275 100644
--- 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
+++ 
b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowMuteExceptionByDefaultTest.java
@@ -16,34 +16,30 @@
  */
 package org.apache.camel.component.undertow;
 
-import java.io.IOException;
-import java.io.ObjectInputStream;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.hc.client5.http.classic.methods.HttpGet;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
 import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.core5.http.io.entity.EntityUtils;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class UndertowTransferExceptionTest extends BaseUndertowTest {
+public class UndertowMuteExceptionByDefaultTest extends BaseUndertowTest {
 
     @Test
-    public void getSerializedExceptionTest() throws IOException, 
ClassNotFoundException {
-        HttpGet get = new HttpGet("http://localhost:"; + getPort() + 
"/test/transfer");
-        get.addHeader("Accept", "application/x-java-serialized-object");
-
+    public void muteExceptionByDefaultTest() throws Exception {
+        HttpGet get = new HttpGet("http://localhost:"; + getPort() + 
"/test/mute");
+        get.addHeader("Accept", "application/text");
         try (CloseableHttpClient httpClient = HttpClients.createDefault();
              CloseableHttpResponse response = httpClient.execute(get)) {
 
-            ObjectInputStream in = new 
ObjectInputStream(response.getEntity().getContent());
-            IllegalArgumentException e = (IllegalArgumentException) 
in.readObject();
-            assertNotNull(e);
+            String responseString = EntityUtils.toString(response.getEntity(), 
"UTF-8");
+            assertNotNull(responseString);
+            assertEquals("", responseString);
             assertEquals(500, response.getCode());
-            assertEquals("Camel cannot do this", e.getMessage());
         }
     }
 
@@ -52,7 +48,8 @@ public class UndertowTransferExceptionTest extends 
BaseUndertowTest {
         return new RouteBuilder() {
 
             public void configure() {
-                from("undertow:http://localhost:"; + getPort() + 
"/test/transfer?transferException=true").to("mock:input")
+                // muteException is not configured so the default (true) 
applies
+                from("undertow:http://localhost:"; + getPort() + 
"/test/mute").to("mock:input")
                         .throwException(new IllegalArgumentException("Camel 
cannot do this"));
             }
         };
diff --git 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
 
b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
index 4ce054564d09..677b00591d17 100644
--- 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
+++ 
b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
@@ -52,7 +52,8 @@ public class UndertowTransferExceptionTest extends 
BaseUndertowTest {
         return new RouteBuilder() {
 
             public void configure() {
-                from("undertow:http://localhost:"; + getPort() + 
"/test/transfer?transferException=true").to("mock:input")
+                from("undertow:http://localhost:"; + getPort() + 
"/test/transfer?muteException=false&transferException=true")
+                        .to("mock:input")
                         .throwException(new IllegalArgumentException("Camel 
cannot do this"));
             }
         };
diff --git 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
 
b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowMuteExceptionByDefaultTest.java
similarity index 67%
copy from 
components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
copy to 
components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowMuteExceptionByDefaultTest.java
index 4ce054564d09..79c0457ad749 100644
--- 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowTransferExceptionTest.java
+++ 
b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowMuteExceptionByDefaultTest.java
@@ -14,45 +14,48 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.undertow;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
+package org.apache.camel.component.undertow.rest;
 
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.undertow.BaseUndertowTest;
 import org.apache.hc.client5.http.classic.methods.HttpGet;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
 import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.core5.http.io.entity.EntityUtils;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class UndertowTransferExceptionTest extends BaseUndertowTest {
+public class RestUndertowMuteExceptionByDefaultTest extends BaseUndertowTest {
 
     @Test
-    public void getSerializedExceptionTest() throws IOException, 
ClassNotFoundException {
-        HttpGet get = new HttpGet("http://localhost:"; + getPort() + 
"/test/transfer");
-        get.addHeader("Accept", "application/x-java-serialized-object");
-
+    public void muteExceptionByDefaultTest() throws Exception {
+        HttpGet get = new HttpGet("http://localhost:"; + getPort() + 
"/api/fail");
+        get.addHeader("Accept", "application/text");
         try (CloseableHttpClient httpClient = HttpClients.createDefault();
              CloseableHttpResponse response = httpClient.execute(get)) {
 
-            ObjectInputStream in = new 
ObjectInputStream(response.getEntity().getContent());
-            IllegalArgumentException e = (IllegalArgumentException) 
in.readObject();
-            assertNotNull(e);
+            String responseString = EntityUtils.toString(response.getEntity(), 
"UTF-8");
+            assertNotNull(responseString);
+            assertEquals("", responseString);
             assertEquals(500, response.getCode());
-            assertEquals("Camel cannot do this", e.getMessage());
         }
     }
 
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
-
+            @Override
             public void configure() {
-                from("undertow:http://localhost:"; + getPort() + 
"/test/transfer?transferException=true").to("mock:input")
+                
restConfiguration().component("undertow").host("localhost").port(getPort());
+
+                // muteException is not configured so the default (true) 
applies
+                rest("/api")
+                        .get("fail").to("direct:fail");
+
+                from("direct:fail")
                         .throwException(new IllegalArgumentException("Camel 
cannot do this"));
             }
         };
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc
index cf011fe04fd5..e3f5a6ba3142 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc
@@ -909,6 +909,31 @@ transport `from` and the `irc:` `to`. Allowing untrusted 
senders to drive
 `IrcConstants.IRC_SEND_TO` without such a mapping step is not the intended use
 of the component.
 
+=== camel-netty-http / camel-undertow - potential breaking change
+
+The `muteException` consumer option now defaults to `true` in 
`camel-netty-http` and
+`camel-undertow`, aligning these components with the other HTTP server 
components
+(`camel-http`, `camel-jetty`, `camel-servlet`, and `camel-platform-http`), 
which have
+been defaulting `muteException` to `true` for a long time.
+
+When an exchange fails processing on the consumer side, the HTTP response now 
has an
+empty body. Previously the response body contained the exception stack trace as
+`text/plain`.
+
+Routes that rely on the exception stack trace being present in the response 
body must
+set `muteException=false` explicitly on the endpoint or component after the 
upgrade:
+
+[source,text]
+----
+netty-http:http://0.0.0.0:8080/foo?muteException=false
+undertow:http://0.0.0.0:8080/foo?muteException=false
+----
+
+Note that `muteException` takes precedence over `transferException`, as it 
already does
+in the other HTTP server components. Routes using `transferException=true` on 
these two
+components must now also set `muteException=false` for the serialized 
exception to be
+returned in the response.
+
 == Upgrading from 4.18.1 to 4.18.2
 
 === camel-platform-http-main
diff --git 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/NettyHttpComponentBuilderFactory.java
 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/NettyHttpComponentBuilderFactory.java
index 0034c189d903..d8036cb42c42 100644
--- 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/NettyHttpComponentBuilderFactory.java
+++ 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/NettyHttpComponentBuilderFactory.java
@@ -248,7 +248,7 @@ public interface NettyHttpComponentBuilderFactory {
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Default: false
+         * Default: true
          * Group: consumer
          * 
          * @param muteException the value to set
diff --git 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/UndertowComponentBuilderFactory.java
 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/UndertowComponentBuilderFactory.java
index efe30b25302b..a315e4cc8c5b 100644
--- 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/UndertowComponentBuilderFactory.java
+++ 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/UndertowComponentBuilderFactory.java
@@ -87,7 +87,7 @@ public interface UndertowComponentBuilderFactory {
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Default: false
+         * Default: true
          * Group: consumer
          * 
          * @param muteException the value to set
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NettyHttpEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NettyHttpEndpointBuilderFactory.java
index 293361999ec5..f88757a4fce7 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NettyHttpEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NettyHttpEndpointBuilderFactory.java
@@ -323,7 +323,7 @@ public interface NettyHttpEndpointBuilderFactory {
          * 
          * The option is a: <code>boolean</code> type.
          * 
-         * Default: false
+         * Default: true
          * Group: consumer
          * 
          * @param muteException the value to set
@@ -339,7 +339,7 @@ public interface NettyHttpEndpointBuilderFactory {
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: false
+         * Default: true
          * Group: consumer
          * 
          * @param muteException the value to set
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/UndertowEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/UndertowEndpointBuilderFactory.java
index d6f43e9b7dbe..75e9ac7d010e 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/UndertowEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/UndertowEndpointBuilderFactory.java
@@ -172,7 +172,7 @@ public interface UndertowEndpointBuilderFactory {
          * 
          * The option is a: <code>java.lang.Boolean</code> type.
          * 
-         * Default: false
+         * Default: true
          * Group: consumer
          * 
          * @param muteException the value to set
@@ -189,7 +189,7 @@ public interface UndertowEndpointBuilderFactory {
          * The option will be converted to a <code>java.lang.Boolean</code>
          * type.
          * 
-         * Default: false
+         * Default: true
          * Group: consumer
          * 
          * @param muteException the value to set

Reply via email to