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 2021/11/05 13:17:41 UTC

[camel] branch main updated: CAMEL-17172: Allow to comfigure muteException on component level.

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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 3d154c9  CAMEL-17172: Allow to comfigure muteException on component level.
3d154c9 is described below

commit 3d154c937daa6eb392517a349cbb60e2253f5123
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Nov 5 14:16:32 2021 +0100

    CAMEL-17172: Allow to comfigure muteException on component level.
---
 .../camel/catalog/components/netty-http.json       |  1 +
 .../apache/camel/catalog/components/resteasy.json  |  1 +
 .../apache/camel/catalog/components/servlet.json   |  1 +
 .../apache/camel/catalog/components/undertow.json  |  2 +-
 .../camel/http/common/HttpCommonComponent.java     | 15 ++++
 .../apache/camel/component/http/HttpComponent.java |  2 +
 .../camel/component/jetty/JettyHttpComponent.java  |  2 +
 .../netty/http/NettyHttpComponentConfigurer.java   |  6 ++
 .../camel/component/netty/http/netty-http.json     |  1 +
 .../component/netty/http/NettyHttpComponent.java   | 16 ++++
 .../http/NettyHttpComponentMuteExceptionTest.java  | 62 ++++++++++++++
 .../resteasy/ResteasyComponentConfigurer.java      |  6 ++
 .../apache/camel/component/resteasy/resteasy.json  |  1 +
 .../servlet/ServletComponentConfigurer.java        |  6 ++
 .../apache/camel/component/servlet/servlet.json    |  1 +
 .../camel/component/servlet/ServletComponent.java  |  6 +-
 .../servlet/ServletComponentMuteExceptionTest.java | 68 ++++++++++++++++
 .../apache/camel/component/undertow/undertow.json  |  2 +-
 .../component/undertow/UndertowComponent.java      |  5 +-
 .../camel/component/undertow/UndertowEndpoint.java |  3 +-
 .../UndertowComponentMuteExceptionTest.java        | 84 +++++++++++++++++++
 .../dsl/NettyHttpComponentBuilderFactory.java      | 17 ++++
 .../dsl/ResteasyComponentBuilderFactory.java       | 17 ++++
 .../dsl/ServletComponentBuilderFactory.java        | 17 ++++
 .../dsl/UndertowEndpointBuilderFactory.java        | 94 +++++++++++-----------
 25 files changed, 378 insertions(+), 58 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 14d838f..39e623a 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
