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" : { },