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

Croway 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 3c99874122e0 CAMEL-24478: camel-grpc - add a muteException consumer 
option (#25839)
3c99874122e0 is described below

commit 3c99874122e0c4dbad655a1e32bbcaf48cee1e67
Author: Andrea Cosentino <[email protected]>
AuthorDate: Fri Aug 28 11:11:05 2026 +0200

    CAMEL-24478: camel-grpc - add a muteException consumer option (#25839)
    
    * CAMEL-24478: camel-grpc - add a muteException consumer option
    
    GrpcMethodHandler built the error status with
    Status.INTERNAL.withDescription(exchange.getException().getMessage()). The
    description IS transmitted to the client - unlike the cause attached next to
    it, which the existing comment notes stays local - so a route failure handed
    the caller the exception's message.
    
    The http consumers gained a muteException option defaulting to true in
    CAMEL-23651; camel-grpc had none. Added on GrpcConfiguration with the same
    default, replacing only the description; the status code is unchanged.
    
    GrpcRequestPropagationStreamObserver.onError is deliberately untouched: it
    forwards a Throwable the client itself sent, not route internals.
    
    Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
    
    * CAMEL-24478: Regenerate YAML DSL schema
    
    ---------
    
    Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
    Co-authored-by: Croway <[email protected]>
---
 .../org/apache/camel/catalog/components/grpc.json  | 53 +++++++++++-----------
 .../component/grpc/GrpcEndpointConfigurer.java     |  6 +++
 .../component/grpc/GrpcEndpointUriFactory.java     |  3 +-
 .../org/apache/camel/component/grpc/grpc.json      | 53 +++++++++++-----------
 .../camel/component/grpc/GrpcConfiguration.java    | 15 ++++++
 .../component/grpc/server/GrpcMethodHandler.java   |  8 +++-
 .../component/grpc/GrpcConsumerExceptionTest.java  | 50 ++++++++++++++++++--
 .../ROOT/pages/camel-4x-upgrade-guide-4_23.adoc    | 20 ++++++++
 .../endpoint/dsl/GrpcEndpointBuilderFactory.java   | 34 ++++++++++++++
 .../generated/resources/schema/camelYamlDsl.json   |  9 ----
 10 files changed, 184 insertions(+), 67 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/grpc.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/grpc.json
index 79708afb7a1d..fcbf8a835e78 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/grpc.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/grpc.json
@@ -54,31 +54,32 @@
     "maxInboundMetadataSize": { "index": 16, "kind": "parameter", 
"displayName": "Max Inbound Metadata Size", "group": "consumer", "label": 
"consumer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 8192, 
"configurationClass": "org.apache.camel.component.grpc.GrpcConfiguration", 
"configurationField": "configuration", "description": "Sets the maximum size of 
metadata allowed to be received. The default is  [...]
     "maxRstFramesPerWindow": { "index": 17, "kind": "parameter", 
"displayName": "Max Rst Frames Per Window", "group": "consumer", "label": 
"consumer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, 
"configurationClass": "org.apache.camel.component.grpc.GrpcConfiguration", 
"configurationField": "configuration", "description": "Limits the rate of 
incoming RST_STREAM frames per connection to maxRstFramesP [...]
     "maxRstPeriodSeconds": { "index": 18, "kind": "parameter", "displayName": 
"Max Rst Period Seconds", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 0, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Limits the rate of incoming RST_STREAM frames 
per maxRstPeriodSeconds. This option [...]
-    "permitKeepAliveTime": { "index": 19, "kind": "parameter", "displayName": 
"Permit Keep Alive Time", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 300000, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets the most aggressive keep-alive time in 
milliseconds that clients are pe [...]
-    "permitKeepAliveWithoutCalls": { "index": 20, "kind": "parameter", 
"displayName": "Permit Keep Alive Without Calls", "group": "consumer", "label": 
"consumer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets whether to allow clients to send 
keep-alive HTTP\/ 2 [...]
-    "routeControlledStreamObserver": { "index": 21, "kind": "parameter", 
"displayName": "Route Controlled Stream Observer", "group": "consumer", 
"label": "consumer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Lets the route to take control over stream 
observer. I [...]
-    "bridgeErrorHandler": { "index": 22, "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 [...]
-    "exceptionHandler": { "index": 23, "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 de [...]
-    "exchangePattern": { "index": 24, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "enum", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
-    "autoDiscoverClientInterceptors": { "index": 25, "kind": "parameter", 
"displayName": "Auto Discover Client Interceptors", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Setting the autoDiscoverClientInterceptors 
mechanism, [...]
-    "inheritExchangePropertiesForReplies": { "index": 26, "kind": "parameter", 
"displayName": "Inherit Exchange Properties For Replies", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Copies exchange properties from original  [...]
-    "method": { "index": 27, "kind": "parameter", "displayName": "Method", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "gRPC method name" },
-    "producerStrategy": { "index": 28, "kind": "parameter", "displayName": 
"Producer Strategy", "group": "producer", "label": "producer", "required": 
false, "type": "enum", "javaType": 
"org.apache.camel.component.grpc.GrpcProducerStrategy", "enum": [ "SIMPLE", 
"STREAMING" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "SIMPLE", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Th [...]
-    "streamRepliesTo": { "index": 29, "kind": "parameter", "displayName": 
"Stream Replies To", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "When using STREAMING client mode, it indicates 
the endpoint where responses should be forwarded." },
-    "toRouteControlledStreamObserver": { "index": 30, "kind": "parameter", 
"displayName": "To Route Controlled Stream Observer", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Expects that exchange property 
GrpcConstants.GRPC [...]
-    "userAgent": { "index": 31, "kind": "parameter", "displayName": "User 
Agent", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The user agent header passed to the server" },
-    "lazyStartProducer": { "index": 32, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "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 produ [...]
-    "synchronous": { "index": 33, "kind": "parameter", "displayName": 
"Synchronous", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets whether synchronous processing should be 
strictly used" },
-    "authenticationType": { "index": 34, "kind": "parameter", "displayName": 
"Authentication Type", "group": "security", "label": "security", "required": 
false, "type": "enum", "javaType": 
"org.apache.camel.component.grpc.GrpcAuthType", "enum": [ "NONE", "GOOGLE", 
"JWT" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "NONE", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Authen [...]
-    "jwtAlgorithm": { "index": 35, "kind": "parameter", "displayName": "Jwt 
Algorithm", "group": "security", "label": "security", "required": false, 
"type": "enum", "javaType": 
"org.apache.camel.component.grpc.auth.jwt.JwtAlgorithm", "enum": [ "HMAC256", 
"HMAC384", "HMAC512", "RSA256", "RSA384", "RSA512" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "HMAC256", 
"configurationClass": "org.apache.camel.component.grpc.GrpcConfiguration", 
"configurationField": " [...]
-    "jwtIssuer": { "index": 36, "kind": "parameter", "displayName": "Jwt 
Issuer", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token issuer" },
-    "jwtSecret": { "index": 37, "kind": "parameter", "displayName": "Jwt 
Secret", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token secret" },
-    "jwtSubject": { "index": 38, "kind": "parameter", "displayName": "Jwt 
Subject", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token subject" },
-    "keyCertChainResource": { "index": 39, "kind": "parameter", "displayName": 
"Key Cert Chain Resource", "group": "security", "label": "security", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The X.509 certificate chain file r [...]
-    "keyPassword": { "index": 40, "kind": "parameter", "displayName": "Key 
Password", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The PKCS#8 private key file password" },
-    "keyResource": { "index": 41, "kind": "parameter", "displayName": "Key 
Resource", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, 
"supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The PKCS#8 private key file resource in PEM 
format link" },
-    "negotiationType": { "index": 42, "kind": "parameter", "displayName": 
"Negotiation Type", "group": "security", "label": "security", "required": 
false, "type": "enum", "javaType": "io.grpc.netty.NegotiationType", "enum": [ 
"PLAINTEXT", "TLS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "PLAINTEXT", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Identifies the security neg [...]
-    "serviceAccountResource": { "index": 43, "kind": "parameter", 
"displayName": "Service Account Resource", "group": "security", "label": 
"security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Service Account key file in JSO [...]
-    "trustCertCollectionResource": { "index": 44, "kind": "parameter", 
"displayName": "Trust Cert Collection Resource", "group": "security", "label": 
"security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The trusted certific [...]
+    "muteException": { "index": 19, "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.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "If enabled and an Exchange failed processing 
on the consumer side the status description  [...]
+    "permitKeepAliveTime": { "index": 20, "kind": "parameter", "displayName": 
"Permit Keep Alive Time", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 300000, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets the most aggressive keep-alive time in 
milliseconds that clients are pe [...]
+    "permitKeepAliveWithoutCalls": { "index": 21, "kind": "parameter", 
"displayName": "Permit Keep Alive Without Calls", "group": "consumer", "label": 
"consumer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets whether to allow clients to send 
keep-alive HTTP\/ 2 [...]
+    "routeControlledStreamObserver": { "index": 22, "kind": "parameter", 
"displayName": "Route Controlled Stream Observer", "group": "consumer", 
"label": "consumer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Lets the route to take control over stream 
observer. I [...]
+    "bridgeErrorHandler": { "index": 23, "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 [...]
+    "exceptionHandler": { "index": 24, "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 de [...]
+    "exchangePattern": { "index": 25, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "enum", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
+    "autoDiscoverClientInterceptors": { "index": 26, "kind": "parameter", 
"displayName": "Auto Discover Client Interceptors", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Setting the autoDiscoverClientInterceptors 
mechanism, [...]
+    "inheritExchangePropertiesForReplies": { "index": 27, "kind": "parameter", 
"displayName": "Inherit Exchange Properties For Replies", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Copies exchange properties from original  [...]
+    "method": { "index": 28, "kind": "parameter", "displayName": "Method", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "gRPC method name" },
+    "producerStrategy": { "index": 29, "kind": "parameter", "displayName": 
"Producer Strategy", "group": "producer", "label": "producer", "required": 
false, "type": "enum", "javaType": 
"org.apache.camel.component.grpc.GrpcProducerStrategy", "enum": [ "SIMPLE", 
"STREAMING" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "SIMPLE", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Th [...]
+    "streamRepliesTo": { "index": 30, "kind": "parameter", "displayName": 
"Stream Replies To", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "When using STREAMING client mode, it indicates 
the endpoint where responses should be forwarded." },
+    "toRouteControlledStreamObserver": { "index": 31, "kind": "parameter", 
"displayName": "To Route Controlled Stream Observer", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Expects that exchange property 
GrpcConstants.GRPC [...]
+    "userAgent": { "index": 32, "kind": "parameter", "displayName": "User 
Agent", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The user agent header passed to the server" },
+    "lazyStartProducer": { "index": 33, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "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 produ [...]
+    "synchronous": { "index": 34, "kind": "parameter", "displayName": 
"Synchronous", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets whether synchronous processing should be 
strictly used" },
+    "authenticationType": { "index": 35, "kind": "parameter", "displayName": 
"Authentication Type", "group": "security", "label": "security", "required": 
false, "type": "enum", "javaType": 
"org.apache.camel.component.grpc.GrpcAuthType", "enum": [ "NONE", "GOOGLE", 
"JWT" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "NONE", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Authen [...]
+    "jwtAlgorithm": { "index": 36, "kind": "parameter", "displayName": "Jwt 
Algorithm", "group": "security", "label": "security", "required": false, 
"type": "enum", "javaType": 
"org.apache.camel.component.grpc.auth.jwt.JwtAlgorithm", "enum": [ "HMAC256", 
"HMAC384", "HMAC512", "RSA256", "RSA384", "RSA512" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "HMAC256", 
"configurationClass": "org.apache.camel.component.grpc.GrpcConfiguration", 
"configurationField": " [...]
+    "jwtIssuer": { "index": 37, "kind": "parameter", "displayName": "Jwt 
Issuer", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token issuer" },
+    "jwtSecret": { "index": 38, "kind": "parameter", "displayName": "Jwt 
Secret", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token secret" },
+    "jwtSubject": { "index": 39, "kind": "parameter", "displayName": "Jwt 
Subject", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token subject" },
+    "keyCertChainResource": { "index": 40, "kind": "parameter", "displayName": 
"Key Cert Chain Resource", "group": "security", "label": "security", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The X.509 certificate chain file r [...]
+    "keyPassword": { "index": 41, "kind": "parameter", "displayName": "Key 
Password", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The PKCS#8 private key file password" },
+    "keyResource": { "index": 42, "kind": "parameter", "displayName": "Key 
Resource", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, 
"supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The PKCS#8 private key file resource in PEM 
format link" },
+    "negotiationType": { "index": 43, "kind": "parameter", "displayName": 
"Negotiation Type", "group": "security", "label": "security", "required": 
false, "type": "enum", "javaType": "io.grpc.netty.NegotiationType", "enum": [ 
"PLAINTEXT", "TLS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "PLAINTEXT", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Identifies the security neg [...]
+    "serviceAccountResource": { "index": 44, "kind": "parameter", 
"displayName": "Service Account Resource", "group": "security", "label": 
"security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Service Account key file in JSO [...]
+    "trustCertCollectionResource": { "index": 45, "kind": "parameter", 
"displayName": "Trust Cert Collection Resource", "group": "security", "label": 
"security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The trusted certific [...]
   }
 }
diff --git 
a/components/camel-grpc/src/generated/java/org/apache/camel/component/grpc/GrpcEndpointConfigurer.java
 
b/components/camel-grpc/src/generated/java/org/apache/camel/component/grpc/GrpcEndpointConfigurer.java
index 8341a2a1812c..637bddc7970b 100644
--- 
a/components/camel-grpc/src/generated/java/org/apache/camel/component/grpc/GrpcEndpointConfigurer.java
+++ 
b/components/camel-grpc/src/generated/java/org/apache/camel/component/grpc/GrpcEndpointConfigurer.java
@@ -84,6 +84,8 @@ public class GrpcEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "maxrstperiodseconds":
         case "maxRstPeriodSeconds": 
target.getConfiguration().setMaxRstPeriodSeconds(property(camelContext, 
int.class, value)); return true;
         case "method": 
target.getConfiguration().setMethod(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "muteexception":
+        case "muteException": 
target.getConfiguration().setMuteException(property(camelContext, 
boolean.class, value)); return true;
         case "negotiationtype":
         case "negotiationType": 
target.getConfiguration().setNegotiationType(property(camelContext, 
io.grpc.netty.NegotiationType.class, value)); return true;
         case "permitkeepalivetime":
@@ -173,6 +175,8 @@ public class GrpcEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "maxrstperiodseconds":
         case "maxRstPeriodSeconds": return int.class;
         case "method": return java.lang.String.class;
+        case "muteexception":
+        case "muteException": return boolean.class;
         case "negotiationtype":
         case "negotiationType": return io.grpc.netty.NegotiationType.class;
         case "permitkeepalivetime":
@@ -263,6 +267,8 @@ public class GrpcEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "maxrstperiodseconds":
         case "maxRstPeriodSeconds": return 
target.getConfiguration().getMaxRstPeriodSeconds();
         case "method": return target.getConfiguration().getMethod();
+        case "muteexception":
+        case "muteException": return 
target.getConfiguration().isMuteException();
         case "negotiationtype":
         case "negotiationType": return 
target.getConfiguration().getNegotiationType();
         case "permitkeepalivetime":
diff --git 
a/components/camel-grpc/src/generated/java/org/apache/camel/component/grpc/GrpcEndpointUriFactory.java
 
b/components/camel-grpc/src/generated/java/org/apache/camel/component/grpc/GrpcEndpointUriFactory.java
index 7d586f7e94d8..6d2a8718e05f 100644
--- 
a/components/camel-grpc/src/generated/java/org/apache/camel/component/grpc/GrpcEndpointUriFactory.java
+++ 
b/components/camel-grpc/src/generated/java/org/apache/camel/component/grpc/GrpcEndpointUriFactory.java
@@ -24,7 +24,7 @@ public class GrpcEndpointUriFactory extends 
org.apache.camel.support.component.E
     private static final Set<String> ENDPOINT_IDENTITY_PROPERTY_NAMES;
     private static final Map<String, String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(45);
+        Set<String> props = new HashSet<>(46);
         props.add("authenticationType");
         props.add("autoDiscoverClientInterceptors");
         props.add("autoDiscoverServerInterceptors");
@@ -57,6 +57,7 @@ public class GrpcEndpointUriFactory extends 
org.apache.camel.support.component.E
         props.add("maxRstFramesPerWindow");
         props.add("maxRstPeriodSeconds");
         props.add("method");
+        props.add("muteException");
         props.add("negotiationType");
         props.add("permitKeepAliveTime");
         props.add("permitKeepAliveWithoutCalls");
diff --git 
a/components/camel-grpc/src/generated/resources/META-INF/org/apache/camel/component/grpc/grpc.json
 
b/components/camel-grpc/src/generated/resources/META-INF/org/apache/camel/component/grpc/grpc.json
index 79708afb7a1d..fcbf8a835e78 100644
--- 
a/components/camel-grpc/src/generated/resources/META-INF/org/apache/camel/component/grpc/grpc.json
+++ 
b/components/camel-grpc/src/generated/resources/META-INF/org/apache/camel/component/grpc/grpc.json
@@ -54,31 +54,32 @@
     "maxInboundMetadataSize": { "index": 16, "kind": "parameter", 
"displayName": "Max Inbound Metadata Size", "group": "consumer", "label": 
"consumer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 8192, 
"configurationClass": "org.apache.camel.component.grpc.GrpcConfiguration", 
"configurationField": "configuration", "description": "Sets the maximum size of 
metadata allowed to be received. The default is  [...]
     "maxRstFramesPerWindow": { "index": 17, "kind": "parameter", 
"displayName": "Max Rst Frames Per Window", "group": "consumer", "label": 
"consumer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, 
"configurationClass": "org.apache.camel.component.grpc.GrpcConfiguration", 
"configurationField": "configuration", "description": "Limits the rate of 
incoming RST_STREAM frames per connection to maxRstFramesP [...]
     "maxRstPeriodSeconds": { "index": 18, "kind": "parameter", "displayName": 
"Max Rst Period Seconds", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 0, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Limits the rate of incoming RST_STREAM frames 
per maxRstPeriodSeconds. This option [...]
-    "permitKeepAliveTime": { "index": 19, "kind": "parameter", "displayName": 
"Permit Keep Alive Time", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 300000, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets the most aggressive keep-alive time in 
milliseconds that clients are pe [...]
-    "permitKeepAliveWithoutCalls": { "index": 20, "kind": "parameter", 
"displayName": "Permit Keep Alive Without Calls", "group": "consumer", "label": 
"consumer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets whether to allow clients to send 
keep-alive HTTP\/ 2 [...]
-    "routeControlledStreamObserver": { "index": 21, "kind": "parameter", 
"displayName": "Route Controlled Stream Observer", "group": "consumer", 
"label": "consumer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Lets the route to take control over stream 
observer. I [...]
-    "bridgeErrorHandler": { "index": 22, "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 [...]
-    "exceptionHandler": { "index": 23, "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 de [...]
-    "exchangePattern": { "index": 24, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "enum", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
-    "autoDiscoverClientInterceptors": { "index": 25, "kind": "parameter", 
"displayName": "Auto Discover Client Interceptors", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Setting the autoDiscoverClientInterceptors 
mechanism, [...]
-    "inheritExchangePropertiesForReplies": { "index": 26, "kind": "parameter", 
"displayName": "Inherit Exchange Properties For Replies", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Copies exchange properties from original  [...]
-    "method": { "index": 27, "kind": "parameter", "displayName": "Method", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "gRPC method name" },
-    "producerStrategy": { "index": 28, "kind": "parameter", "displayName": 
"Producer Strategy", "group": "producer", "label": "producer", "required": 
false, "type": "enum", "javaType": 
"org.apache.camel.component.grpc.GrpcProducerStrategy", "enum": [ "SIMPLE", 
"STREAMING" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "SIMPLE", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Th [...]
-    "streamRepliesTo": { "index": 29, "kind": "parameter", "displayName": 
"Stream Replies To", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "When using STREAMING client mode, it indicates 
the endpoint where responses should be forwarded." },
-    "toRouteControlledStreamObserver": { "index": 30, "kind": "parameter", 
"displayName": "To Route Controlled Stream Observer", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Expects that exchange property 
GrpcConstants.GRPC [...]
-    "userAgent": { "index": 31, "kind": "parameter", "displayName": "User 
Agent", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The user agent header passed to the server" },
-    "lazyStartProducer": { "index": 32, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "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 produ [...]
-    "synchronous": { "index": 33, "kind": "parameter", "displayName": 
"Synchronous", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets whether synchronous processing should be 
strictly used" },
-    "authenticationType": { "index": 34, "kind": "parameter", "displayName": 
"Authentication Type", "group": "security", "label": "security", "required": 
false, "type": "enum", "javaType": 
"org.apache.camel.component.grpc.GrpcAuthType", "enum": [ "NONE", "GOOGLE", 
"JWT" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "NONE", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Authen [...]
-    "jwtAlgorithm": { "index": 35, "kind": "parameter", "displayName": "Jwt 
Algorithm", "group": "security", "label": "security", "required": false, 
"type": "enum", "javaType": 
"org.apache.camel.component.grpc.auth.jwt.JwtAlgorithm", "enum": [ "HMAC256", 
"HMAC384", "HMAC512", "RSA256", "RSA384", "RSA512" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "HMAC256", 
"configurationClass": "org.apache.camel.component.grpc.GrpcConfiguration", 
"configurationField": " [...]
-    "jwtIssuer": { "index": 36, "kind": "parameter", "displayName": "Jwt 
Issuer", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token issuer" },
-    "jwtSecret": { "index": 37, "kind": "parameter", "displayName": "Jwt 
Secret", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token secret" },
-    "jwtSubject": { "index": 38, "kind": "parameter", "displayName": "Jwt 
Subject", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token subject" },
-    "keyCertChainResource": { "index": 39, "kind": "parameter", "displayName": 
"Key Cert Chain Resource", "group": "security", "label": "security", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The X.509 certificate chain file r [...]
-    "keyPassword": { "index": 40, "kind": "parameter", "displayName": "Key 
Password", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The PKCS#8 private key file password" },
-    "keyResource": { "index": 41, "kind": "parameter", "displayName": "Key 
Resource", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, 
"supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The PKCS#8 private key file resource in PEM 
format link" },
-    "negotiationType": { "index": 42, "kind": "parameter", "displayName": 
"Negotiation Type", "group": "security", "label": "security", "required": 
false, "type": "enum", "javaType": "io.grpc.netty.NegotiationType", "enum": [ 
"PLAINTEXT", "TLS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "PLAINTEXT", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Identifies the security neg [...]
-    "serviceAccountResource": { "index": 43, "kind": "parameter", 
"displayName": "Service Account Resource", "group": "security", "label": 
"security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Service Account key file in JSO [...]
-    "trustCertCollectionResource": { "index": 44, "kind": "parameter", 
"displayName": "Trust Cert Collection Resource", "group": "security", "label": 
"security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The trusted certific [...]
+    "muteException": { "index": 19, "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.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "If enabled and an Exchange failed processing 
on the consumer side the status description  [...]
+    "permitKeepAliveTime": { "index": 20, "kind": "parameter", "displayName": 
"Permit Keep Alive Time", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 300000, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets the most aggressive keep-alive time in 
milliseconds that clients are pe [...]
+    "permitKeepAliveWithoutCalls": { "index": 21, "kind": "parameter", 
"displayName": "Permit Keep Alive Without Calls", "group": "consumer", "label": 
"consumer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets whether to allow clients to send 
keep-alive HTTP\/ 2 [...]
+    "routeControlledStreamObserver": { "index": 22, "kind": "parameter", 
"displayName": "Route Controlled Stream Observer", "group": "consumer", 
"label": "consumer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Lets the route to take control over stream 
observer. I [...]
+    "bridgeErrorHandler": { "index": 23, "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 [...]
+    "exceptionHandler": { "index": 24, "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 de [...]
+    "exchangePattern": { "index": 25, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "enum", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
+    "autoDiscoverClientInterceptors": { "index": 26, "kind": "parameter", 
"displayName": "Auto Discover Client Interceptors", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Setting the autoDiscoverClientInterceptors 
mechanism, [...]
+    "inheritExchangePropertiesForReplies": { "index": 27, "kind": "parameter", 
"displayName": "Inherit Exchange Properties For Replies", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Copies exchange properties from original  [...]
+    "method": { "index": 28, "kind": "parameter", "displayName": "Method", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "gRPC method name" },
+    "producerStrategy": { "index": 29, "kind": "parameter", "displayName": 
"Producer Strategy", "group": "producer", "label": "producer", "required": 
false, "type": "enum", "javaType": 
"org.apache.camel.component.grpc.GrpcProducerStrategy", "enum": [ "SIMPLE", 
"STREAMING" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "SIMPLE", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Th [...]
+    "streamRepliesTo": { "index": 30, "kind": "parameter", "displayName": 
"Stream Replies To", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "When using STREAMING client mode, it indicates 
the endpoint where responses should be forwarded." },
+    "toRouteControlledStreamObserver": { "index": 31, "kind": "parameter", 
"displayName": "To Route Controlled Stream Observer", "group": "producer", 
"label": "producer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Expects that exchange property 
GrpcConstants.GRPC [...]
+    "userAgent": { "index": 32, "kind": "parameter", "displayName": "User 
Agent", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The user agent header passed to the server" },
+    "lazyStartProducer": { "index": 33, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "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 produ [...]
+    "synchronous": { "index": 34, "kind": "parameter", "displayName": 
"Synchronous", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Sets whether synchronous processing should be 
strictly used" },
+    "authenticationType": { "index": 35, "kind": "parameter", "displayName": 
"Authentication Type", "group": "security", "label": "security", "required": 
false, "type": "enum", "javaType": 
"org.apache.camel.component.grpc.GrpcAuthType", "enum": [ "NONE", "GOOGLE", 
"JWT" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "NONE", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Authen [...]
+    "jwtAlgorithm": { "index": 36, "kind": "parameter", "displayName": "Jwt 
Algorithm", "group": "security", "label": "security", "required": false, 
"type": "enum", "javaType": 
"org.apache.camel.component.grpc.auth.jwt.JwtAlgorithm", "enum": [ "HMAC256", 
"HMAC384", "HMAC512", "RSA256", "RSA384", "RSA512" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "HMAC256", 
"configurationClass": "org.apache.camel.component.grpc.GrpcConfiguration", 
"configurationField": " [...]
+    "jwtIssuer": { "index": 37, "kind": "parameter", "displayName": "Jwt 
Issuer", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token issuer" },
+    "jwtSecret": { "index": 38, "kind": "parameter", "displayName": "Jwt 
Secret", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token secret" },
+    "jwtSubject": { "index": 39, "kind": "parameter", "displayName": "Jwt 
Subject", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web Token subject" },
+    "keyCertChainResource": { "index": 40, "kind": "parameter", "displayName": 
"Key Cert Chain Resource", "group": "security", "label": "security", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The X.509 certificate chain file r [...]
+    "keyPassword": { "index": 41, "kind": "parameter", "displayName": "Key 
Password", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The PKCS#8 private key file password" },
+    "keyResource": { "index": 42, "kind": "parameter", "displayName": "Key 
Resource", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, 
"supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The PKCS#8 private key file resource in PEM 
format link" },
+    "negotiationType": { "index": 43, "kind": "parameter", "displayName": 
"Negotiation Type", "group": "security", "label": "security", "required": 
false, "type": "enum", "javaType": "io.grpc.netty.NegotiationType", "enum": [ 
"PLAINTEXT", "TLS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "PLAINTEXT", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Identifies the security neg [...]
+    "serviceAccountResource": { "index": 44, "kind": "parameter", 
"displayName": "Service Account Resource", "group": "security", "label": 
"security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Service Account key file in JSO [...]
+    "trustCertCollectionResource": { "index": 45, "kind": "parameter", 
"displayName": "Trust Cert Collection Resource", "group": "security", "label": 
"security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The trusted certific [...]
   }
 }
diff --git 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConfiguration.java
 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConfiguration.java
index 9a39fdaf25de..1484c6ba5b1a 100644
--- 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConfiguration.java
+++ 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConfiguration.java
@@ -118,6 +118,9 @@ public class GrpcConfiguration {
     @UriParam(label = "consumer", defaultValue = "false")
     private boolean routeControlledStreamObserver;
 
+    @UriParam(label = "consumer", defaultValue = "true")
+    private boolean muteException = true;
+
     private List<ServerInterceptor> serverInterceptors = 
Collections.emptyList();
 
     @UriParam(label = "consumer", defaultValue = "true")
@@ -449,6 +452,18 @@ public class GrpcConfiguration {
         this.routeControlledStreamObserver = routeControlledStreamObserver;
     }
 
+    public boolean isMuteException() {
+        return muteException;
+    }
+
+    /**
+     * If enabled and an Exchange failed processing on the consumer side the 
status description returned to the client
+     * won't contain the exception's message.
+     */
+    public void setMuteException(boolean muteException) {
+        this.muteException = muteException;
+    }
+
     public int getMaxConcurrentCallsPerConnection() {
         return maxConcurrentCallsPerConnection;
     }
diff --git 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
index f0ee042534c9..6b0ddb052f9b 100644
--- 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
+++ 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
@@ -33,6 +33,8 @@ import org.apache.camel.component.grpc.GrpcEndpoint;
  */
 public class GrpcMethodHandler {
 
+    private static final String MUTED_DESCRIPTION = "Exchange processing 
failed";
+
     protected final GrpcConsumer consumer;
 
     public GrpcMethodHandler(GrpcConsumer consumer) {
@@ -64,8 +66,12 @@ public class GrpcMethodHandler {
         invokeRoute(endpoint, exchange);
 
         if (exchange.isFailed()) {
+            // the description IS transmitted to the client, so it carries the 
route's exception message only when
+            // the endpoint opted out of muting; the cause below stays local 
either way
+            String description = endpoint.getConfiguration().isMuteException()
+                    ? MUTED_DESCRIPTION : exchange.getException().getMessage();
             responseObserver.onError(Status.INTERNAL
-                    .withDescription(exchange.getException().getMessage())
+                    .withDescription(description)
                     // This can be attached to the Status locally, but NOT 
transmitted to the client!
                     .withCause(exchange.getException())
                     .asRuntimeException());
diff --git 
a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerExceptionTest.java
 
b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerExceptionTest.java
index bbe356d3a923..4028a670c245 100644
--- 
a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerExceptionTest.java
+++ 
b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerExceptionTest.java
@@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -42,17 +43,24 @@ public class GrpcConsumerExceptionTest extends 
GrpcTestSupport {
 
     private static final int GRPC_TEST_PING_ID = 1;
     private static final String GRPC_TEST_PING_VALUE = "PING";
+    private static final String ROUTE_EXCEPTION_MESSAGE = "GRPC Camel 
exception message";
 
     private ManagedChannel syncRequestChannel;
+    private ManagedChannel unmutedChannel;
+    private PingPongGrpc.PingPongBlockingStub unmutedStub;
     private PingPongGrpc.PingPongBlockingStub blockingStub;
-    private PingPongGrpc.PingPongStub nonBlockingStub;
+    private PingPongGrpc.PingPongStub unmutedNonBlockingStub;
 
     @BeforeEach
     public void startGrpcChannels() {
         int port = getRoutePort("grpc-exception");
         syncRequestChannel = ManagedChannelBuilder.forAddress("localhost", 
port).usePlaintext().build();
         blockingStub = PingPongGrpc.newBlockingStub(syncRequestChannel);
-        nonBlockingStub = PingPongGrpc.newStub(syncRequestChannel);
+
+        int unmutedPort = getRoutePort("grpc-exception-unmuted");
+        unmutedChannel = ManagedChannelBuilder.forAddress("localhost", 
unmutedPort).usePlaintext().build();
+        unmutedStub = PingPongGrpc.newBlockingStub(unmutedChannel);
+        unmutedNonBlockingStub = PingPongGrpc.newStub(unmutedChannel);
     }
 
     @AfterEach
@@ -60,6 +68,37 @@ public class GrpcConsumerExceptionTest extends 
GrpcTestSupport {
         if (syncRequestChannel != null) {
             syncRequestChannel.shutdown().shutdownNow();
         }
+        if (unmutedChannel != null) {
+            unmutedChannel.shutdown().shutdownNow();
+        }
+    }
+
+    /**
+     * The Status description is transmitted to the client - unlike the cause, 
which stays local - so by default it must
+     * not carry the route exception's message.
+     */
+    @Test
+    public void theStatusDescriptionDoesNotCarryTheRouteExceptionByDefault() {
+        PingRequest pingRequest
+                = 
PingRequest.newBuilder().setPingName(GRPC_TEST_PING_VALUE).setPingId(GRPC_TEST_PING_ID).build();
+
+        StatusRuntimeException e
+                = assertThrows(StatusRuntimeException.class, () -> 
blockingStub.pingSyncSync(pingRequest));
+
+        
assertFalse(e.getStatus().getDescription().contains(ROUTE_EXCEPTION_MESSAGE),
+                "the status description must not carry the route exception's 
message: " + e.getStatus());
+    }
+
+    @Test
+    public void muteExceptionFalseCarriesTheRouteExceptionAsBefore() {
+        PingRequest pingRequest
+                = 
PingRequest.newBuilder().setPingName(GRPC_TEST_PING_VALUE).setPingId(GRPC_TEST_PING_ID).build();
+
+        StatusRuntimeException e
+                = assertThrows(StatusRuntimeException.class, () -> 
unmutedStub.pingSyncSync(pingRequest));
+
+        
assertTrue(e.getStatus().getDescription().contains(ROUTE_EXCEPTION_MESSAGE),
+                "expected the route exception message with 
muteException=false: " + e.getStatus());
     }
 
     @Test
@@ -82,7 +121,7 @@ public class GrpcConsumerExceptionTest extends 
GrpcTestSupport {
                 = 
PingRequest.newBuilder().setPingName(GRPC_TEST_PING_VALUE).setPingId(GRPC_TEST_PING_ID).build();
         PongResponseStreamObserver responseObserver = new 
PongResponseStreamObserver(latch);
 
-        nonBlockingStub.pingSyncSync(pingRequest, responseObserver);
+        unmutedNonBlockingStub.pingSyncSync(pingRequest, responseObserver);
         assertTrue(latch.await(5, TimeUnit.SECONDS));
     }
 
@@ -93,8 +132,11 @@ public class GrpcConsumerExceptionTest extends 
GrpcTestSupport {
             public void configure() {
                 
from("grpc://localhost:0/org.apache.camel.component.grpc.PingPong?synchronous=true")
                         .routeId("grpc-exception")
-                        .throwException(CamelException.class, "GRPC Camel 
exception message");
+                        .throwException(CamelException.class, 
ROUTE_EXCEPTION_MESSAGE);
 
+                
from("grpc://localhost:0/org.apache.camel.component.grpc.PingPong?synchronous=true&muteException=false")
+                        .routeId("grpc-exception-unmuted")
+                        .throwException(CamelException.class, 
ROUTE_EXCEPTION_MESSAGE);
             }
         };
     }
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
index 2462b3cc614b..f71d24f48fda 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
@@ -529,6 +529,26 @@ is truncated rather than recreated and would otherwise 
keep its original permiss
 
 Deployments where another account legitimately reads these files — a sidecar 
or a backup agent running as
 a different user — need to run as the owner, or use a group-aware key store 
instead.
+=== camel-grpc
+
+The gRPC consumer no longer returns the route exception's message to the 
client.
+
+When an exchange failed, `GrpcMethodHandler` built the error status with
+`Status.INTERNAL.withDescription(exchange.getException().getMessage())`. The 
description is transmitted
+to the client — unlike the cause attached alongside it, which stays local — so 
any remote-triggerable
+failure handed the caller internal detail.
+
+A new `muteException` consumer option controls this, and it defaults to 
`true`, the same default the HTTP
+consumers carry. The status code is unchanged; only the description is 
replaced, with
+`Exchange processing failed`.
+
+A route that relies on the exception message reaching the client must opt back 
in explicitly:
+
+[source,text]
+----
+grpc://localhost:8080/org.example.MyService?muteException=false
+----
+
 === camel-keycloak
 
 When `validateIssuer` is enabled and the token is checked by introspection, an 
introspection response
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GrpcEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GrpcEndpointBuilderFactory.java
index e57b0c06e27d..836e8854d46b 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GrpcEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GrpcEndpointBuilderFactory.java
@@ -597,6 +597,40 @@ public interface GrpcEndpointBuilderFactory {
             doSetProperty("maxRstPeriodSeconds", maxRstPeriodSeconds);
             return this;
         }
+        /**
+         * If enabled and an Exchange failed processing on the consumer side 
the
+         * status description returned to the client won't contain the
+         * exception's message.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param muteException the value to set
+         * @return the dsl builder
+         */
+        default GrpcEndpointConsumerBuilder muteException(boolean 
muteException) {
+            doSetProperty("muteException", muteException);
+            return this;
+        }
+        /**
+         * If enabled and an Exchange failed processing on the consumer side 
the
+         * status description returned to the client won't contain the
+         * exception's message.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param muteException the value to set
+         * @return the dsl builder
+         */
+        default GrpcEndpointConsumerBuilder muteException(String 
muteException) {
+            doSetProperty("muteException", muteException);
+            return this;
+        }
         /**
          * Sets the most aggressive keep-alive time in milliseconds that 
clients
          * are permitted to configure. The server will try to detect clients
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index a447189679f4..9818897680b4 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -17549,14 +17549,6 @@
                 "$ref" : 
"#/items/definitions/org.apache.camel.model.language.ConstantExpression"
               }
             }
-          }, {
-            "type" : "object",
-            "required" : [ "csimple" ],
-            "properties" : {
-              "csimple" : {
-                "$ref" : 
"#/items/definitions/org.apache.camel.model.language.CSimpleExpression"
-              }
-            }
           }, {
             "type" : "object",
             "required" : [ "datasonnet" ],
@@ -17777,7 +17769,6 @@
         } ],
         "properties" : {
           "constant" : { },
-          "csimple" : { },
           "datasonnet" : { },
           "exchangeProperty" : { },
           "groovy" : { },

Reply via email to