@@ -33,6 +33,7 @@
     "bridgeErrorHandler": { "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 occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
     "broadcast": { "kind": "property", "displayName": "Broadcast", "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": "Setting to choose Multicast over UDP" },
     "clientMode": { "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": { "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." },
     "reconnect": { "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 this is enabled" },
     "reconnectInterval": { "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 attempt reconnection" },
     "backlog": { "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 on the OS. S [...]
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/resteasy.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/resteasy.json
index 0413365..27f3883 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/resteasy.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/resteasy.json
@@ -25,6 +25,7 @@
   },
   "componentProperties": {
     "bridgeErrorHandler": { "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 occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
+    "muteException": { "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." },
     "proxyConsumersClasses": { "kind": "property", "displayName": "Proxy Consumers Classes", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy classes for consumer endpoints. Multiple classes can be separated by comma." },
     "copyHeaders": { "kind": "property", "displayName": "Copy Headers", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false, allows to only include the headers from the HTTP response (not propagating IN heade [...]
     "lazyStartProducer": { "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 during star [...]
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/servlet.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/servlet.json
index f707308..c9f49cf 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/servlet.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/servlet.json
@@ -24,6 +24,7 @@
   },
   "componentProperties": {
     "bridgeErrorHandler": { "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 occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
+    "muteException": { "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." },
     "servletName": { "kind": "property", "displayName": "Servlet Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CamelServlet", "description": "Default name of servlet to use. The default name is CamelServlet." },
     "attachmentMultipartBinding": { "kind": "property", "displayName": "Attachment Multipart Binding", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to automatic bind multipart\/form-data as attachments on the Camel Exchange. The options attachmentMultipartBinding=true and disableStreamCache=false cannot work [...]
     "fileNameExtWhitelist": { "kind": "property", "displayName": "File Name Ext Whitelist", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Whitelist of accepted filename extensions for accepting uploaded files. Multiple extensions can be separated by comma, such as txt,xml." },
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 d42154b..3ea8b14 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
@@ -44,6 +44,7 @@
     "matchOnUriPrefix": { "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": { "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." },
     "optionsEnabled": { "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": { "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 type. On  [...]
     "exceptionHandler": { "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the con [...]
     "exchangePattern": { "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut", "InOptionalOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." },
     "handlers": { "kind": "parameter", "displayName": "Handlers", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Specifies a comma-delimited set of io.undertow.server.HttpHandler instances to lookup in your Registry. These handlers are added to the Undertow handler chain (for example, to add security). Important: You can not use dif [...]
@@ -55,7 +56,6 @@
     "reuseAddresses": { "kind": "parameter", "displayName": "Reuse Addresses", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "description": "Setting to facilitate socket multiplexing" },
     "tcpNoDelay": { "kind": "parameter", "displayName": "Tcp No Delay", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "description": "Setting to improve TCP protocol performance" },
     "throwExceptionOnFailure": { "kind": "parameter", "displayName": "Throw Exception On Failure", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "description": "Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code." },
-    "transferException": { "kind": "parameter", "displayName": "Transfer Exception", "group": "producer", "label": "producer", "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 type. On  [...]
     "accessLogReceiver": { "kind": "parameter", "displayName": "Access Log Receiver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.undertow.server.handlers.accesslog.AccessLogReceiver", "deprecated": false, "autowired": false, "secret": false, "description": "Which Undertow AccessLogReceiver should be used Will use JBossLoggingAccessLogReceiver if not specified" },
     "headerFilterStrategy": { "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HeaderFilterStrategy to filter header to and from Camel message." },
     "undertowHttpBinding": { "kind": "parameter", "displayName": "Undertow Http Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.undertow.UndertowHttpBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UndertowHttpBinding to control the mapping between Camel message and undertow." },
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonComponent.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonComponent.java
index c17ab08..bba6ddd 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonComponent.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonComponent.java
@@ -29,6 +29,9 @@ public abstract class HttpCommonComponent extends HeaderFilterStrategyComponent
     protected HttpBinding httpBinding;
     @Metadata(label = "advanced", description = "To use the shared HttpConfiguration as base configuration.")
     protected HttpConfiguration httpConfiguration;
+    @Metadata(label = "consumer",
+              description = "If enabled and an Exchange failed processing on the consumer side the response's body won't contain the exception's stack trace.")
+    boolean muteException;
     @Metadata(label = "advanced",
               description = "Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object."
                             + " This is by default turned off. "
@@ -126,6 +129,18 @@ public abstract class HttpCommonComponent extends HeaderFilterStrategyComponent
         this.httpConfiguration = httpConfiguration;
     }
 
+    public boolean isMuteException() {
+        return muteException;
+    }
+
+    /**
+     * If enabled and an Exchange failed processing on the consumer side the response's body won't contain the
+     * exception's stack trace.
+     */
+    public void setMuteException(boolean muteException) {
+        this.muteException = muteException;
+    }
+
     public boolean isAllowJavaSerializedObject() {
         return allowJavaSerializedObject;
     }
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
index 02bf8e2..8554b4f 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
@@ -314,6 +314,7 @@ public class HttpComponent extends HttpCommonComponent implements RestProducerFa
         }
 
         String httpMethodRestrict = getAndRemoveParameter(parameters, "httpMethodRestrict", String.class);
+        boolean muteException = getAndRemoveParameter(parameters, "muteException", boolean.class, isMuteException());
 
         HeaderFilterStrategy headerFilterStrategy
                 = resolveAndRemoveReferenceParameter(parameters, "headerFilterStrategy", HeaderFilterStrategy.class);
@@ -364,6 +365,7 @@ public class HttpComponent extends HttpCommonComponent implements RestProducerFa
         endpoint.setSkipRequestHeaders(skipRequestHeaders);
         endpoint.setSkipResponseHeaders(skipResponseHeaders);
         endpoint.setUserAgent(userAgent);
+        endpoint.setMuteException(muteException);
 
         // configure the endpoint with the common configuration from the component
         if (getHttpConfiguration() != null) {
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 ed331d8..4daaf0f 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
@@ -185,6 +185,7 @@ public abstract class JettyHttpComponent extends HttpCommonComponent
         String proxyHost = getAndRemoveParameter(parameters, "proxyHost", String.class, getProxyHost());
         Integer proxyPort = getAndRemoveParameter(parameters, "proxyPort", Integer.class, getProxyPort());
         Boolean async = getAndRemoveParameter(parameters, "async", Boolean.class);
+        boolean muteException = getAndRemoveParameter(parameters, "muteException", boolean.class, isMuteException());
 
         // extract filterInit. parameters
         Map filterInitParameters = PropertiesHelper.extractProperties(parameters, "filterInit.");
@@ -206,6 +207,7 @@ public abstract class JettyHttpComponent extends HttpCommonComponent
         if (async != null) {
             endpoint.setAsync(async);
         }
+        endpoint.setMuteException(muteException);
 
         if (headerFilterStrategy != null) {
             endpoint.setHeaderFilterStrategy(headerFilterStrategy);
diff --git a/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/NettyHttpComponentConfigurer.java b/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/NettyHttpComponentConfigurer.java
index ca97608..bf775bb 100644
--- a/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/NettyHttpComponentConfigurer.java
+++ b/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/NettyHttpComponentConfigurer.java
@@ -23,6 +23,8 @@ public class NettyHttpComponentConfigurer extends NettyComponentConfigurer imple
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "headerfilterstrategy":
         case "headerFilterStrategy": target.setHeaderFilterStrategy(property(camelContext, org.apache.camel.spi.HeaderFilterStrategy.class, value)); return true;
+        case "muteexception":
+        case "muteException": target.setMuteException(property(camelContext, boolean.class, value)); return true;
         case "nettyhttpbinding":
         case "nettyHttpBinding": target.setNettyHttpBinding(property(camelContext, org.apache.camel.component.netty.http.NettyHttpBinding.class, value)); return true;
         case "securityconfiguration":
@@ -36,6 +38,8 @@ public class NettyHttpComponentConfigurer extends NettyComponentConfigurer imple
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "headerfilterstrategy":
         case "headerFilterStrategy": return org.apache.camel.spi.HeaderFilterStrategy.class;
+        case "muteexception":
+        case "muteException": return boolean.class;
         case "nettyhttpbinding":
         case "nettyHttpBinding": return org.apache.camel.component.netty.http.NettyHttpBinding.class;
         case "securityconfiguration":
@@ -50,6 +54,8 @@ public class NettyHttpComponentConfigurer extends NettyComponentConfigurer imple
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "headerfilterstrategy":
         case "headerFilterStrategy": return target.getHeaderFilterStrategy();
+        case "muteexception":
+        case "muteException": return target.isMuteException();
         case "nettyhttpbinding":
         case "nettyHttpBinding": return target.getNettyHttpBinding();
         case "securityconfiguration":
diff --git a/components/camel-netty-http/src/generated/resources/org/apache/camel/component/netty/http/netty-http.json b/components/camel-netty-http/src/generated/resources/org/apache/camel/component/netty/http/netty-http.json
index 14d838f..39e623a 100644
--- a/components/camel-netty-http/src/generated/resources/org/apache/camel/component/netty/http/netty-http.json
+++ b/components/camel-netty-http/src/generated/resources/org/apache/camel/component/netty/http/netty-http.json
@@ -33,6 +33,7 @@
     "bridgeErrorHandler": { "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 occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
     "broadcast": { "kind": "property", "displayName": "Broadcast", "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": "Setting to choose Multicast over UDP" },
     "clientMode": { "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": { "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." },
     "reconnect": { "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 this is enabled" },
     "reconnectInterval": { "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 attempt reconnection" },
     "backlog": { "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 on the OS. S [...]
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 d25d1f2..d188214 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,6 +74,8 @@ public class NettyHttpComponent extends NettyComponent
     private NettyHttpSecurityConfiguration securityConfiguration;
     @Metadata(label = "security", defaultValue = "false")
     private boolean useGlobalSslContextParameters;
+    @Metadata(label = "consumer")
+    private boolean muteException;
 
     public NettyHttpComponent() {
         // use the http configuration and filter strategy
@@ -95,6 +97,7 @@ public class NettyHttpComponent extends NettyComponent
 
         HeaderFilterStrategy headerFilterStrategy
                 = resolveAndRemoveReferenceParameter(parameters, "headerFilterStrategy", HeaderFilterStrategy.class);
+        boolean muteException = getAndRemoveParameter(parameters, "muteException", boolean.class, isMuteException());
 
         // merge any custom bootstrap configuration on the config
         NettyServerBootstrapConfiguration bootstrapConfiguration = resolveAndRemoveReferenceParameter(parameters,
@@ -179,6 +182,7 @@ public class NettyHttpComponent extends NettyComponent
         String addressUri = URISupport.createRemainingURI(u, parameters).toString();
 
         NettyHttpEndpoint answer = new NettyHttpEndpoint(addressUri, this, config);
+        answer.getConfiguration().setMuteException(muteException);
         setProperties(answer, parameters);
 
         // must use a copy of the binding on the endpoint to avoid sharing same
@@ -313,6 +317,18 @@ public class NettyHttpComponent extends NettyComponent
         this.useGlobalSslContextParameters = useGlobalSslContextParameters;
     }
 
+    public boolean isMuteException() {
+        return muteException;
+    }
+
+    /**
+     * If enabled and an Exchange failed processing on the consumer side the response's body won't contain the
+     * exception's stack trace.
+     */
+    public void setMuteException(boolean muteException) {
+        this.muteException = muteException;
+    }
+
     public synchronized HttpServerConsumerChannelFactory getMultiplexChannelHandler(int port) {
         HttpServerConsumerChannelFactory answer = multiplexChannelHandlers.get(port);
         if (answer == null) {
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpComponentMuteExceptionTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpComponentMuteExceptionTest.java
new file mode 100644
index 0000000..bae15fd
--- /dev/null
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpComponentMuteExceptionTest.java
@@ -0,0 +1,62 @@
+/*
+ * 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.netty.http;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.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 NettyHttpComponentMuteExceptionTest extends BaseNettyTest {
+
+    @Test
+    public void testMuteException() throws Exception {
+        try (CloseableHttpClient client = HttpClients.createDefault()) {
+            HttpGet get = new HttpGet("http://localhost:" + getPort() + "/foo");
+            get.addHeader("Accept", "application/text");
+
+            try (CloseableHttpResponse response = client.execute(get)) {
+                String body = EntityUtils.toString(response.getEntity(), "UTF-8");
+                assertNotNull(body);
+                assertEquals("", body);
+                assertEquals(500, response.getStatusLine().getStatusCode());
+            }
+        }
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                NettyHttpComponent nhc = context.getComponent("netty-http", NettyHttpComponent.class);
+                nhc.setMuteException(true);
+
+                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-resteasy/src/generated/java/org/apache/camel/component/resteasy/ResteasyComponentConfigurer.java b/components/camel-resteasy/src/generated/java/org/apache/camel/component/resteasy/ResteasyComponentConfigurer.java
index ec601f6..5540647 100644
--- a/components/camel-resteasy/src/generated/java/org/apache/camel/component/resteasy/ResteasyComponentConfigurer.java
+++ b/components/camel-resteasy/src/generated/java/org/apache/camel/component/resteasy/ResteasyComponentConfigurer.java
@@ -23,6 +23,8 @@ public class ResteasyComponentConfigurer extends HttpComponentConfigurer impleme
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
+        case "muteexception":
+        case "muteException": target.setMuteException(property(camelContext, boolean.class, value)); return true;
         case "proxyconsumersclasses":
         case "proxyConsumersClasses": target.setProxyConsumersClasses(property(camelContext, java.lang.String.class, value)); return true;
         default: return super.configure(camelContext, obj, name, value, ignoreCase);
@@ -34,6 +36,8 @@ public class ResteasyComponentConfigurer extends HttpComponentConfigurer impleme
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
+        case "muteexception":
+        case "muteException": return boolean.class;
         case "proxyconsumersclasses":
         case "proxyConsumersClasses": return java.lang.String.class;
         default: return super.getOptionType(name, ignoreCase);
@@ -46,6 +50,8 @@ public class ResteasyComponentConfigurer extends HttpComponentConfigurer impleme
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+        case "muteexception":
+        case "muteException": return target.isMuteException();
         case "proxyconsumersclasses":
         case "proxyConsumersClasses": return target.getProxyConsumersClasses();
         default: return super.getOptionValue(obj, name, ignoreCase);
diff --git a/components/camel-resteasy/src/generated/resources/org/apache/camel/component/resteasy/resteasy.json b/components/camel-resteasy/src/generated/resources/org/apache/camel/component/resteasy/resteasy.json
index 0413365..27f3883 100644
--- a/components/camel-resteasy/src/generated/resources/org/apache/camel/component/resteasy/resteasy.json
+++ b/components/camel-resteasy/src/generated/resources/org/apache/camel/component/resteasy/resteasy.json
@@ -25,6 +25,7 @@
   },
   "componentProperties": {
     "bridgeErrorHandler": { "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 occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
+    "muteException": { "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." },
     "proxyConsumersClasses": { "kind": "property", "displayName": "Proxy Consumers Classes", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy classes for consumer endpoints. Multiple classes can be separated by comma." },
     "copyHeaders": { "kind": "property", "displayName": "Copy Headers", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false, allows to only include the headers from the HTTP response (not propagating IN heade [...]
     "lazyStartProducer": { "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 during star [...]
diff --git a/components/camel-servlet/src/generated/java/org/apache/camel/component/servlet/ServletComponentConfigurer.java b/components/camel-servlet/src/generated/java/org/apache/camel/component/servlet/ServletComponentConfigurer.java
index 1be7145..f2eee26 100644
--- a/components/camel-servlet/src/generated/java/org/apache/camel/component/servlet/ServletComponentConfigurer.java
+++ b/components/camel-servlet/src/generated/java/org/apache/camel/component/servlet/ServletComponentConfigurer.java
@@ -39,6 +39,8 @@ public class ServletComponentConfigurer extends PropertyConfigurerSupport implem
         case "httpConfiguration": target.setHttpConfiguration(property(camelContext, org.apache.camel.http.common.HttpConfiguration.class, value)); return true;
         case "httpregistry":
         case "httpRegistry": target.setHttpRegistry(property(camelContext, org.apache.camel.http.common.HttpRegistry.class, value)); return true;
+        case "muteexception":
+        case "muteException": target.setMuteException(property(camelContext, boolean.class, value)); return true;
         case "servletname":
         case "servletName": target.setServletName(property(camelContext, java.lang.String.class, value)); return true;
         default: return false;
@@ -66,6 +68,8 @@ public class ServletComponentConfigurer extends PropertyConfigurerSupport implem
         case "httpConfiguration": return org.apache.camel.http.common.HttpConfiguration.class;
         case "httpregistry":
         case "httpRegistry": return org.apache.camel.http.common.HttpRegistry.class;
+        case "muteexception":
+        case "muteException": return boolean.class;
         case "servletname":
         case "servletName": return java.lang.String.class;
         default: return null;
@@ -94,6 +98,8 @@ public class ServletComponentConfigurer extends PropertyConfigurerSupport implem
         case "httpConfiguration": return target.getHttpConfiguration();
         case "httpregistry":
         case "httpRegistry": return target.getHttpRegistry();
+        case "muteexception":
+        case "muteException": return target.isMuteException();
         case "servletname":
         case "servletName": return target.getServletName();
         default: return null;
diff --git a/components/camel-servlet/src/generated/resources/org/apache/camel/component/servlet/servlet.json b/components/camel-servlet/src/generated/resources/org/apache/camel/component/servlet/servlet.json
index f707308..c9f49cf 100644
--- a/components/camel-servlet/src/generated/resources/org/apache/camel/component/servlet/servlet.json
+++ b/components/camel-servlet/src/generated/resources/org/apache/camel/component/servlet/servlet.json
@@ -24,6 +24,7 @@
   },
   "componentProperties": {
     "bridgeErrorHandler": { "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 occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
+    "muteException": { "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." },
     "servletName": { "kind": "property", "displayName": "Servlet Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CamelServlet", "description": "Default name of servlet to use. The default name is CamelServlet." },
     "attachmentMultipartBinding": { "kind": "property", "displayName": "Attachment Multipart Binding", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to automatic bind multipart\/form-data as attachments on the Camel Exchange. The options attachmentMultipartBinding=true and disableStreamCache=false cannot work [...]
     "fileNameExtWhitelist": { "kind": "property", "displayName": "File Name Ext Whitelist", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Whitelist of accepted filename extensions for accepting uploaded files. Multiple extensions can be separated by comma, such as txt,xml." },
diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java
index 4faf971..67c0a00 100644
--- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java
+++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java
@@ -76,7 +76,7 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume
         // must extract well known parameters before we create the endpoint
         Boolean throwExceptionOnFailure = getAndRemoveParameter(parameters, "throwExceptionOnFailure", Boolean.class);
         Boolean transferException = getAndRemoveParameter(parameters, "transferException", Boolean.class);
-        Boolean muteException = getAndRemoveParameter(parameters, "muteException", Boolean.class);
+        boolean muteException = getAndRemoveParameter(parameters, "muteException", boolean.class, isMuteException());
         Boolean bridgeEndpoint = getAndRemoveParameter(parameters, "bridgeEndpoint", Boolean.class);
         HttpBinding binding = resolveAndRemoveReferenceParameter(parameters, "httpBinding", HttpBinding.class);
         Boolean matchOnUriPrefix = getAndRemoveParameter(parameters, "matchOnUriPrefix", Boolean.class);
@@ -132,9 +132,7 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume
         if (transferException != null) {
             endpoint.setTransferException(transferException);
         }
-        if (muteException != null) {
-            endpoint.setMuteException(muteException);
-        }
+        endpoint.setMuteException(muteException);
         if (bridgeEndpoint != null) {
             endpoint.setBridgeEndpoint(bridgeEndpoint);
         }
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletComponentMuteExceptionTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletComponentMuteExceptionTest.java
new file mode 100644
index 0000000..bd026c0
--- /dev/null
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletComponentMuteExceptionTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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.servlet;
+
+import java.io.ByteArrayInputStream;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class ServletComponentMuteExceptionTest extends ServletCamelRouterTestSupport {
+
+    @Test
+    public void testMuteException() throws Exception {
+        WebRequest req = new PostMethodWebRequest(
+                contextUrl + "/services/mute",
+                new ByteArrayInputStream("".getBytes()), "text/plain");
+        WebResponse response = query(req, false);
+
+        assertEquals(500, response.getResponseCode());
+        assertEquals("text/plain", response.getContentType());
+        assertEquals("", response.getText());
+    }
+
+    @Test
+    public void testMuteWithTransferException() throws Exception {
+        WebRequest req = new PostMethodWebRequest(
+                contextUrl + "/services/muteWithTransfer",
+                new ByteArrayInputStream("".getBytes()), "text/plain");
+        WebResponse response = query(req, false);
+
+        assertEquals(500, response.getResponseCode());
+        assertEquals("text/plain", response.getContentType());
+        assertEquals("", response.getText());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                ServletComponent sc = context.getComponent("servlet", ServletComponent.class);
+                sc.setMuteException(true);
+
+                from("servlet:mute")
+                        .throwException(new IllegalArgumentException("Damn"));
+
+                from("servlet:muteWithTransfer?transferException=true")
+                        .throwException(new IllegalArgumentException("Damn"));
+            }
+        };
+    }
+}
diff --git a/components/camel-undertow/src/generated/resources/org/apache/camel/component/undertow/undertow.json b/components/camel-undertow/src/generated/resources/org/apache/camel/component/undertow/undertow.json
index d42154b..3ea8b14 100644
--- a/components/camel-undertow/src/generated/resources/org/apache/camel/component/undertow/undertow.json
+++ b/components/camel-undertow/src/generated/resources/org/apache/camel/component/undertow/undertow.json
@@ -44,6 +44,7 @@
     "matchOnUriPrefix": { "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": { "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." },
     "optionsEnabled": { "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": { "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 type. On  [...]
     "exceptionHandler": { "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the con [...]
     "exchangePattern": { "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut", "InOptionalOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." },
     "handlers": { "kind": "parameter", "displayName": "Handlers", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Specifies a comma-delimited set of io.undertow.server.HttpHandler instances to lookup in your Registry. These handlers are added to the Undertow handler chain (for example, to add security). Important: You can not use dif [...]
@@ -55,7 +56,6 @@
     "reuseAddresses": { "kind": "parameter", "displayName": "Reuse Addresses", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "description": "Setting to facilitate socket multiplexing" },
     "tcpNoDelay": { "kind": "parameter", "displayName": "Tcp No Delay", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "description": "Setting to improve TCP protocol performance" },
     "throwExceptionOnFailure": { "kind": "parameter", "displayName": "Throw Exception On Failure", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "description": "Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code." },
-    "transferException": { "kind": "parameter", "displayName": "Transfer Exception", "group": "producer", "label": "producer", "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 type. On  [...]
     "accessLogReceiver": { "kind": "parameter", "displayName": "Access Log Receiver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.undertow.server.handlers.accesslog.AccessLogReceiver", "deprecated": false, "autowired": false, "secret": false, "description": "Which Undertow AccessLogReceiver should be used Will use JBossLoggingAccessLogReceiver if not specified" },
     "headerFilterStrategy": { "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HeaderFilterStrategy to filter header to and from Camel message." },
     "undertowHttpBinding": { "kind": "parameter", "displayName": "Undertow Http Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.undertow.UndertowHttpBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UndertowHttpBinding to control the mapping between Camel message and undertow." },
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 079c5a8..ede2a28 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
@@ -76,11 +76,11 @@ public class UndertowComponent extends DefaultComponent
     private UndertowHttpBinding undertowHttpBinding;
     @Metadata(label = "security")
     private SSLContextParameters sslContextParameters;
-    @Metadata(label = "security", defaultValue = "false")
+    @Metadata(label = "security")
     private boolean useGlobalSslContextParameters;
     @Metadata(label = "advanced")
     private UndertowHostOptions hostOptions;
-    @Metadata(label = "consumer", defaultValue = "false")
+    @Metadata(label = "consumer")
     private boolean muteException;
     @Metadata(label = "security")
     private Object securityConfiguration;
@@ -95,7 +95,6 @@ public class UndertowComponent extends DefaultComponent
 
     public UndertowComponent(CamelContext context) {
         super(context);
-
         registerExtension(UndertowComponentVerifierExtension::new);
     }
 
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 fad7e6b..acd15e3 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
@@ -92,7 +92,7 @@ public class UndertowEndpoint extends DefaultEndpoint implements AsyncEndpoint,
     private Boolean accessLog = Boolean.FALSE;
     @UriParam(label = "producer", defaultValue = "true")
     private Boolean throwExceptionOnFailure = Boolean.TRUE;
-    @UriParam(label = "producer", defaultValue = "false")
+    @UriParam(label = "consumer", defaultValue = "false")
     private Boolean transferException = Boolean.FALSE;
     @UriParam(label = "consumer", defaultValue = "false")
     private Boolean muteException = Boolean.FALSE;
@@ -277,7 +277,6 @@ public class UndertowEndpoint extends DefaultEndpoint implements AsyncEndpoint,
      * exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception
      * is required to be serialized. This is by default turned off. If you enable this then be aware that Java will
      * deserialize the incoming data from the request to Java and that can be a potential security risk.
-     *
      */
     public void setTransferException(Boolean transferException) {
         this.transferException = transferException;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentMuteExceptionTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentMuteExceptionTest.java
new file mode 100644
index 0000000..e410991
--- /dev/null
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentMuteExceptionTest.java
@@ -0,0 +1,84 @@
+/*
+ * 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.undertow;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.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 UndertowComponentMuteExceptionTest extends BaseUndertowTest {
+
+    @Test
+    public void muteExceptionTest() throws Exception {
+        CloseableHttpClient client = HttpClients.createDefault();
+
+        HttpGet get = new HttpGet("http://localhost:" + getPort() + "/test/mute");
+        get.addHeader("Accept", "application/text");
+        HttpResponse response = client.execute(get);
+
+        String responseString = EntityUtils.toString(response.getEntity(), "UTF-8");
+        assertNotNull(responseString);
+        assertEquals("", responseString);
+        assertEquals(500, response.getStatusLine().getStatusCode());
+
+        client.close();
+    }
+
+    @Test
+    public void muteExceptionWithTransferExceptionTest() throws Exception {
+        CloseableHttpClient client = HttpClients.createDefault();
+
+        HttpGet get = new HttpGet("http://localhost:" + getPort() + "/test/muteWithTransfer");
+        get.addHeader("Accept", "application/text");
+
+        HttpResponse response = client.execute(get);
+
+        String responseString = EntityUtils.toString(response.getEntity(), "UTF-8");
+        assertNotNull(responseString);
+        assertEquals("", responseString);
+
+        assertEquals(500, response.getStatusLine().getStatusCode());
+
+        client.close();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+
+            public void configure() {
+                UndertowComponent uc = context.getComponent("undertow", UndertowComponent.class);
+                uc.setMuteException(true);
+
+                from("undertow:http://localhost:" + getPort() + "/test/mute").to("mock:input")
+                        .throwException(new IllegalArgumentException("Camel cannot do this"));
+
+                from("undertow:http://localhost:" + getPort()
+                     + "/test/muteWithTransfer?transferException=true").to("mock:input")
+                             .throwException(new IllegalArgumentException("Camel cannot do this"));
+            }
+        };
+    }
+
+}
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/NettyHttpComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/NettyHttpComponentBuilderFactory.java
index d02627d..37f4212 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/NettyHttpComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/NettyHttpComponentBuilderFactory.java
@@ -220,6 +220,22 @@ public interface NettyHttpComponentBuilderFactory {
             return this;
         }
         /**
+         * If enabled and an Exchange failed processing on the consumer side the
+         * response's body won't contain the exception's stack trace.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param muteException the value to set
+         * @return the dsl builder
+         */
+        default NettyHttpComponentBuilder muteException(boolean muteException) {
+            doSetProperty("muteException", muteException);
+            return this;
+        }
+        /**
          * Used only in clientMode in consumer, the consumer will attempt to
          * reconnect on disconnection if this is enabled.
          * 
@@ -1415,6 +1431,7 @@ public interface NettyHttpComponentBuilderFactory {
             case "bridgeErrorHandler": ((NettyHttpComponent) component).setBridgeErrorHandler((boolean) value); return true;
             case "broadcast": getOrCreateConfiguration((NettyHttpComponent) component).setBroadcast((boolean) value); return true;
             case "clientMode": getOrCreateConfiguration((NettyHttpComponent) component).setClientMode((boolean) value); return true;
+            case "muteException": ((NettyHttpComponent) component).setMuteException((boolean) value); return true;
             case "reconnect": getOrCreateConfiguration((NettyHttpComponent) component).setReconnect((boolean) value); return true;
             case "reconnectInterval": getOrCreateConfiguration((NettyHttpComponent) component).setReconnectInterval((int) value); return true;
             case "backlog": getOrCreateConfiguration((NettyHttpComponent) component).setBacklog((int) value); return true;
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ResteasyComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ResteasyComponentBuilderFactory.java
index 3e9973a..21e7dc1 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ResteasyComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ResteasyComponentBuilderFactory.java
@@ -73,6 +73,22 @@ public interface ResteasyComponentBuilderFactory {
             return this;
         }
         /**
+         * If enabled and an Exchange failed processing on the consumer side the
+         * response's body won't contain the exception's stack trace.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param muteException the value to set
+         * @return the dsl builder
+         */
+        default ResteasyComponentBuilder muteException(boolean muteException) {
+            doSetProperty("muteException", muteException);
+            return this;
+        }
+        /**
          * Proxy classes for consumer endpoints. Multiple classes can be
          * separated by comma.
          * 
@@ -376,6 +392,7 @@ public interface ResteasyComponentBuilderFactory {
                 Object value) {
             switch (name) {
             case "bridgeErrorHandler": ((ResteasyComponent) component).setBridgeErrorHandler((boolean) value); return true;
+            case "muteException": ((ResteasyComponent) component).setMuteException((boolean) value); return true;
             case "proxyConsumersClasses": ((ResteasyComponent) component).setProxyConsumersClasses((java.lang.String) value); return true;
             case "copyHeaders": ((ResteasyComponent) component).setCopyHeaders((boolean) value); return true;
             case "lazyStartProducer": ((ResteasyComponent) component).setLazyStartProducer((boolean) value); return true;
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ServletComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ServletComponentBuilderFactory.java
index 5a30be7..3508191 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ServletComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ServletComponentBuilderFactory.java
@@ -73,6 +73,22 @@ public interface ServletComponentBuilderFactory {
             return this;
         }
         /**
+         * If enabled and an Exchange failed processing on the consumer side the
+         * response's body won't contain the exception's stack trace.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param muteException the value to set
+         * @return the dsl builder
+         */
+        default ServletComponentBuilder muteException(boolean muteException) {
+            doSetProperty("muteException", muteException);
+            return this;
+        }
+        /**
          * Default name of servlet to use. The default name is CamelServlet.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
@@ -253,6 +269,7 @@ public interface ServletComponentBuilderFactory {
                 Object value) {
             switch (name) {
             case "bridgeErrorHandler": ((ServletComponent) component).setBridgeErrorHandler((boolean) value); return true;
+            case "muteException": ((ServletComponent) component).setMuteException((boolean) value); return true;
             case "servletName": ((ServletComponent) component).setServletName((java.lang.String) value); return true;
             case "attachmentMultipartBinding": ((ServletComponent) component).setAttachmentMultipartBinding((boolean) value); return true;
             case "fileNameExtWhitelist": ((ServletComponent) component).setFileNameExtWhitelist((java.lang.String) value); return true;
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/UndertowEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/UndertowEndpointBuilderFactory.java
index 8a29d3c..71514bf 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/UndertowEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/UndertowEndpointBuilderFactory.java
@@ -288,6 +288,53 @@ public interface UndertowEndpointBuilderFactory {
             return this;
         }
         /**
+         * 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 type. On the producer
+         * side the exception will be deserialized and thrown as is instead of
+         * the HttpOperationFailedException. The caused exception is required to
+         * be serialized. This is by default turned off. If you enable this then
+         * be aware that Java will deserialize the incoming data from the
+         * request to Java and that can be a potential security risk.
+         * 
+         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param transferException the value to set
+         * @return the dsl builder
+         */
+        default UndertowEndpointConsumerBuilder transferException(
+                Boolean transferException) {
+            doSetProperty("transferException", transferException);
+            return this;
+        }
+        /**
+         * 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 type. On the producer
+         * side the exception will be deserialized and thrown as is instead of
+         * the HttpOperationFailedException. The caused exception is required to
+         * be serialized. This is by default turned off. If you enable this then
+         * be aware that Java will deserialize the incoming data from the
+         * request to Java and that can be a potential security risk.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param transferException the value to set
+         * @return the dsl builder
+         */
+        default UndertowEndpointConsumerBuilder transferException(
+                String transferException) {
+            doSetProperty("transferException", transferException);
+            return this;
+        }
+        /**
          * Configuration used by UndertowSecurityProvider. Comma separated list
          * of allowed roles.
          * 
@@ -1027,53 +1074,6 @@ public interface UndertowEndpointBuilderFactory {
             return this;
         }
         /**
-         * 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 type. On the producer
-         * side the exception will be deserialized and thrown as is instead of
-         * the HttpOperationFailedException. The caused exception is required to
-         * be serialized. This is by default turned off. If you enable this then
-         * be aware that Java will deserialize the incoming data from the
-         * request to Java and that can be a potential security risk.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param transferException the value to set
-         * @return the dsl builder
-         */
-        default UndertowEndpointProducerBuilder transferException(
-                Boolean transferException) {
-            doSetProperty("transferException", transferException);
-            return this;
-        }
-        /**
-         * 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 type. On the producer
-         * side the exception will be deserialized and thrown as is instead of
-         * the HttpOperationFailedException. The caused exception is required to
-         * be serialized. This is by default turned off. If you enable this then
-         * be aware that Java will deserialize the incoming data from the
-         * request to Java and that can be a potential security risk.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param transferException the value to set
-         * @return the dsl builder
-         */
-        default UndertowEndpointProducerBuilder transferException(
-                String transferException) {
-            doSetProperty("transferException", transferException);
-            return this;
-        }
-        /**
          * Configuration used by UndertowSecurityProvider. Comma separated list
          * of allowed roles.
          *