From 1d303e2738495692c588c2c4a204e9fb2097fb36 Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Mon, 31 Aug 2026 10:01:34 +0200 Subject: [PATCH 1/5] CAMEL-24476: camel-mina - add a muteException consumer option The consumer wrote exchange.getException() straight back over the socket, so a route failure handed the remote peer the exception class and message over a textline codec, and its serialised form over the object codec. muteException defaults to true, matching the http consumers aligned by CAMEL-23651. (cherry picked from commit 7af3e74d8448b5f1c6620bbae44d766e3f440704) MinaMuteExceptionTest uses JUnit assertions here: camel-mina on this branch has no assertj test dependency, and its other test classes are JUnit. Co-authored-by: Claude Opus 5 (1M context) --- .../apache/camel/catalog/components/mina.json | 86 +++++++++--------- .../mina/MinaComponentConfigurer.java | 6 ++ .../mina/MinaEndpointConfigurer.java | 6 ++ .../mina/MinaEndpointUriFactory.java | 3 +- .../org/apache/camel/component/mina/mina.json | 86 +++++++++--------- .../component/mina/MinaConfiguration.java | 14 +++ .../camel/component/mina/MinaConsumer.java | 17 +++- .../component/mina/MinaMuteExceptionTest.java | 88 +++++++++++++++++++ ...aTcpLineDelimiterUsingPlainSocketTest.java | 2 +- .../MinaTcpWithInOutUsingPlainSocketTest.java | 2 +- ...inaTcpWithIoOutProcessorExceptionTest.java | 2 +- .../dsl/MinaComponentBuilderFactory.java | 20 +++++ .../dsl/MinaEndpointBuilderFactory.java | 34 +++++++ 13 files changed, 277 insertions(+), 89 deletions(-) create mode 100644 components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaMuteExceptionTest.java diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/mina.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/mina.json index ac73c6cc7a573..6b7b7c0fa603f 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/mina.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/mina.json @@ -31,27 +31,28 @@ "writeTimeout": { "index": 4, "kind": "property", "displayName": "Write Timeout", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 10000, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Maximum amount of time it should take to send data to the MINA session. Default is 10000 milliseconds." }, "bridgeErrorHandler": { "index": 5, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, "clientMode": { "index": 6, "kind": "property", "displayName": "Client Mode", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If the clientMode is true, mina consumer will connect the address as a TCP client." }, - "noReplyLogLevel": { "index": 7, "kind": "property", "displayName": "No Reply Log Level", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back." }, - "lazyStartProducer": { "index": 8, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "cachedAddress": { "index": 9, "kind": "property", "displayName": "Cached Address", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network." }, - "lazySessionCreation": { "index": 10, "kind": "property", "displayName": "Lazy Session Creation", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started." }, - "autowiredEnabled": { "index": 11, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, - "configuration": { "index": 12, "kind": "property", "displayName": "Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.mina.MinaConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared mina configuration." }, - "disconnectOnNoReply": { "index": 13, "kind": "property", "displayName": "Disconnect On No Reply", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back." }, - "maximumPoolSize": { "index": 14, "kind": "property", "displayName": "Maximum Pool Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 16, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Number of worker threads in the worker pool for TCP and UDP" }, - "orderedThreadPoolExecutor": { "index": 15, "kind": "property", "displayName": "Ordered Thread Pool Executor", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to use ordered thread pool, to ensure events are processed orderly on the same channel." }, - "transferExchange": { "index": 16, "kind": "property", "displayName": "Transfer Exchange", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. Also make sure to configure objectCodecPattern to (star) to allow transferring java objects." }, - "allowDefaultCodec": { "index": 17, "kind": "property", "displayName": "Allow Default Codec", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter." }, - "codec": { "index": 18, "kind": "property", "displayName": "Codec", "group": "codec", "label": "codec", "required": false, "type": "object", "javaType": "org.apache.mina.filter.codec.ProtocolCodecFactory", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To use a custom minda codec implementation." }, - "decoderMaxLineLength": { "index": 19, "kind": "property", "displayName": "Decoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1024, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024." }, - "encoderMaxLineLength": { "index": 20, "kind": "property", "displayName": "Encoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE." }, - "encoding": { "index": 21, "kind": "property", "displayName": "Encoding", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset" }, - "filters": { "index": 22, "kind": "property", "displayName": "Filters", "group": "codec", "label": "codec", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can set a list of Mina IoFilters to use." }, - "objectCodecPattern": { "index": 23, "kind": "property", "displayName": "Object Codec Pattern", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Accept the wildcard specified classes for Object deserialization, unless they are otherwise rejected. Multiple patterns can be separated by comma." }, - "textline": { "index": 24, "kind": "property", "displayName": "Textline", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP." }, - "textlineDelimiter": { "index": 25, "kind": "property", "displayName": "Textline Delimiter", "group": "codec", "label": "codec", "required": false, "type": "enum", "javaType": "org.apache.camel.component.mina.MinaTextLineDelimiter", "enum": [ "DEFAULT", "AUTO", "UNIX", "WINDOWS", "MAC" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text." }, - "sslContextParameters": { "index": 26, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To configure SSL security." }, - "useGlobalSslContextParameters": { "index": 27, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." } + "muteException": { "index": 7, "kind": "property", "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.mina.MinaConfiguration", "configurationField": "configuration", "description": "If enabled and an Exchange failed processing on the consumer side the response written back to the remote peer won't contain the exception's class, message or stack trace." }, + "noReplyLogLevel": { "index": 8, "kind": "property", "displayName": "No Reply Log Level", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back." }, + "lazyStartProducer": { "index": 9, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "cachedAddress": { "index": 10, "kind": "property", "displayName": "Cached Address", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network." }, + "lazySessionCreation": { "index": 11, "kind": "property", "displayName": "Lazy Session Creation", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started." }, + "autowiredEnabled": { "index": 12, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, + "configuration": { "index": 13, "kind": "property", "displayName": "Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.mina.MinaConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared mina configuration." }, + "disconnectOnNoReply": { "index": 14, "kind": "property", "displayName": "Disconnect On No Reply", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back." }, + "maximumPoolSize": { "index": 15, "kind": "property", "displayName": "Maximum Pool Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 16, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Number of worker threads in the worker pool for TCP and UDP" }, + "orderedThreadPoolExecutor": { "index": 16, "kind": "property", "displayName": "Ordered Thread Pool Executor", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to use ordered thread pool, to ensure events are processed orderly on the same channel." }, + "transferExchange": { "index": 17, "kind": "property", "displayName": "Transfer Exchange", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. Also make sure to configure objectCodecPattern to (star) to allow transferring java objects." }, + "allowDefaultCodec": { "index": 18, "kind": "property", "displayName": "Allow Default Codec", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter." }, + "codec": { "index": 19, "kind": "property", "displayName": "Codec", "group": "codec", "label": "codec", "required": false, "type": "object", "javaType": "org.apache.mina.filter.codec.ProtocolCodecFactory", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To use a custom minda codec implementation." }, + "decoderMaxLineLength": { "index": 20, "kind": "property", "displayName": "Decoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1024, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024." }, + "encoderMaxLineLength": { "index": 21, "kind": "property", "displayName": "Encoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE." }, + "encoding": { "index": 22, "kind": "property", "displayName": "Encoding", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset" }, + "filters": { "index": 23, "kind": "property", "displayName": "Filters", "group": "codec", "label": "codec", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can set a list of Mina IoFilters to use." }, + "objectCodecPattern": { "index": 24, "kind": "property", "displayName": "Object Codec Pattern", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Accept the wildcard specified classes for Object deserialization, unless they are otherwise rejected. Multiple patterns can be separated by comma." }, + "textline": { "index": 25, "kind": "property", "displayName": "Textline", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP." }, + "textlineDelimiter": { "index": 26, "kind": "property", "displayName": "Textline Delimiter", "group": "codec", "label": "codec", "required": false, "type": "enum", "javaType": "org.apache.camel.component.mina.MinaTextLineDelimiter", "enum": [ "DEFAULT", "AUTO", "UNIX", "WINDOWS", "MAC" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text." }, + "sslContextParameters": { "index": 27, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To configure SSL security." }, + "useGlobalSslContextParameters": { "index": 28, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." } }, "headers": { "CamelMinaCloseSessionWhenComplete": { "index": 0, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Indicates whether the session should be closed after complete", "constantName": "org.apache.camel.component.mina.MinaConstants#MINA_CLOSE_SESSION_WHEN_COMPLETE" }, @@ -69,26 +70,27 @@ "timeout": { "index": 6, "kind": "parameter", "displayName": "Timeout", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 30000, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds, so 60000 is 60 seconds." }, "writeTimeout": { "index": 7, "kind": "parameter", "displayName": "Write Timeout", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 10000, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Maximum amount of time it should take to send data to the MINA session. Default is 10000 milliseconds." }, "clientMode": { "index": 8, "kind": "parameter", "displayName": "Client Mode", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If the clientMode is true, mina consumer will connect the address as a TCP client." }, - "bridgeErrorHandler": { "index": 9, "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "exceptionHandler": { "index": 10, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "exchangePattern": { "index": 11, "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." }, - "noReplyLogLevel": { "index": 12, "kind": "parameter", "displayName": "No Reply Log Level", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back." }, - "cachedAddress": { "index": 13, "kind": "parameter", "displayName": "Cached Address", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network." }, - "lazySessionCreation": { "index": 14, "kind": "parameter", "displayName": "Lazy Session Creation", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started." }, - "lazyStartProducer": { "index": 15, "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "disconnectOnNoReply": { "index": 16, "kind": "parameter", "displayName": "Disconnect On No Reply", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back." }, - "maximumPoolSize": { "index": 17, "kind": "parameter", "displayName": "Maximum Pool Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 16, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Number of worker threads in the worker pool for TCP and UDP" }, - "orderedThreadPoolExecutor": { "index": 18, "kind": "parameter", "displayName": "Ordered Thread Pool Executor", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to use ordered thread pool, to ensure events are processed orderly on the same channel." }, - "transferExchange": { "index": 19, "kind": "parameter", "displayName": "Transfer Exchange", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. Also make sure to configure objectCodecPattern to (star) to allow transferring java objects." }, - "allowDefaultCodec": { "index": 20, "kind": "parameter", "displayName": "Allow Default Codec", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter." }, - "codec": { "index": 21, "kind": "parameter", "displayName": "Codec", "group": "codec", "label": "codec", "required": false, "type": "object", "javaType": "org.apache.mina.filter.codec.ProtocolCodecFactory", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To use a custom minda codec implementation." }, - "decoderMaxLineLength": { "index": 22, "kind": "parameter", "displayName": "Decoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1024, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024." }, - "encoderMaxLineLength": { "index": 23, "kind": "parameter", "displayName": "Encoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE." }, - "encoding": { "index": 24, "kind": "parameter", "displayName": "Encoding", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset" }, - "filters": { "index": 25, "kind": "parameter", "displayName": "Filters", "group": "codec", "label": "codec", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can set a list of Mina IoFilters to use." }, - "objectCodecPattern": { "index": 26, "kind": "parameter", "displayName": "Object Codec Pattern", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Accept the wildcard specified classes for Object deserialization, unless they are otherwise rejected. Multiple patterns can be separated by comma." }, - "textline": { "index": 27, "kind": "parameter", "displayName": "Textline", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP." }, - "textlineDelimiter": { "index": 28, "kind": "parameter", "displayName": "Textline Delimiter", "group": "codec", "label": "codec", "required": false, "type": "enum", "javaType": "org.apache.camel.component.mina.MinaTextLineDelimiter", "enum": [ "DEFAULT", "AUTO", "UNIX", "WINDOWS", "MAC" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text." }, - "sslContextParameters": { "index": 29, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To configure SSL security." } + "muteException": { "index": 9, "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.mina.MinaConfiguration", "configurationField": "configuration", "description": "If enabled and an Exchange failed processing on the consumer side the response written back to the remote peer won't contain the exception's class, message or stack trace." }, + "bridgeErrorHandler": { "index": 10, "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "exceptionHandler": { "index": 11, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "exchangePattern": { "index": 12, "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." }, + "noReplyLogLevel": { "index": 13, "kind": "parameter", "displayName": "No Reply Log Level", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back." }, + "cachedAddress": { "index": 14, "kind": "parameter", "displayName": "Cached Address", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network." }, + "lazySessionCreation": { "index": 15, "kind": "parameter", "displayName": "Lazy Session Creation", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started." }, + "lazyStartProducer": { "index": 16, "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "disconnectOnNoReply": { "index": 17, "kind": "parameter", "displayName": "Disconnect On No Reply", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back." }, + "maximumPoolSize": { "index": 18, "kind": "parameter", "displayName": "Maximum Pool Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 16, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Number of worker threads in the worker pool for TCP and UDP" }, + "orderedThreadPoolExecutor": { "index": 19, "kind": "parameter", "displayName": "Ordered Thread Pool Executor", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to use ordered thread pool, to ensure events are processed orderly on the same channel." }, + "transferExchange": { "index": 20, "kind": "parameter", "displayName": "Transfer Exchange", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. Also make sure to configure objectCodecPattern to (star) to allow transferring java objects." }, + "allowDefaultCodec": { "index": 21, "kind": "parameter", "displayName": "Allow Default Codec", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter." }, + "codec": { "index": 22, "kind": "parameter", "displayName": "Codec", "group": "codec", "label": "codec", "required": false, "type": "object", "javaType": "org.apache.mina.filter.codec.ProtocolCodecFactory", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To use a custom minda codec implementation." }, + "decoderMaxLineLength": { "index": 23, "kind": "parameter", "displayName": "Decoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1024, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024." }, + "encoderMaxLineLength": { "index": 24, "kind": "parameter", "displayName": "Encoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE." }, + "encoding": { "index": 25, "kind": "parameter", "displayName": "Encoding", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset" }, + "filters": { "index": 26, "kind": "parameter", "displayName": "Filters", "group": "codec", "label": "codec", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can set a list of Mina IoFilters to use." }, + "objectCodecPattern": { "index": 27, "kind": "parameter", "displayName": "Object Codec Pattern", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Accept the wildcard specified classes for Object deserialization, unless they are otherwise rejected. Multiple patterns can be separated by comma." }, + "textline": { "index": 28, "kind": "parameter", "displayName": "Textline", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP." }, + "textlineDelimiter": { "index": 29, "kind": "parameter", "displayName": "Textline Delimiter", "group": "codec", "label": "codec", "required": false, "type": "enum", "javaType": "org.apache.camel.component.mina.MinaTextLineDelimiter", "enum": [ "DEFAULT", "AUTO", "UNIX", "WINDOWS", "MAC" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text." }, + "sslContextParameters": { "index": 30, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To configure SSL security." } } } diff --git a/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaComponentConfigurer.java b/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaComponentConfigurer.java index 1b697bec50e4b..3139756c570bf 100644 --- a/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaComponentConfigurer.java +++ b/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaComponentConfigurer.java @@ -59,6 +59,8 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "maximumPoolSize": getOrCreateConfiguration(target).setMaximumPoolSize(property(camelContext, int.class, value)); return true; case "minalogger": case "minaLogger": getOrCreateConfiguration(target).setMinaLogger(property(camelContext, boolean.class, value)); return true; + case "muteexception": + case "muteException": getOrCreateConfiguration(target).setMuteException(property(camelContext, boolean.class, value)); return true; case "noreplyloglevel": case "noReplyLogLevel": getOrCreateConfiguration(target).setNoReplyLogLevel(property(camelContext, org.apache.camel.LoggingLevel.class, value)); return true; case "objectcodecpattern": @@ -114,6 +116,8 @@ public Class getOptionType(String name, boolean ignoreCase) { case "maximumPoolSize": return int.class; case "minalogger": case "minaLogger": return boolean.class; + case "muteexception": + case "muteException": return boolean.class; case "noreplyloglevel": case "noReplyLogLevel": return org.apache.camel.LoggingLevel.class; case "objectcodecpattern": @@ -170,6 +174,8 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { case "maximumPoolSize": return getOrCreateConfiguration(target).getMaximumPoolSize(); case "minalogger": case "minaLogger": return getOrCreateConfiguration(target).isMinaLogger(); + case "muteexception": + case "muteException": return getOrCreateConfiguration(target).isMuteException(); case "noreplyloglevel": case "noReplyLogLevel": return getOrCreateConfiguration(target).getNoReplyLogLevel(); case "objectcodecpattern": diff --git a/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaEndpointConfigurer.java b/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaEndpointConfigurer.java index 70c6c2d93c2ce..291ed3295a558 100644 --- a/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaEndpointConfigurer.java +++ b/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaEndpointConfigurer.java @@ -53,6 +53,8 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "maximumPoolSize": target.getConfiguration().setMaximumPoolSize(property(camelContext, int.class, value)); return true; case "minalogger": case "minaLogger": target.getConfiguration().setMinaLogger(property(camelContext, boolean.class, value)); return true; + case "muteexception": + case "muteException": target.getConfiguration().setMuteException(property(camelContext, boolean.class, value)); return true; case "noreplyloglevel": case "noReplyLogLevel": target.getConfiguration().setNoReplyLogLevel(property(camelContext, org.apache.camel.LoggingLevel.class, value)); return true; case "objectcodecpattern": @@ -107,6 +109,8 @@ public Class getOptionType(String name, boolean ignoreCase) { case "maximumPoolSize": return int.class; case "minalogger": case "minaLogger": return boolean.class; + case "muteexception": + case "muteException": return boolean.class; case "noreplyloglevel": case "noReplyLogLevel": return org.apache.camel.LoggingLevel.class; case "objectcodecpattern": @@ -162,6 +166,8 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { case "maximumPoolSize": return target.getConfiguration().getMaximumPoolSize(); case "minalogger": case "minaLogger": return target.getConfiguration().isMinaLogger(); + case "muteexception": + case "muteException": return target.getConfiguration().isMuteException(); case "noreplyloglevel": case "noReplyLogLevel": return target.getConfiguration().getNoReplyLogLevel(); case "objectcodecpattern": diff --git a/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaEndpointUriFactory.java b/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaEndpointUriFactory.java index b9522606af0af..be0e8ab6e3305 100644 --- a/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaEndpointUriFactory.java +++ b/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaEndpointUriFactory.java @@ -23,7 +23,7 @@ public class MinaEndpointUriFactory extends org.apache.camel.support.component.E private static final Set SECRET_PROPERTY_NAMES; private static final Map MULTI_VALUE_PREFIXES; static { - Set props = new HashSet<>(30); + Set props = new HashSet<>(31); props.add("allowDefaultCodec"); props.add("bridgeErrorHandler"); props.add("cachedAddress"); @@ -42,6 +42,7 @@ public class MinaEndpointUriFactory extends org.apache.camel.support.component.E props.add("lazyStartProducer"); props.add("maximumPoolSize"); props.add("minaLogger"); + props.add("muteException"); props.add("noReplyLogLevel"); props.add("objectCodecPattern"); props.add("orderedThreadPoolExecutor"); diff --git a/components/camel-mina/src/generated/resources/META-INF/org/apache/camel/component/mina/mina.json b/components/camel-mina/src/generated/resources/META-INF/org/apache/camel/component/mina/mina.json index ac73c6cc7a573..6b7b7c0fa603f 100644 --- a/components/camel-mina/src/generated/resources/META-INF/org/apache/camel/component/mina/mina.json +++ b/components/camel-mina/src/generated/resources/META-INF/org/apache/camel/component/mina/mina.json @@ -31,27 +31,28 @@ "writeTimeout": { "index": 4, "kind": "property", "displayName": "Write Timeout", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 10000, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Maximum amount of time it should take to send data to the MINA session. Default is 10000 milliseconds." }, "bridgeErrorHandler": { "index": 5, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, "clientMode": { "index": 6, "kind": "property", "displayName": "Client Mode", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If the clientMode is true, mina consumer will connect the address as a TCP client." }, - "noReplyLogLevel": { "index": 7, "kind": "property", "displayName": "No Reply Log Level", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back." }, - "lazyStartProducer": { "index": 8, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "cachedAddress": { "index": 9, "kind": "property", "displayName": "Cached Address", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network." }, - "lazySessionCreation": { "index": 10, "kind": "property", "displayName": "Lazy Session Creation", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started." }, - "autowiredEnabled": { "index": 11, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, - "configuration": { "index": 12, "kind": "property", "displayName": "Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.mina.MinaConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared mina configuration." }, - "disconnectOnNoReply": { "index": 13, "kind": "property", "displayName": "Disconnect On No Reply", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back." }, - "maximumPoolSize": { "index": 14, "kind": "property", "displayName": "Maximum Pool Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 16, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Number of worker threads in the worker pool for TCP and UDP" }, - "orderedThreadPoolExecutor": { "index": 15, "kind": "property", "displayName": "Ordered Thread Pool Executor", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to use ordered thread pool, to ensure events are processed orderly on the same channel." }, - "transferExchange": { "index": 16, "kind": "property", "displayName": "Transfer Exchange", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. Also make sure to configure objectCodecPattern to (star) to allow transferring java objects." }, - "allowDefaultCodec": { "index": 17, "kind": "property", "displayName": "Allow Default Codec", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter." }, - "codec": { "index": 18, "kind": "property", "displayName": "Codec", "group": "codec", "label": "codec", "required": false, "type": "object", "javaType": "org.apache.mina.filter.codec.ProtocolCodecFactory", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To use a custom minda codec implementation." }, - "decoderMaxLineLength": { "index": 19, "kind": "property", "displayName": "Decoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1024, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024." }, - "encoderMaxLineLength": { "index": 20, "kind": "property", "displayName": "Encoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE." }, - "encoding": { "index": 21, "kind": "property", "displayName": "Encoding", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset" }, - "filters": { "index": 22, "kind": "property", "displayName": "Filters", "group": "codec", "label": "codec", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can set a list of Mina IoFilters to use." }, - "objectCodecPattern": { "index": 23, "kind": "property", "displayName": "Object Codec Pattern", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Accept the wildcard specified classes for Object deserialization, unless they are otherwise rejected. Multiple patterns can be separated by comma." }, - "textline": { "index": 24, "kind": "property", "displayName": "Textline", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP." }, - "textlineDelimiter": { "index": 25, "kind": "property", "displayName": "Textline Delimiter", "group": "codec", "label": "codec", "required": false, "type": "enum", "javaType": "org.apache.camel.component.mina.MinaTextLineDelimiter", "enum": [ "DEFAULT", "AUTO", "UNIX", "WINDOWS", "MAC" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text." }, - "sslContextParameters": { "index": 26, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To configure SSL security." }, - "useGlobalSslContextParameters": { "index": 27, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." } + "muteException": { "index": 7, "kind": "property", "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.mina.MinaConfiguration", "configurationField": "configuration", "description": "If enabled and an Exchange failed processing on the consumer side the response written back to the remote peer won't contain the exception's class, message or stack trace." }, + "noReplyLogLevel": { "index": 8, "kind": "property", "displayName": "No Reply Log Level", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back." }, + "lazyStartProducer": { "index": 9, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "cachedAddress": { "index": 10, "kind": "property", "displayName": "Cached Address", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network." }, + "lazySessionCreation": { "index": 11, "kind": "property", "displayName": "Lazy Session Creation", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started." }, + "autowiredEnabled": { "index": 12, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, + "configuration": { "index": 13, "kind": "property", "displayName": "Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.mina.MinaConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared mina configuration." }, + "disconnectOnNoReply": { "index": 14, "kind": "property", "displayName": "Disconnect On No Reply", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back." }, + "maximumPoolSize": { "index": 15, "kind": "property", "displayName": "Maximum Pool Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 16, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Number of worker threads in the worker pool for TCP and UDP" }, + "orderedThreadPoolExecutor": { "index": 16, "kind": "property", "displayName": "Ordered Thread Pool Executor", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to use ordered thread pool, to ensure events are processed orderly on the same channel." }, + "transferExchange": { "index": 17, "kind": "property", "displayName": "Transfer Exchange", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. Also make sure to configure objectCodecPattern to (star) to allow transferring java objects." }, + "allowDefaultCodec": { "index": 18, "kind": "property", "displayName": "Allow Default Codec", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter." }, + "codec": { "index": 19, "kind": "property", "displayName": "Codec", "group": "codec", "label": "codec", "required": false, "type": "object", "javaType": "org.apache.mina.filter.codec.ProtocolCodecFactory", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To use a custom minda codec implementation." }, + "decoderMaxLineLength": { "index": 20, "kind": "property", "displayName": "Decoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1024, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024." }, + "encoderMaxLineLength": { "index": 21, "kind": "property", "displayName": "Encoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE." }, + "encoding": { "index": 22, "kind": "property", "displayName": "Encoding", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset" }, + "filters": { "index": 23, "kind": "property", "displayName": "Filters", "group": "codec", "label": "codec", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can set a list of Mina IoFilters to use." }, + "objectCodecPattern": { "index": 24, "kind": "property", "displayName": "Object Codec Pattern", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Accept the wildcard specified classes for Object deserialization, unless they are otherwise rejected. Multiple patterns can be separated by comma." }, + "textline": { "index": 25, "kind": "property", "displayName": "Textline", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP." }, + "textlineDelimiter": { "index": 26, "kind": "property", "displayName": "Textline Delimiter", "group": "codec", "label": "codec", "required": false, "type": "enum", "javaType": "org.apache.camel.component.mina.MinaTextLineDelimiter", "enum": [ "DEFAULT", "AUTO", "UNIX", "WINDOWS", "MAC" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text." }, + "sslContextParameters": { "index": 27, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To configure SSL security." }, + "useGlobalSslContextParameters": { "index": 28, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." } }, "headers": { "CamelMinaCloseSessionWhenComplete": { "index": 0, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Indicates whether the session should be closed after complete", "constantName": "org.apache.camel.component.mina.MinaConstants#MINA_CLOSE_SESSION_WHEN_COMPLETE" }, @@ -69,26 +70,27 @@ "timeout": { "index": 6, "kind": "parameter", "displayName": "Timeout", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 30000, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds, so 60000 is 60 seconds." }, "writeTimeout": { "index": 7, "kind": "parameter", "displayName": "Write Timeout", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 10000, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Maximum amount of time it should take to send data to the MINA session. Default is 10000 milliseconds." }, "clientMode": { "index": 8, "kind": "parameter", "displayName": "Client Mode", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If the clientMode is true, mina consumer will connect the address as a TCP client." }, - "bridgeErrorHandler": { "index": 9, "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "exceptionHandler": { "index": 10, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "exchangePattern": { "index": 11, "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." }, - "noReplyLogLevel": { "index": 12, "kind": "parameter", "displayName": "No Reply Log Level", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back." }, - "cachedAddress": { "index": 13, "kind": "parameter", "displayName": "Cached Address", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network." }, - "lazySessionCreation": { "index": 14, "kind": "parameter", "displayName": "Lazy Session Creation", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started." }, - "lazyStartProducer": { "index": 15, "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "disconnectOnNoReply": { "index": 16, "kind": "parameter", "displayName": "Disconnect On No Reply", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back." }, - "maximumPoolSize": { "index": 17, "kind": "parameter", "displayName": "Maximum Pool Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 16, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Number of worker threads in the worker pool for TCP and UDP" }, - "orderedThreadPoolExecutor": { "index": 18, "kind": "parameter", "displayName": "Ordered Thread Pool Executor", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to use ordered thread pool, to ensure events are processed orderly on the same channel." }, - "transferExchange": { "index": 19, "kind": "parameter", "displayName": "Transfer Exchange", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. Also make sure to configure objectCodecPattern to (star) to allow transferring java objects." }, - "allowDefaultCodec": { "index": 20, "kind": "parameter", "displayName": "Allow Default Codec", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter." }, - "codec": { "index": 21, "kind": "parameter", "displayName": "Codec", "group": "codec", "label": "codec", "required": false, "type": "object", "javaType": "org.apache.mina.filter.codec.ProtocolCodecFactory", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To use a custom minda codec implementation." }, - "decoderMaxLineLength": { "index": 22, "kind": "parameter", "displayName": "Decoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1024, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024." }, - "encoderMaxLineLength": { "index": 23, "kind": "parameter", "displayName": "Encoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE." }, - "encoding": { "index": 24, "kind": "parameter", "displayName": "Encoding", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset" }, - "filters": { "index": 25, "kind": "parameter", "displayName": "Filters", "group": "codec", "label": "codec", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can set a list of Mina IoFilters to use." }, - "objectCodecPattern": { "index": 26, "kind": "parameter", "displayName": "Object Codec Pattern", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Accept the wildcard specified classes for Object deserialization, unless they are otherwise rejected. Multiple patterns can be separated by comma." }, - "textline": { "index": 27, "kind": "parameter", "displayName": "Textline", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP." }, - "textlineDelimiter": { "index": 28, "kind": "parameter", "displayName": "Textline Delimiter", "group": "codec", "label": "codec", "required": false, "type": "enum", "javaType": "org.apache.camel.component.mina.MinaTextLineDelimiter", "enum": [ "DEFAULT", "AUTO", "UNIX", "WINDOWS", "MAC" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text." }, - "sslContextParameters": { "index": 29, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To configure SSL security." } + "muteException": { "index": 9, "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.mina.MinaConfiguration", "configurationField": "configuration", "description": "If enabled and an Exchange failed processing on the consumer side the response written back to the remote peer won't contain the exception's class, message or stack trace." }, + "bridgeErrorHandler": { "index": 10, "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "exceptionHandler": { "index": 11, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "exchangePattern": { "index": 12, "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." }, + "noReplyLogLevel": { "index": 13, "kind": "parameter", "displayName": "No Reply Log Level", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back." }, + "cachedAddress": { "index": 14, "kind": "parameter", "displayName": "Cached Address", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network." }, + "lazySessionCreation": { "index": 15, "kind": "parameter", "displayName": "Lazy Session Creation", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started." }, + "lazyStartProducer": { "index": 16, "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "disconnectOnNoReply": { "index": 17, "kind": "parameter", "displayName": "Disconnect On No Reply", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back." }, + "maximumPoolSize": { "index": 18, "kind": "parameter", "displayName": "Maximum Pool Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 16, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Number of worker threads in the worker pool for TCP and UDP" }, + "orderedThreadPoolExecutor": { "index": 19, "kind": "parameter", "displayName": "Ordered Thread Pool Executor", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Whether to use ordered thread pool, to ensure events are processed orderly on the same channel." }, + "transferExchange": { "index": 20, "kind": "parameter", "displayName": "Transfer Exchange", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. Also make sure to configure objectCodecPattern to (star) to allow transferring java objects." }, + "allowDefaultCodec": { "index": 21, "kind": "parameter", "displayName": "Allow Default Codec", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter." }, + "codec": { "index": 22, "kind": "parameter", "displayName": "Codec", "group": "codec", "label": "codec", "required": false, "type": "object", "javaType": "org.apache.mina.filter.codec.ProtocolCodecFactory", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To use a custom minda codec implementation." }, + "decoderMaxLineLength": { "index": 23, "kind": "parameter", "displayName": "Decoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1024, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024." }, + "encoderMaxLineLength": { "index": 24, "kind": "parameter", "displayName": "Encoder Max Line Length", "group": "codec", "label": "codec", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE." }, + "encoding": { "index": 25, "kind": "parameter", "displayName": "Encoding", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset" }, + "filters": { "index": 26, "kind": "parameter", "displayName": "Filters", "group": "codec", "label": "codec", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "You can set a list of Mina IoFilters to use." }, + "objectCodecPattern": { "index": 27, "kind": "parameter", "displayName": "Object Codec Pattern", "group": "codec", "label": "codec", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Accept the wildcard specified classes for Object deserialization, unless they are otherwise rejected. Multiple patterns can be separated by comma." }, + "textline": { "index": 28, "kind": "parameter", "displayName": "Textline", "group": "codec", "label": "codec", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP." }, + "textlineDelimiter": { "index": 29, "kind": "parameter", "displayName": "Textline Delimiter", "group": "codec", "label": "codec", "required": false, "type": "enum", "javaType": "org.apache.camel.component.mina.MinaTextLineDelimiter", "enum": [ "DEFAULT", "AUTO", "UNIX", "WINDOWS", "MAC" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text." }, + "sslContextParameters": { "index": 30, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.mina.MinaConfiguration", "configurationField": "configuration", "description": "To configure SSL security." } } } diff --git a/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java b/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java index 11d9ba6fcbcbf..8ce4858f616e2 100644 --- a/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java +++ b/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java @@ -91,6 +91,8 @@ public class MinaConfiguration implements Cloneable { private boolean cachedAddress = true; @UriParam(label = "consumer") private boolean clientMode; + @UriParam(label = "consumer", defaultValue = "true") + private boolean muteException = true; /** * Returns a copy of this configuration @@ -424,6 +426,18 @@ public boolean isClientMode() { return clientMode; } + /** + * If enabled and an Exchange failed processing on the consumer side the response written back to the remote peer + * won't contain the exception's class, message or stack trace. + */ + public void setMuteException(boolean muteException) { + this.muteException = muteException; + } + + public boolean isMuteException() { + return muteException; + } + // here we just shows the option setting of host, port, protocol public String getUriString() { return "mina:" + getProtocol() + ":" + getHost() + ":" + getPort(); diff --git a/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java b/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java index cd019ec8977d9..95756ac1d4edf 100644 --- a/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java +++ b/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java @@ -64,6 +64,7 @@ public class MinaConsumer extends DefaultConsumer { private static final Logger LOG = LoggerFactory.getLogger(MinaConsumer.class); + private static final String MUTED_EXCEPTION_MESSAGE = "Exchange processing failed"; private IoSession session; private IoConnector connector; private SocketAddress address; @@ -313,6 +314,19 @@ protected void configureDataGramCodecFactory( addCodecFactory(service, codecFactory); } + /** + * The stand-in written back to the remote peer when {@code muteException} is enabled. + *

+ * Still a {@link Exception}, so a peer that expects one - the object codec deserialises whatever was written - + * keeps getting one, but it carries neither the class nor the message of the route's exception. Its own stack trace + * is cleared as well: leaving it would serialise this consumer's frames to the peer instead. + */ + private static Exception mutedException() { + Exception muted = new Exception(MUTED_EXCEPTION_MESSAGE); + muted.setStackTrace(new StackTraceElement[0]); + return muted; + } + private void addCodecFactory(IoService service, ProtocolCodecFactory codecFactory) { service.getFilterChain().addLast("codec", new ProtocolCodecFilter(codecFactory)); } @@ -450,7 +464,8 @@ public void messageReceived(IoSession session, Object object) throws Exception { boolean failed = exchange.isFailed(); if (failed && !getEndpoint().getConfiguration().isTransferExchange()) { if (exchange.getException() != null) { - response = exchange.getException(); + response = getEndpoint().getConfiguration().isMuteException() + ? mutedException() : exchange.getException(); } else { // failed and no exception, must be a fault response = exchange.getOut().getBody(); diff --git a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaMuteExceptionTest.java b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaMuteExceptionTest.java new file mode 100644 index 0000000000000..7d3a0bf1e72ad --- /dev/null +++ b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaMuteExceptionTest.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.mina; + +import org.apache.camel.builder.RouteBuilder; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * The consumer used to write {@code exchange.getException()} straight back over the socket, so a route failure handed + * the remote peer the exception - its class and message over a textline codec, and its serialised form, cause chain + * included, over the object codec. + *

+ * {@code muteException} defaults to true, matching the http consumers aligned by CAMEL-23651. + */ +class MinaMuteExceptionTest extends BaseMinaTest { + + private static final String DETAIL = "the-internal-detail-a-peer-must-not-see"; + + /** getNextPort() allocates a fresh port on every call, so the second consumer's port is resolved once. */ + private Integer unmutedPort; + + @Test + void aFailedExchangeDoesNotWriteTheExceptionByDefault() { + String reply = template.requestBody(mutedUri(), "hello", String.class); + + assertFalse(reply.contains(DETAIL), "the reply must not carry the message of the route's exception"); + assertFalse(reply.contains("IllegalStateException"), "the reply must not carry the class of the route's exception"); + // still a reply rather than a dropped connection, so a synchronous peer is not left to time out + assertFalse(reply.isEmpty(), "a muted failure must still produce a reply"); + } + + @Test + void muteExceptionFalseWritesTheExceptionAsBefore() { + String reply = template.requestBody(unmutedUri(), "hello", String.class); + + assertTrue(reply.contains(DETAIL)); + assertTrue(reply.contains("IllegalStateException")); + } + + private String mutedUri() { + return uri(getPort(), ""); + } + + private String unmutedUri() { + if (unmutedPort == null) { + unmutedPort = getNextPort(); + } + return uri(unmutedPort, "&muteException=false"); + } + + private static String uri(int port, String extra) { + return String.format("mina:tcp://localhost:%1$s?sync=true&textline=true%2$s", port, extra); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from(mutedUri()) + .process(e -> { + throw new IllegalStateException(DETAIL); + }); + from(unmutedUri()) + .process(e -> { + throw new IllegalStateException(DETAIL); + }); + } + }; + } +} diff --git a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpLineDelimiterUsingPlainSocketTest.java b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpLineDelimiterUsingPlainSocketTest.java index b2949e9ebf1a8..72c4c200f2263 100644 --- a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpLineDelimiterUsingPlainSocketTest.java +++ b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpLineDelimiterUsingPlainSocketTest.java @@ -125,7 +125,7 @@ public void configure() { // use no delay for fast unit testing errorHandler(defaultErrorHandler().maximumRedeliveries(2)); - fromF("mina:tcp://localhost:%1$s?textline=true&minaLogger=true&textlineDelimiter=MAC&sync=true", + fromF("mina:tcp://localhost:%1$s?textline=true&minaLogger=true&textlineDelimiter=MAC&sync=true&muteException=false", getPort()) .process(e -> { String in = e.getIn().getBody(String.class); diff --git a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpWithInOutUsingPlainSocketTest.java b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpWithInOutUsingPlainSocketTest.java index d8bb2dcc00fc9..bdfdb0dd1a130 100644 --- a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpWithInOutUsingPlainSocketTest.java +++ b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpWithInOutUsingPlainSocketTest.java @@ -134,7 +134,7 @@ protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { - fromF("mina:tcp://localhost:%1$s?textline=true&sync=true", getPort()) + fromF("mina:tcp://localhost:%1$s?textline=true&sync=true&muteException=false", getPort()) .process(e -> { String in = e.getIn().getBody(String.class); if ("force-null-out-body".equals(in)) { diff --git a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpWithIoOutProcessorExceptionTest.java b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpWithIoOutProcessorExceptionTest.java index a0d8f065756a0..cd76ad498a0b4 100644 --- a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpWithIoOutProcessorExceptionTest.java +++ b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpWithIoOutProcessorExceptionTest.java @@ -45,7 +45,7 @@ public void configure() { // use no delay for fast unit testing errorHandler(defaultErrorHandler().maximumRedeliveries(2)); - fromF("mina:tcp://localhost:%1$s?textline=true&sync=true", getPort()).process(e -> { + fromF("mina:tcp://localhost:%1$s?textline=true&sync=true&muteException=false", getPort()).process(e -> { assertEquals("Hello World", e.getIn().getBody(String.class)); // simulate a problem processing the input to see if we can handle it properly throw new IllegalArgumentException("Forced exception"); diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/MinaComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/MinaComponentBuilderFactory.java index 7c66053729f27..c480ef0dadc47 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/MinaComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/MinaComponentBuilderFactory.java @@ -187,6 +187,25 @@ default MinaComponentBuilder clientMode(boolean clientMode) { } + /** + * If enabled and an Exchange failed processing on the consumer side the + * response written back to the remote peer won't contain the + * exception's class, message or stack trace. + * + * The option is a: <code>boolean</code> type. + * + * Default: true + * Group: consumer + * + * @param muteException the value to set + * @return the dsl builder + */ + default MinaComponentBuilder muteException(boolean muteException) { + doSetProperty("muteException", muteException); + return this; + } + + /** * If sync is enabled this option dictates MinaConsumer which logging * level to use when logging a there is no reply to send back. @@ -602,6 +621,7 @@ protected boolean setPropertyOnComponent( case "writeTimeout": getOrCreateConfiguration((MinaComponent) component).setWriteTimeout((long) value); return true; case "bridgeErrorHandler": ((MinaComponent) component).setBridgeErrorHandler((boolean) value); return true; case "clientMode": getOrCreateConfiguration((MinaComponent) component).setClientMode((boolean) value); return true; + case "muteException": getOrCreateConfiguration((MinaComponent) component).setMuteException((boolean) value); return true; case "noReplyLogLevel": getOrCreateConfiguration((MinaComponent) component).setNoReplyLogLevel((org.apache.camel.LoggingLevel) value); return true; case "lazyStartProducer": ((MinaComponent) component).setLazyStartProducer((boolean) value); return true; case "cachedAddress": getOrCreateConfiguration((MinaComponent) component).setCachedAddress((boolean) value); return true; diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MinaEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MinaEndpointBuilderFactory.java index 2ec811c6137e4..b3f4a69ad643b 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MinaEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MinaEndpointBuilderFactory.java @@ -235,6 +235,40 @@ default MinaEndpointConsumerBuilder clientMode(String clientMode) { doSetProperty("clientMode", clientMode); return this; } + /** + * If enabled and an Exchange failed processing on the consumer side the + * response written back to the remote peer won't contain the + * exception's class, message or stack trace. + * + * The option is a: boolean type. + * + * Default: true + * Group: consumer + * + * @param muteException the value to set + * @return the dsl builder + */ + default MinaEndpointConsumerBuilder muteException(boolean muteException) { + doSetProperty("muteException", muteException); + return this; + } + /** + * If enabled and an Exchange failed processing on the consumer side the + * response written back to the remote peer won't contain the + * exception's class, message or stack trace. + * + * The option will be converted to a boolean type. + * + * Default: true + * Group: consumer + * + * @param muteException the value to set + * @return the dsl builder + */ + default MinaEndpointConsumerBuilder muteException(String muteException) { + doSetProperty("muteException", muteException); + return this; + } /** * The mina component installs a default codec if both, codec is null * and textline is false. Setting allowDefaultCodec to false prevents From 6955b00732349693d471a7437f5f457cfeaabca9 Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Mon, 31 Aug 2026 10:03:52 +0200 Subject: [PATCH 2/5] CAMEL-24477: camel-cxf - add a muteException consumer option An exception thrown by the route was described back to the SOAP client in the fault, exposing internal types and messages. Declared faults (@WebFault) are still reported as before, since those are part of the service contract. (cherry picked from commit fd4fd273e4d1d36c1341cc8cf08405decd8c755c) Conflicts resolved for this branch: CxfConsumer keeps the existing cast form of the Fault check rather than main's pattern-matching one, and does not gain main's unrelated COMPLETED constant. The test imports camel-test-junit5. Co-authored-by: Claude Opus 5 (1M context) --- components/camel-cxf/camel-cxf-soap/pom.xml | 6 + .../cxf/jaxws/CxfEndpointConfigurer.java | 6 + .../cxf/jaxws/CxfEndpointUriFactory.java | 3 +- .../apache/camel/component/cxf/jaxws/cxf.json | 69 +++++------ .../component/cxf/jaxws/CxfConsumer.java | 41 +++++-- .../component/cxf/jaxws/CxfEndpoint.java | 16 +++ .../CxfConsumerContinuationTimeoutTest.java | 69 +++++------ .../jaxws/CxfConsumerMuteExceptionTest.java | 111 ++++++++++++++++++ .../dsl/CxfEndpointBuilderFactory.java | 42 +++++++ 9 files changed, 285 insertions(+), 78 deletions(-) create mode 100644 components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerMuteExceptionTest.java diff --git a/components/camel-cxf/camel-cxf-soap/pom.xml b/components/camel-cxf/camel-cxf-soap/pom.xml index b6548583e76f7..e4694fe94810d 100644 --- a/components/camel-cxf/camel-cxf-soap/pom.xml +++ b/components/camel-cxf/camel-cxf-soap/pom.xml @@ -203,6 +203,12 @@ test + + org.assertj + assertj-core + test + + org.mockito mockito-core diff --git a/components/camel-cxf/camel-cxf-soap/src/generated/java/org/apache/camel/component/cxf/jaxws/CxfEndpointConfigurer.java b/components/camel-cxf/camel-cxf-soap/src/generated/java/org/apache/camel/component/cxf/jaxws/CxfEndpointConfigurer.java index 0154eb1a18da6..292e6c4a15afd 100644 --- a/components/camel-cxf/camel-cxf-soap/src/generated/java/org/apache/camel/component/cxf/jaxws/CxfEndpointConfigurer.java +++ b/components/camel-cxf/camel-cxf-soap/src/generated/java/org/apache/camel/component/cxf/jaxws/CxfEndpointConfigurer.java @@ -64,6 +64,8 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "mergeProtocolHeaders": target.setMergeProtocolHeaders(property(camelContext, boolean.class, value)); return true; case "mtomenabled": case "mtomEnabled": target.setMtomEnabled(property(camelContext, boolean.class, value)); return true; + case "muteexception": + case "muteException": target.setMuteException(property(camelContext, boolean.class, value)); return true; case "password": target.setPassword(property(camelContext, java.lang.String.class, value)); return true; case "portname": case "portName": target.setPortName(property(camelContext, java.lang.String.class, value)); return true; @@ -137,6 +139,8 @@ public Class getOptionType(String name, boolean ignoreCase) { case "mergeProtocolHeaders": return boolean.class; case "mtomenabled": case "mtomEnabled": return boolean.class; + case "muteexception": + case "muteException": return boolean.class; case "password": return java.lang.String.class; case "portname": case "portName": return java.lang.String.class; @@ -211,6 +215,8 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { case "mergeProtocolHeaders": return target.isMergeProtocolHeaders(); case "mtomenabled": case "mtomEnabled": return target.isMtomEnabled(); + case "muteexception": + case "muteException": return target.isMuteException(); case "password": return target.getPassword(); case "portname": case "portName": return target.getPortName(); diff --git a/components/camel-cxf/camel-cxf-soap/src/generated/java/org/apache/camel/component/cxf/jaxws/CxfEndpointUriFactory.java b/components/camel-cxf/camel-cxf-soap/src/generated/java/org/apache/camel/component/cxf/jaxws/CxfEndpointUriFactory.java index 72512086f7283..4ea1d3f1db496 100644 --- a/components/camel-cxf/camel-cxf-soap/src/generated/java/org/apache/camel/component/cxf/jaxws/CxfEndpointUriFactory.java +++ b/components/camel-cxf/camel-cxf-soap/src/generated/java/org/apache/camel/component/cxf/jaxws/CxfEndpointUriFactory.java @@ -23,7 +23,7 @@ public class CxfEndpointUriFactory extends org.apache.camel.support.component.En private static final Set SECRET_PROPERTY_NAMES; private static final Map MULTI_VALUE_PREFIXES; static { - Set props = new HashSet<>(38); + Set props = new HashSet<>(39); props.add("address"); props.add("allowStreaming"); props.add("beanId"); @@ -47,6 +47,7 @@ public class CxfEndpointUriFactory extends org.apache.camel.support.component.En props.add("loggingSizeLimit"); props.add("mergeProtocolHeaders"); props.add("mtomEnabled"); + props.add("muteException"); props.add("password"); props.add("portName"); props.add("properties"); diff --git a/components/camel-cxf/camel-cxf-soap/src/generated/resources/META-INF/org/apache/camel/component/cxf/jaxws/cxf.json b/components/camel-cxf/camel-cxf-soap/src/generated/resources/META-INF/org/apache/camel/component/cxf/jaxws/cxf.json index 17814dedff0ea..730ebfb8dec4f 100644 --- a/components/camel-cxf/camel-cxf-soap/src/generated/resources/META-INF/org/apache/camel/component/cxf/jaxws/cxf.json +++ b/components/camel-cxf/camel-cxf-soap/src/generated/resources/META-INF/org/apache/camel/component/cxf/jaxws/cxf.json @@ -46,39 +46,40 @@ "address": { "index": 1, "kind": "path", "displayName": "Address", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The service publish address." }, "dataFormat": { "index": 2, "kind": "parameter", "displayName": "Data Format", "group": "common", "label": "", "required": false, "type": "enum", "javaType": "org.apache.camel.component.cxf.common.DataFormat", "enum": [ "PAYLOAD", "RAW", "MESSAGE", "CXF_MESSAGE", "POJO" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "POJO", "description": "The data type messages supported by the CXF endpoint." }, "wrappedStyle": { "index": 3, "kind": "parameter", "displayName": "Wrapped Style", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "The WSDL style that describes how parameters are represented in the SOAP body. If the value is false, CXF will chose the document-literal unwrapped style, If the value is true, CXF will chose the document-literal wrapped style" }, - "bridgeErrorHandler": { "index": 4, "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "exceptionHandler": { "index": 5, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "exchangePattern": { "index": 6, "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." }, - "cookieHandler": { "index": 7, "kind": "parameter", "displayName": "Cookie Handler", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.http.base.cookie.CookieHandler", "deprecated": false, "autowired": false, "secret": false, "description": "Configure a cookie handler to maintain a HTTP session" }, - "defaultOperationName": { "index": 8, "kind": "parameter", "displayName": "Default Operation Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option will set the default operationName that will be used by the CxfProducer which invokes the remote service." }, - "defaultOperationNamespace": { "index": 9, "kind": "parameter", "displayName": "Default Operation Namespace", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option will set the default operationNamespace that will be used by the CxfProducer which invokes the remote service." }, - "hostnameVerifier": { "index": 10, "kind": "parameter", "displayName": "Hostname Verifier", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "The hostname verifier to be used. Use the # notation to reference a HostnameVerifier from the registry." }, - "sslContextParameters": { "index": 11, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "The Camel SSL setting reference. Use the # notation to reference the SSL Context." }, - "wrapped": { "index": 12, "kind": "parameter", "displayName": "Wrapped", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Which kind of operation that CXF endpoint producer will invoke" }, - "lazyStartProducer": { "index": 13, "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "synchronous": { "index": 14, "kind": "parameter", "displayName": "Synchronous", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used" }, - "allowStreaming": { "index": 15, "kind": "parameter", "displayName": "Allow Streaming", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option controls whether the CXF component, when running in PAYLOAD mode, will DOM parse the incoming messages into DOM Elements or keep the payload as a javax.xml.transform.Source object that would allow streaming in some cases." }, - "bus": { "index": 16, "kind": "parameter", "displayName": "Bus", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.cxf.Bus", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom configured CXF Bus." }, - "continuationTimeout": { "index": 17, "kind": "parameter", "displayName": "Continuation Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "30000", "description": "This option is used to set the CXF continuation timeout which could be used in CxfConsumer by default when the CXF server is using Jetty or Servlet transport." }, - "cxfBinding": { "index": 18, "kind": "parameter", "displayName": "Cxf Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.cxf.common.CxfBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom CxfBinding to control the binding between Camel Message and CXF Message." }, - "cxfConfigurer": { "index": 19, "kind": "parameter", "displayName": "Cxf Configurer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.cxf.jaxws.CxfConfigurer", "deprecated": false, "autowired": false, "secret": false, "description": "This option could apply the implementation of org.apache.camel.component.cxf.CxfEndpointConfigurer which supports to configure the CXF endpoint in programmatic way. User can configure the CXF server and client by implementing configure{ServerClient} method of CxfEndpointConfigurer." }, - "defaultBus": { "index": 20, "kind": "parameter", "displayName": "Default Bus", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will set the default bus when CXF endpoint create a bus by itself" }, - "headerFilterStrategy": { "index": 21, "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HeaderFilterStrategy to filter header to and from Camel message." }, - "mergeProtocolHeaders": { "index": 22, "kind": "parameter", "displayName": "Merge Protocol Headers", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to merge protocol headers. If enabled then propagating headers between Camel and CXF becomes more consistent and similar. For more details see CAMEL-6393." }, - "mtomEnabled": { "index": 23, "kind": "parameter", "displayName": "Mtom Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To enable MTOM (attachments). This requires to use POJO or PAYLOAD data format mode." }, - "properties": { "index": 24, "kind": "parameter", "displayName": "Properties", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Map", "prefix": "properties.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To set additional CXF options using the key\/value pairs from the Map. For example to turn on stacktraces in SOAP faults, properties.faultStackTraceEnabled=true. This is a multi-value option with prefix: properties." }, - "schemaValidationEnabled": { "index": 25, "kind": "parameter", "displayName": "Schema Validation Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable schema validation for request and response. Disabled by default for performance reason" }, - "skipPayloadMessagePartCheck": { "index": 26, "kind": "parameter", "displayName": "Skip Payload Message Part Check", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether SOAP message validation should be disabled." }, - "loggingFeatureEnabled": { "index": 27, "kind": "parameter", "displayName": "Logging Feature Enabled", "group": "logging", "label": "logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option enables CXF Logging Feature which writes inbound and outbound SOAP messages to log." }, - "loggingSizeLimit": { "index": 28, "kind": "parameter", "displayName": "Logging Size Limit", "group": "logging", "label": "logging", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 49152, "description": "To limit the total size of number of bytes the logger will output when logging feature has been enabled and -1 for no limit." }, - "skipFaultLogging": { "index": 29, "kind": "parameter", "displayName": "Skip Fault Logging", "group": "logging", "label": "logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option controls whether the PhaseInterceptorChain skips logging the Fault that it catches." }, - "password": { "index": 30, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "This option is used to set the basic authentication information of password for the CXF client." }, - "username": { "index": 31, "kind": "parameter", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "This option is used to set the basic authentication information of username for the CXF client." }, - "bindingId": { "index": 32, "kind": "parameter", "displayName": "Binding Id", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The bindingId for the service model to use." }, - "portName": { "index": 33, "kind": "parameter", "displayName": "Port Name", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint name this service is implementing, it maps to the wsdl:portname. In the format of ns:PORT_NAME where ns is a namespace prefix valid at this scope." }, - "publishedEndpointUrl": { "index": 34, "kind": "parameter", "displayName": "Published Endpoint Url", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option can override the endpointUrl that published from the WSDL which can be accessed with service address url plus wsd" }, - "serviceClass": { "index": 35, "kind": "parameter", "displayName": "Service Class", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.Class", "deprecated": false, "autowired": false, "secret": false, "description": "The class name of the SEI (Service Endpoint Interface) class which could have JSR181 annotation or not." }, - "serviceName": { "index": 36, "kind": "parameter", "displayName": "Service Name", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The service name this service is implementing, it maps to the wsdl:servicename." }, - "wsdlURL": { "index": 37, "kind": "parameter", "displayName": "Wsdl URL", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The location of the WSDL. Can be on the classpath, file system, or be hosted remotely." } + "muteException": { "index": 4, "kind": "parameter", "displayName": "Mute Exception", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "If enabled and an Exchange failed processing on the consumer side, and the exception is not a SOAP fault the service contract declares, the SOAP fault returned to the caller won't contain the exception's class or message. Faults the route raises deliberately - a CXF Fault, an exception annotated {code WebFault}, or a Throwable set as the message body - are part of the contract and are always returned in full." }, + "bridgeErrorHandler": { "index": 5, "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "exceptionHandler": { "index": 6, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "exchangePattern": { "index": 7, "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." }, + "cookieHandler": { "index": 8, "kind": "parameter", "displayName": "Cookie Handler", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.http.base.cookie.CookieHandler", "deprecated": false, "autowired": false, "secret": false, "description": "Configure a cookie handler to maintain a HTTP session" }, + "defaultOperationName": { "index": 9, "kind": "parameter", "displayName": "Default Operation Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option will set the default operationName that will be used by the CxfProducer which invokes the remote service." }, + "defaultOperationNamespace": { "index": 10, "kind": "parameter", "displayName": "Default Operation Namespace", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option will set the default operationNamespace that will be used by the CxfProducer which invokes the remote service." }, + "hostnameVerifier": { "index": 11, "kind": "parameter", "displayName": "Hostname Verifier", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "The hostname verifier to be used. Use the # notation to reference a HostnameVerifier from the registry." }, + "sslContextParameters": { "index": 12, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "The Camel SSL setting reference. Use the # notation to reference the SSL Context." }, + "wrapped": { "index": 13, "kind": "parameter", "displayName": "Wrapped", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Which kind of operation that CXF endpoint producer will invoke" }, + "lazyStartProducer": { "index": 14, "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "synchronous": { "index": 15, "kind": "parameter", "displayName": "Synchronous", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used" }, + "allowStreaming": { "index": 16, "kind": "parameter", "displayName": "Allow Streaming", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option controls whether the CXF component, when running in PAYLOAD mode, will DOM parse the incoming messages into DOM Elements or keep the payload as a javax.xml.transform.Source object that would allow streaming in some cases." }, + "bus": { "index": 17, "kind": "parameter", "displayName": "Bus", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.cxf.Bus", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom configured CXF Bus." }, + "continuationTimeout": { "index": 18, "kind": "parameter", "displayName": "Continuation Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "30000", "description": "This option is used to set the CXF continuation timeout which could be used in CxfConsumer by default when the CXF server is using Jetty or Servlet transport." }, + "cxfBinding": { "index": 19, "kind": "parameter", "displayName": "Cxf Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.cxf.common.CxfBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom CxfBinding to control the binding between Camel Message and CXF Message." }, + "cxfConfigurer": { "index": 20, "kind": "parameter", "displayName": "Cxf Configurer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.cxf.jaxws.CxfConfigurer", "deprecated": false, "autowired": false, "secret": false, "description": "This option could apply the implementation of org.apache.camel.component.cxf.CxfEndpointConfigurer which supports to configure the CXF endpoint in programmatic way. User can configure the CXF server and client by implementing configure{ServerClient} method of CxfEndpointConfigurer." }, + "defaultBus": { "index": 21, "kind": "parameter", "displayName": "Default Bus", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will set the default bus when CXF endpoint create a bus by itself" }, + "headerFilterStrategy": { "index": 22, "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HeaderFilterStrategy to filter header to and from Camel message." }, + "mergeProtocolHeaders": { "index": 23, "kind": "parameter", "displayName": "Merge Protocol Headers", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to merge protocol headers. If enabled then propagating headers between Camel and CXF becomes more consistent and similar. For more details see CAMEL-6393." }, + "mtomEnabled": { "index": 24, "kind": "parameter", "displayName": "Mtom Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To enable MTOM (attachments). This requires to use POJO or PAYLOAD data format mode." }, + "properties": { "index": 25, "kind": "parameter", "displayName": "Properties", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Map", "prefix": "properties.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To set additional CXF options using the key\/value pairs from the Map. For example to turn on stacktraces in SOAP faults, properties.faultStackTraceEnabled=true. This is a multi-value option with prefix: properties." }, + "schemaValidationEnabled": { "index": 26, "kind": "parameter", "displayName": "Schema Validation Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable schema validation for request and response. Disabled by default for performance reason" }, + "skipPayloadMessagePartCheck": { "index": 27, "kind": "parameter", "displayName": "Skip Payload Message Part Check", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether SOAP message validation should be disabled." }, + "loggingFeatureEnabled": { "index": 28, "kind": "parameter", "displayName": "Logging Feature Enabled", "group": "logging", "label": "logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option enables CXF Logging Feature which writes inbound and outbound SOAP messages to log." }, + "loggingSizeLimit": { "index": 29, "kind": "parameter", "displayName": "Logging Size Limit", "group": "logging", "label": "logging", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 49152, "description": "To limit the total size of number of bytes the logger will output when logging feature has been enabled and -1 for no limit." }, + "skipFaultLogging": { "index": 30, "kind": "parameter", "displayName": "Skip Fault Logging", "group": "logging", "label": "logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option controls whether the PhaseInterceptorChain skips logging the Fault that it catches." }, + "password": { "index": 31, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "This option is used to set the basic authentication information of password for the CXF client." }, + "username": { "index": 32, "kind": "parameter", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "This option is used to set the basic authentication information of username for the CXF client." }, + "bindingId": { "index": 33, "kind": "parameter", "displayName": "Binding Id", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The bindingId for the service model to use." }, + "portName": { "index": 34, "kind": "parameter", "displayName": "Port Name", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint name this service is implementing, it maps to the wsdl:portname. In the format of ns:PORT_NAME where ns is a namespace prefix valid at this scope." }, + "publishedEndpointUrl": { "index": 35, "kind": "parameter", "displayName": "Published Endpoint Url", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option can override the endpointUrl that published from the WSDL which can be accessed with service address url plus wsd" }, + "serviceClass": { "index": 36, "kind": "parameter", "displayName": "Service Class", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.Class", "deprecated": false, "autowired": false, "secret": false, "description": "The class name of the SEI (Service Endpoint Interface) class which could have JSR181 annotation or not." }, + "serviceName": { "index": 37, "kind": "parameter", "displayName": "Service Name", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The service name this service is implementing, it maps to the wsdl:servicename." }, + "wsdlURL": { "index": 38, "kind": "parameter", "displayName": "Wsdl URL", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The location of the WSDL. Can be on the classpath, file system, or be hosted remotely." } } } diff --git a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfConsumer.java b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfConsumer.java index e6e7a82c69f5a..d2474251f79af 100644 --- a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfConsumer.java +++ b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfConsumer.java @@ -150,6 +150,8 @@ protected boolean isAsyncInvocationSupported(Exchange cxfExchange) { private class CxfConsumerInvoker implements Invoker { + private static final String MUTED_FAULT_MESSAGE = "Exchange processing failed"; + private final CxfEndpoint endpoint; CxfConsumerInvoker(CxfEndpoint endpoint) { @@ -338,12 +340,17 @@ private void setResponseBack(Exchange cxfExchange, org.apache.camel.Exchange cam } private void checkFailure(org.apache.camel.Exchange camelExchange, Exchange cxfExchange) throws Fault { - final Throwable t = extractThrowable(camelExchange); + // an exception set on the exchange is a route failure; one carried in the body is a fault the route + // chose to return, and stays part of the contract either way + final Throwable routeFailure = camelExchange.getException(); + final Throwable t = routeFailure != null ? routeFailure : extractFromBody(camelExchange, null); if (t != null) { cxfExchange.getInMessage().put(FaultMode.class, FaultMode.UNCHECKED_APPLICATION_FAULT); if (t instanceof Fault) { handleFault(cxfExchange, (Fault) t); + } else if (routeFailure != null && isMuted(t)) { + buildFaultFromThrowable(mutedThrowable()); } else { // This is not a CXF Fault. Build the CXF Fault manually. buildFaultFromThrowable(t); @@ -352,6 +359,26 @@ private void checkFailure(org.apache.camel.Exchange camelExchange, Exchange cxfE } } + /** + * Only an undeclared route failure is muted. An exception the service contract declares - annotated + * {@code @WebFault} - is what a SOAP client is written against, so suppressing it would break the contract + * rather than protect anything. + */ + private boolean isMuted(Throwable t) { + return ((CxfEndpoint) getEndpoint()).isMuteException() + && t.getClass().getAnnotation(WebFault.class) == null; + } + + /** + * Carries no class name, no message and no stack trace of the route's exception: CXF copies the message into + * the SOAP faultstring, and can be configured to put the stack trace in the fault detail. + */ + private static Throwable mutedThrowable() { + Exception muted = new Exception(MUTED_FAULT_MESSAGE); + muted.setStackTrace(new StackTraceElement[0]); + return muted; + } + private static void buildFaultFromThrowable(Throwable t) { Fault fault = new Fault(t); if (fault.getMessage() == null) { @@ -389,15 +416,9 @@ private static void handleFault(Exchange cxfExchange, Fault t) { throw t; } - private static Throwable extractThrowable(org.apache.camel.Exchange camelExchange) { - Throwable t = camelExchange.getException(); - if (t == null) { - // SOAP faults can be stored as exceptions as message body (to be backwards compatible) - t = extractFromBody(camelExchange, t); - } - return t; - } - + /** + * SOAP faults can be stored as exceptions as message body (to be backwards compatible). + */ private static Throwable extractFromBody(org.apache.camel.Exchange camelExchange, Throwable t) { Object body = camelExchange.getMessage().getBody(); if (body instanceof Throwable) { diff --git a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfEndpoint.java b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfEndpoint.java index 9fdb55a2b6a6c..1a734d6e94151 100644 --- a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfEndpoint.java +++ b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfEndpoint.java @@ -203,6 +203,8 @@ public class CxfEndpoint extends DefaultEndpoint implements AsyncEndpoint, Heade private boolean skipPayloadMessagePartCheck; @UriParam(label = "logging") private boolean skipFaultLogging; + @UriParam(label = "consumer", defaultValue = "true") + private boolean muteException = true; @UriParam(label = "advanced") private boolean mergeProtocolHeaders; @UriParam(label = "advanced") @@ -1460,6 +1462,20 @@ public void setSkipFaultLogging(boolean skipFaultLogging) { this.skipFaultLogging = skipFaultLogging; } + public boolean isMuteException() { + return muteException; + } + + /** + * If enabled and an Exchange failed processing on the consumer side, and the exception is not a SOAP fault the + * service contract declares, the SOAP fault returned to the caller won't contain the exception's class or message. + * Faults the route raises deliberately - a CXF {@code Fault}, an exception annotated {@code @WebFault}, or a + * {@code Throwable} set as the message body - are part of the contract and are always returned in full. + */ + public void setMuteException(boolean muteException) { + this.muteException = muteException; + } + public boolean isMergeProtocolHeaders() { return mergeProtocolHeaders; } diff --git a/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerContinuationTimeoutTest.java b/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerContinuationTimeoutTest.java index 8b402f8e58025..210ee92a65c04 100644 --- a/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerContinuationTimeoutTest.java +++ b/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerContinuationTimeoutTest.java @@ -62,42 +62,45 @@ public void configure() { .setBody(constant("Sensitive Data")) .to(simpleEndpointURI + "&continuationTimeout=5000&dataFormat=RAW"); - from(simpleEndpointURI + "&continuationTimeout=5000&dataFormat=RAW").process(new AsyncProcessorSupport() { - @Override - public boolean process(Exchange exchange, AsyncCallback asyncCallback) { - Message in = exchange.getIn(); - // check the content-length header is filtered - Object value = in.getHeader("Content-Length"); - assertNull(value, "The Content-Length header should be removed"); - // Get the request message - String request = in.getBody(String.class); - String priority = in.getHeader("priority", "fast", String.class); + // muteException=false: these tests assert the continuation-timeout message reaches the caller, + // which CAMEL-24477 otherwise replaces with a generic fault + from(simpleEndpointURI + "&continuationTimeout=5000&dataFormat=RAW&muteException=false") + .process(new AsyncProcessorSupport() { + @Override + public boolean process(Exchange exchange, AsyncCallback asyncCallback) { + Message in = exchange.getIn(); + // check the content-length header is filtered + Object value = in.getHeader("Content-Length"); + assertNull(value, "The Content-Length header should be removed"); + // Get the request message + String request = in.getBody(String.class); + String priority = in.getHeader("priority", "fast", String.class); - // need not to block this thread to simulate slow response so use a thread pool to wait - if ("slow".equalsIgnoreCase(priority)) { - pool.submit(() -> { - try { - log.info("Sleeping for 10 seconds to simulate slow response"); - Thread.sleep(10000); - } catch (InterruptedException e) { - // ignore - } finally { - asyncCallback.done(false); + // need not to block this thread to simulate slow response so use a thread pool to wait + if ("slow".equalsIgnoreCase(priority)) { + pool.submit(() -> { + try { + log.info("Sleeping for 10 seconds to simulate slow response"); + Thread.sleep(10000); + } catch (InterruptedException e) { + // ignore + } finally { + asyncCallback.done(false); + } + }); + return false; + } else { + // Send the response message back + if (request.indexOf(ECHO_METHOD) > 0) { + exchange.getMessage().setBody(ECHO_RESPONSE); + } else { // echoBoolean call + exchange.getMessage().setBody(ECHO_BOOLEAN_RESPONSE); + } } - }); - return false; - } else { - // Send the response message back - if (request.indexOf(ECHO_METHOD) > 0) { - exchange.getMessage().setBody(ECHO_RESPONSE); - } else { // echoBoolean call - exchange.getMessage().setBody(ECHO_BOOLEAN_RESPONSE); + asyncCallback.done(true); + return true; } - } - asyncCallback.done(true); - return true; - } - }); + }); } }; } diff --git a/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerMuteExceptionTest.java b/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerMuteExceptionTest.java new file mode 100644 index 0000000000000..92b7b1aafbcd8 --- /dev/null +++ b/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerMuteExceptionTest.java @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.cxf.jaxws; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.cxf.common.CXFTestSupport; +import org.apache.camel.test.junit5.CamelTestSupport; +import org.apache.cxf.frontend.ClientFactoryBean; +import org.apache.cxf.greeter_control.Greeter; +import org.apache.cxf.greeter_control.PingMeFault; +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +/** + * The consumer used to put the route exception's message into the SOAP fault returned to the caller, so any + * remote-triggerable failure handed the caller internal detail. + *

+ * {@code muteException} defaults to true, matching the http consumers aligned by CAMEL-23651. It applies only to + * undeclared failures: an exception the service contract declares with {@code @WebFault} is what a SOAP client + * is written against, so it is still returned in full. + */ +class CxfConsumerMuteExceptionTest extends CamelTestSupport { + + private static final String DETAIL = "the-internal-detail-a-caller-must-not-see"; + + private static final String MUTED_ADDRESS + = "http://localhost:" + CXFTestSupport.getPort1() + "/CxfConsumerMuteExceptionTest/muted"; + private static final String UNMUTED_ADDRESS + = "http://localhost:" + CXFTestSupport.getPort2() + "/CxfConsumerMuteExceptionTest/unmuted"; + private static final String DECLARED_ADDRESS + = "http://localhost:" + CXFTestSupport.getPort3() + "/CxfConsumerMuteExceptionTest/declared"; + + private static final String SERVICE_CLASS = "serviceClass=org.apache.cxf.greeter_control.Greeter"; + + @Test + void anUndeclaredFailureIsNotDescribedToTheCaller() { + assertThatThrownBy(() -> client(MUTED_ADDRESS).pingMe()) + .as("the SOAP fault must carry neither the class nor the message of the route's exception") + .hasMessageNotContaining(DETAIL) + .hasMessageNotContaining("IllegalStateException"); + } + + @Test + void muteExceptionFalseDescribesTheFailureAsBefore() { + assertThatThrownBy(() -> client(UNMUTED_ADDRESS).pingMe()) + .hasMessageContaining(DETAIL); + } + + /** + * The guarantee that makes muting safe to default on: a fault the WSDL declares is part of the contract, so muting + * must not touch it. Without this carve-out every SOAP client written against a declared fault would break. + */ + @Test + void aDeclaredWebFaultIsStillReturnedInFullWhileMuted() { + assertThatThrownBy(() -> client(DECLARED_ADDRESS).pingMe()) + .isInstanceOf(PingMeFault.class) + .hasMessageContaining(DETAIL); + } + + @Test + void muteExceptionDefaultsToTrue() { + CxfEndpoint endpoint = context.getEndpoint("cxf://" + MUTED_ADDRESS + "?" + SERVICE_CLASS, CxfEndpoint.class); + assertThat(endpoint.isMuteException()).isTrue(); + } + + private static Greeter client(String address) { + JaxWsProxyFactoryBean proxyFactory = new JaxWsProxyFactoryBean(); + ClientFactoryBean clientBean = proxyFactory.getClientFactoryBean(); + clientBean.setAddress(address); + clientBean.setServiceClass(Greeter.class); + return (Greeter) proxyFactory.create(); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("cxf://" + MUTED_ADDRESS + "?" + SERVICE_CLASS) + .process(e -> { + throw new IllegalStateException(DETAIL); + }); + from("cxf://" + UNMUTED_ADDRESS + "?" + SERVICE_CLASS + "&muteException=false") + .process(e -> { + throw new IllegalStateException(DETAIL); + }); + from("cxf://" + DECLARED_ADDRESS + "?" + SERVICE_CLASS) + .process(e -> { + throw new PingMeFault(DETAIL); + }); + } + }; + } +} diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CxfEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CxfEndpointBuilderFactory.java index ddad0322eb9e9..3c116bb13a8ca 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CxfEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CxfEndpointBuilderFactory.java @@ -113,6 +113,48 @@ default CxfEndpointConsumerBuilder wrappedStyle(String wrappedStyle) { doSetProperty("wrappedStyle", wrappedStyle); return this; } + /** + * If enabled and an Exchange failed processing on the consumer side, + * and the exception is not a SOAP fault the service contract declares, + * the SOAP fault returned to the caller won't contain the exception's + * class or message. Faults the route raises deliberately - a CXF Fault, + * an exception annotated {code WebFault}, or a Throwable set as the + * message body - are part of the contract and are always returned in + * full. + * + * The option is a: boolean type. + * + * Default: true + * Group: consumer + * + * @param muteException the value to set + * @return the dsl builder + */ + default CxfEndpointConsumerBuilder muteException(boolean muteException) { + doSetProperty("muteException", muteException); + return this; + } + /** + * If enabled and an Exchange failed processing on the consumer side, + * and the exception is not a SOAP fault the service contract declares, + * the SOAP fault returned to the caller won't contain the exception's + * class or message. Faults the route raises deliberately - a CXF Fault, + * an exception annotated {code WebFault}, or a Throwable set as the + * message body - are part of the contract and are always returned in + * full. + * + * The option will be converted to a boolean type. + * + * Default: true + * Group: consumer + * + * @param muteException the value to set + * @return the dsl builder + */ + default CxfEndpointConsumerBuilder muteException(String muteException) { + doSetProperty("muteException", muteException); + return this; + } /** * This option enables CXF Logging Feature which writes inbound and * outbound SOAP messages to log. From ad49e55d0c124cbc1220f0912e56eb48000fa0f9 Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Mon, 31 Aug 2026 10:05:56 +0200 Subject: [PATCH 3/5] CAMEL-24478: camel-grpc - add a muteException consumer option The consumer put the route exception's message into the gRPC status description, so the caller received internal detail on failure. (cherry picked from commit 3c99874122e0c4dbad655a1e32bbcaf48cee1e67) Adapted for this branch: GrpcTestSupport and its getRoutePort helper do not exist here, so GrpcConsumerExceptionTest keeps the existing AvailablePortFinder constants and binds the unmuted route to a second fixed port instead of port 0 plus a route id lookup. The main commit's unrelated YAML DSL schema regeneration, which drops csimple, is left out. Co-authored-by: Claude Opus 5 (1M context) --- .../grpc/GrpcEndpointConfigurer.java | 6 +++ .../grpc/GrpcEndpointUriFactory.java | 3 +- .../org/apache/camel/component/grpc/grpc.json | 53 ++++++++++--------- .../component/grpc/GrpcConfiguration.java | 15 ++++++ .../grpc/server/GrpcMethodHandler.java | 8 ++- .../grpc/GrpcConsumerExceptionTest.java | 50 +++++++++++++++-- .../dsl/GrpcEndpointBuilderFactory.java | 34 ++++++++++++ 7 files changed, 137 insertions(+), 32 deletions(-) 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 8341a2a1812c5..637bddc7970bf 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 boolean configure(CamelContext camelContext, Object obj, String name, Obj 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 getOptionType(String name, boolean ignoreCase) { 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 Object getOptionValue(Object obj, String name, boolean ignoreCase) { 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 4258ed3a102c9..c6efcd0d82b91 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 @@ -23,7 +23,7 @@ public class GrpcEndpointUriFactory extends org.apache.camel.support.component.E private static final Set SECRET_PROPERTY_NAMES; private static final Map MULTI_VALUE_PREFIXES; static { - Set props = new HashSet<>(45); + Set props = new HashSet<>(46); props.add("authenticationType"); props.add("autoDiscoverClientInterceptors"); props.add("autoDiscoverServerInterceptors"); @@ -56,6 +56,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 39f2a5491e84c..58de6ca946eef 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 8 KiB." }, "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 maxRstFramesPerWindow per maxRstPeriodSeconds. This option MUST be used in conjunction with maxRstPeriodSeconds for it to be effective." }, "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 MUST be used in conjunction with maxRstFramesPerWindow for it to be effective." }, - "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 permitted to configure. The server will try to detect clients exceeding this rate and will forcefully close the connection." }, - "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 PINGs even if there are no outstanding RPCs on the connection." }, - "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. If this value is set to true, then the response observer of gRPC call will be set with the name GrpcConstants.GRPC_RESPONSE_OBSERVER in the Exchange object. Please note that the stream observer's onNext(), onError(), onCompleted() methods should be called in the route." }, - "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "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 default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "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, if true, the component will look for a ClientInterceptor instance in the registry automatically otherwise it will skip that checking." }, - "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 exchange to all exchanges created for route defined by streamRepliesTo." }, - "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": "The mode used to communicate with a remote gRPC server. In SIMPLE mode a single exchange is translated into a remote procedure call. In STREAMING mode all exchanges will be sent within the same request (input and output of the recipient gRPC service must be of type 'stream')." }, - "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_RESPONSE_OBSERVER is set. Takes its value and calls onNext, onError and onComplete on that StreamObserver. All other gRPC parameters are ignored." }, - "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "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": "Authentication method type in advance to the SSL\/TLS negotiation" }, - "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": "configuration", "description": "JSON Web Token sign algorithm" }, - "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, "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 resource in PEM format link" }, - "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, "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 negotiation type used for HTTP\/2 communication" }, - "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 JSON format resource link supported by the Google Cloud SDK" }, - "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 certificates collection file resource in PEM format for verifying the remote endpoint's certificate" } + "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 returned to the client won't contain the exception's message." }, + "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 permitted to configure. The server will try to detect clients exceeding this rate and will forcefully close the connection." }, + "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 PINGs even if there are no outstanding RPCs on the connection." }, + "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. If this value is set to true, then the response observer of gRPC call will be set with the name GrpcConstants.GRPC_RESPONSE_OBSERVER in the Exchange object. Please note that the stream observer's onNext(), onError(), onCompleted() methods should be called in the route." }, + "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "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 default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "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, if true, the component will look for a ClientInterceptor instance in the registry automatically otherwise it will skip that checking." }, + "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 exchange to all exchanges created for route defined by streamRepliesTo." }, + "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": "The mode used to communicate with a remote gRPC server. In SIMPLE mode a single exchange is translated into a remote procedure call. In STREAMING mode all exchanges will be sent within the same request (input and output of the recipient gRPC service must be of type 'stream')." }, + "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_RESPONSE_OBSERVER is set. Takes its value and calls onNext, onError and onComplete on that StreamObserver. All other gRPC parameters are ignored." }, + "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "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": "Authentication method type in advance to the SSL\/TLS negotiation" }, + "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": "configuration", "description": "JSON Web Token sign algorithm" }, + "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, "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 resource in PEM format link" }, + "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, "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 negotiation type used for HTTP\/2 communication" }, + "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 JSON format resource link supported by the Google Cloud SDK" }, + "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 certificates collection file resource in PEM format for verifying the remote endpoint's certificate" } } } 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 ebe233b2fec26..b580abf5ac4bd 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 serverInterceptors = Collections.emptyList(); @UriParam(label = "consumer", defaultValue = "true") @@ -449,6 +452,18 @@ public void setRouteControlledStreamObserver(boolean routeControlledStreamObserv 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 f0ee042534c9a..6b0ddb052f9b3 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 @@ */ 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 void handle(Object body, StreamObserver responseObserver, String 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 a9fb3566d9ce1..5580fabfca550 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 @@ -35,6 +35,7 @@ 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; @@ -43,18 +44,25 @@ public class GrpcConsumerExceptionTest extends CamelTestSupport { private static final Logger LOG = LoggerFactory.getLogger(GrpcConsumerExceptionTest.class); private static final int GRPC_SYNC_REQUEST_TEST_PORT = AvailablePortFinder.getNextAvailable(); + private static final int GRPC_UNMUTED_TEST_PORT = AvailablePortFinder.getNextAvailable(); 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() { syncRequestChannel = ManagedChannelBuilder.forAddress("localhost", GRPC_SYNC_REQUEST_TEST_PORT).usePlaintext().build(); blockingStub = PingPongGrpc.newBlockingStub(syncRequestChannel); - nonBlockingStub = PingPongGrpc.newStub(syncRequestChannel); + + unmutedChannel = ManagedChannelBuilder.forAddress("localhost", GRPC_UNMUTED_TEST_PORT).usePlaintext().build(); + unmutedStub = PingPongGrpc.newBlockingStub(unmutedChannel); + unmutedNonBlockingStub = PingPongGrpc.newStub(unmutedChannel); } @AfterEach @@ -62,6 +70,37 @@ public void stopGrpcChannels() { 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 @@ -84,7 +123,7 @@ private void runExchangeExceptionHandlingTest() throws InterruptedException { = 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)); } @@ -95,8 +134,11 @@ protected RouteBuilder createRouteBuilder() { public void configure() { from("grpc://localhost:" + GRPC_SYNC_REQUEST_TEST_PORT + "/org.apache.camel.component.grpc.PingPong?synchronous=true") - .throwException(CamelException.class, "GRPC Camel exception message"); + .throwException(CamelException.class, ROUTE_EXCEPTION_MESSAGE); + from("grpc://localhost:" + GRPC_UNMUTED_TEST_PORT + + "/org.apache.camel.component.grpc.PingPong?synchronous=true&muteException=false") + .throwException(CamelException.class, ROUTE_EXCEPTION_MESSAGE); } }; } 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 9958f7e6e6cbd..39cc1b3d4a37f 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 @@ default GrpcEndpointConsumerBuilder maxRstPeriodSeconds(String maxRstPeriodSecon 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: boolean 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 boolean 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 From a803b3e9d33bd2c21f3ed72b013e515af0fa6208 Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Mon, 31 Aug 2026 10:07:15 +0200 Subject: [PATCH 4/5] chore: regenerate the cxf and grpc catalog metadata on this branch The catalog copies are generated from the module descriptors, which the two backported commits above changed. Regenerated here rather than taken from main, so no main-only metadata comes across. Co-authored-by: Claude Opus 5 (1M context) --- .../apache/camel/catalog/components/cxf.json | 69 ++++++++++--------- .../apache/camel/catalog/components/grpc.json | 53 +++++++------- 2 files changed, 62 insertions(+), 60 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cxf.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cxf.json index 17814dedff0ea..730ebfb8dec4f 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cxf.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cxf.json @@ -46,39 +46,40 @@ "address": { "index": 1, "kind": "path", "displayName": "Address", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The service publish address." }, "dataFormat": { "index": 2, "kind": "parameter", "displayName": "Data Format", "group": "common", "label": "", "required": false, "type": "enum", "javaType": "org.apache.camel.component.cxf.common.DataFormat", "enum": [ "PAYLOAD", "RAW", "MESSAGE", "CXF_MESSAGE", "POJO" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "POJO", "description": "The data type messages supported by the CXF endpoint." }, "wrappedStyle": { "index": 3, "kind": "parameter", "displayName": "Wrapped Style", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "The WSDL style that describes how parameters are represented in the SOAP body. If the value is false, CXF will chose the document-literal unwrapped style, If the value is true, CXF will chose the document-literal wrapped style" }, - "bridgeErrorHandler": { "index": 4, "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "exceptionHandler": { "index": 5, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "exchangePattern": { "index": 6, "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." }, - "cookieHandler": { "index": 7, "kind": "parameter", "displayName": "Cookie Handler", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.http.base.cookie.CookieHandler", "deprecated": false, "autowired": false, "secret": false, "description": "Configure a cookie handler to maintain a HTTP session" }, - "defaultOperationName": { "index": 8, "kind": "parameter", "displayName": "Default Operation Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option will set the default operationName that will be used by the CxfProducer which invokes the remote service." }, - "defaultOperationNamespace": { "index": 9, "kind": "parameter", "displayName": "Default Operation Namespace", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option will set the default operationNamespace that will be used by the CxfProducer which invokes the remote service." }, - "hostnameVerifier": { "index": 10, "kind": "parameter", "displayName": "Hostname Verifier", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "The hostname verifier to be used. Use the # notation to reference a HostnameVerifier from the registry." }, - "sslContextParameters": { "index": 11, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "The Camel SSL setting reference. Use the # notation to reference the SSL Context." }, - "wrapped": { "index": 12, "kind": "parameter", "displayName": "Wrapped", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Which kind of operation that CXF endpoint producer will invoke" }, - "lazyStartProducer": { "index": 13, "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "synchronous": { "index": 14, "kind": "parameter", "displayName": "Synchronous", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used" }, - "allowStreaming": { "index": 15, "kind": "parameter", "displayName": "Allow Streaming", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option controls whether the CXF component, when running in PAYLOAD mode, will DOM parse the incoming messages into DOM Elements or keep the payload as a javax.xml.transform.Source object that would allow streaming in some cases." }, - "bus": { "index": 16, "kind": "parameter", "displayName": "Bus", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.cxf.Bus", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom configured CXF Bus." }, - "continuationTimeout": { "index": 17, "kind": "parameter", "displayName": "Continuation Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "30000", "description": "This option is used to set the CXF continuation timeout which could be used in CxfConsumer by default when the CXF server is using Jetty or Servlet transport." }, - "cxfBinding": { "index": 18, "kind": "parameter", "displayName": "Cxf Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.cxf.common.CxfBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom CxfBinding to control the binding between Camel Message and CXF Message." }, - "cxfConfigurer": { "index": 19, "kind": "parameter", "displayName": "Cxf Configurer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.cxf.jaxws.CxfConfigurer", "deprecated": false, "autowired": false, "secret": false, "description": "This option could apply the implementation of org.apache.camel.component.cxf.CxfEndpointConfigurer which supports to configure the CXF endpoint in programmatic way. User can configure the CXF server and client by implementing configure{ServerClient} method of CxfEndpointConfigurer." }, - "defaultBus": { "index": 20, "kind": "parameter", "displayName": "Default Bus", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will set the default bus when CXF endpoint create a bus by itself" }, - "headerFilterStrategy": { "index": 21, "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HeaderFilterStrategy to filter header to and from Camel message." }, - "mergeProtocolHeaders": { "index": 22, "kind": "parameter", "displayName": "Merge Protocol Headers", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to merge protocol headers. If enabled then propagating headers between Camel and CXF becomes more consistent and similar. For more details see CAMEL-6393." }, - "mtomEnabled": { "index": 23, "kind": "parameter", "displayName": "Mtom Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To enable MTOM (attachments). This requires to use POJO or PAYLOAD data format mode." }, - "properties": { "index": 24, "kind": "parameter", "displayName": "Properties", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Map", "prefix": "properties.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To set additional CXF options using the key\/value pairs from the Map. For example to turn on stacktraces in SOAP faults, properties.faultStackTraceEnabled=true. This is a multi-value option with prefix: properties." }, - "schemaValidationEnabled": { "index": 25, "kind": "parameter", "displayName": "Schema Validation Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable schema validation for request and response. Disabled by default for performance reason" }, - "skipPayloadMessagePartCheck": { "index": 26, "kind": "parameter", "displayName": "Skip Payload Message Part Check", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether SOAP message validation should be disabled." }, - "loggingFeatureEnabled": { "index": 27, "kind": "parameter", "displayName": "Logging Feature Enabled", "group": "logging", "label": "logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option enables CXF Logging Feature which writes inbound and outbound SOAP messages to log." }, - "loggingSizeLimit": { "index": 28, "kind": "parameter", "displayName": "Logging Size Limit", "group": "logging", "label": "logging", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 49152, "description": "To limit the total size of number of bytes the logger will output when logging feature has been enabled and -1 for no limit." }, - "skipFaultLogging": { "index": 29, "kind": "parameter", "displayName": "Skip Fault Logging", "group": "logging", "label": "logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option controls whether the PhaseInterceptorChain skips logging the Fault that it catches." }, - "password": { "index": 30, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "This option is used to set the basic authentication information of password for the CXF client." }, - "username": { "index": 31, "kind": "parameter", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "This option is used to set the basic authentication information of username for the CXF client." }, - "bindingId": { "index": 32, "kind": "parameter", "displayName": "Binding Id", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The bindingId for the service model to use." }, - "portName": { "index": 33, "kind": "parameter", "displayName": "Port Name", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint name this service is implementing, it maps to the wsdl:portname. In the format of ns:PORT_NAME where ns is a namespace prefix valid at this scope." }, - "publishedEndpointUrl": { "index": 34, "kind": "parameter", "displayName": "Published Endpoint Url", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option can override the endpointUrl that published from the WSDL which can be accessed with service address url plus wsd" }, - "serviceClass": { "index": 35, "kind": "parameter", "displayName": "Service Class", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.Class", "deprecated": false, "autowired": false, "secret": false, "description": "The class name of the SEI (Service Endpoint Interface) class which could have JSR181 annotation or not." }, - "serviceName": { "index": 36, "kind": "parameter", "displayName": "Service Name", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The service name this service is implementing, it maps to the wsdl:servicename." }, - "wsdlURL": { "index": 37, "kind": "parameter", "displayName": "Wsdl URL", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The location of the WSDL. Can be on the classpath, file system, or be hosted remotely." } + "muteException": { "index": 4, "kind": "parameter", "displayName": "Mute Exception", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "If enabled and an Exchange failed processing on the consumer side, and the exception is not a SOAP fault the service contract declares, the SOAP fault returned to the caller won't contain the exception's class or message. Faults the route raises deliberately - a CXF Fault, an exception annotated {code WebFault}, or a Throwable set as the message body - are part of the contract and are always returned in full." }, + "bridgeErrorHandler": { "index": 5, "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "exceptionHandler": { "index": 6, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "exchangePattern": { "index": 7, "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." }, + "cookieHandler": { "index": 8, "kind": "parameter", "displayName": "Cookie Handler", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.http.base.cookie.CookieHandler", "deprecated": false, "autowired": false, "secret": false, "description": "Configure a cookie handler to maintain a HTTP session" }, + "defaultOperationName": { "index": 9, "kind": "parameter", "displayName": "Default Operation Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option will set the default operationName that will be used by the CxfProducer which invokes the remote service." }, + "defaultOperationNamespace": { "index": 10, "kind": "parameter", "displayName": "Default Operation Namespace", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option will set the default operationNamespace that will be used by the CxfProducer which invokes the remote service." }, + "hostnameVerifier": { "index": 11, "kind": "parameter", "displayName": "Hostname Verifier", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "The hostname verifier to be used. Use the # notation to reference a HostnameVerifier from the registry." }, + "sslContextParameters": { "index": 12, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "The Camel SSL setting reference. Use the # notation to reference the SSL Context." }, + "wrapped": { "index": 13, "kind": "parameter", "displayName": "Wrapped", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Which kind of operation that CXF endpoint producer will invoke" }, + "lazyStartProducer": { "index": 14, "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "synchronous": { "index": 15, "kind": "parameter", "displayName": "Synchronous", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used" }, + "allowStreaming": { "index": 16, "kind": "parameter", "displayName": "Allow Streaming", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option controls whether the CXF component, when running in PAYLOAD mode, will DOM parse the incoming messages into DOM Elements or keep the payload as a javax.xml.transform.Source object that would allow streaming in some cases." }, + "bus": { "index": 17, "kind": "parameter", "displayName": "Bus", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.cxf.Bus", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom configured CXF Bus." }, + "continuationTimeout": { "index": 18, "kind": "parameter", "displayName": "Continuation Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "30000", "description": "This option is used to set the CXF continuation timeout which could be used in CxfConsumer by default when the CXF server is using Jetty or Servlet transport." }, + "cxfBinding": { "index": 19, "kind": "parameter", "displayName": "Cxf Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.cxf.common.CxfBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom CxfBinding to control the binding between Camel Message and CXF Message." }, + "cxfConfigurer": { "index": 20, "kind": "parameter", "displayName": "Cxf Configurer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.cxf.jaxws.CxfConfigurer", "deprecated": false, "autowired": false, "secret": false, "description": "This option could apply the implementation of org.apache.camel.component.cxf.CxfEndpointConfigurer which supports to configure the CXF endpoint in programmatic way. User can configure the CXF server and client by implementing configure{ServerClient} method of CxfEndpointConfigurer." }, + "defaultBus": { "index": 21, "kind": "parameter", "displayName": "Default Bus", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will set the default bus when CXF endpoint create a bus by itself" }, + "headerFilterStrategy": { "index": 22, "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HeaderFilterStrategy to filter header to and from Camel message." }, + "mergeProtocolHeaders": { "index": 23, "kind": "parameter", "displayName": "Merge Protocol Headers", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to merge protocol headers. If enabled then propagating headers between Camel and CXF becomes more consistent and similar. For more details see CAMEL-6393." }, + "mtomEnabled": { "index": 24, "kind": "parameter", "displayName": "Mtom Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To enable MTOM (attachments). This requires to use POJO or PAYLOAD data format mode." }, + "properties": { "index": 25, "kind": "parameter", "displayName": "Properties", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Map", "prefix": "properties.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To set additional CXF options using the key\/value pairs from the Map. For example to turn on stacktraces in SOAP faults, properties.faultStackTraceEnabled=true. This is a multi-value option with prefix: properties." }, + "schemaValidationEnabled": { "index": 26, "kind": "parameter", "displayName": "Schema Validation Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable schema validation for request and response. Disabled by default for performance reason" }, + "skipPayloadMessagePartCheck": { "index": 27, "kind": "parameter", "displayName": "Skip Payload Message Part Check", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether SOAP message validation should be disabled." }, + "loggingFeatureEnabled": { "index": 28, "kind": "parameter", "displayName": "Logging Feature Enabled", "group": "logging", "label": "logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option enables CXF Logging Feature which writes inbound and outbound SOAP messages to log." }, + "loggingSizeLimit": { "index": 29, "kind": "parameter", "displayName": "Logging Size Limit", "group": "logging", "label": "logging", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 49152, "description": "To limit the total size of number of bytes the logger will output when logging feature has been enabled and -1 for no limit." }, + "skipFaultLogging": { "index": 30, "kind": "parameter", "displayName": "Skip Fault Logging", "group": "logging", "label": "logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "This option controls whether the PhaseInterceptorChain skips logging the Fault that it catches." }, + "password": { "index": 31, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "This option is used to set the basic authentication information of password for the CXF client." }, + "username": { "index": 32, "kind": "parameter", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "This option is used to set the basic authentication information of username for the CXF client." }, + "bindingId": { "index": 33, "kind": "parameter", "displayName": "Binding Id", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The bindingId for the service model to use." }, + "portName": { "index": 34, "kind": "parameter", "displayName": "Port Name", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint name this service is implementing, it maps to the wsdl:portname. In the format of ns:PORT_NAME where ns is a namespace prefix valid at this scope." }, + "publishedEndpointUrl": { "index": 35, "kind": "parameter", "displayName": "Published Endpoint Url", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option can override the endpointUrl that published from the WSDL which can be accessed with service address url plus wsd" }, + "serviceClass": { "index": 36, "kind": "parameter", "displayName": "Service Class", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.Class", "deprecated": false, "autowired": false, "secret": false, "description": "The class name of the SEI (Service Endpoint Interface) class which could have JSR181 annotation or not." }, + "serviceName": { "index": 37, "kind": "parameter", "displayName": "Service Name", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The service name this service is implementing, it maps to the wsdl:servicename." }, + "wsdlURL": { "index": 38, "kind": "parameter", "displayName": "Wsdl URL", "group": "service", "label": "service", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The location of the WSDL. Can be on the classpath, file system, or be hosted remotely." } } } 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 39f2a5491e84c..58de6ca946eef 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 8 KiB." }, "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 maxRstFramesPerWindow per maxRstPeriodSeconds. This option MUST be used in conjunction with maxRstPeriodSeconds for it to be effective." }, "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 MUST be used in conjunction with maxRstFramesPerWindow for it to be effective." }, - "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 permitted to configure. The server will try to detect clients exceeding this rate and will forcefully close the connection." }, - "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 PINGs even if there are no outstanding RPCs on the connection." }, - "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. If this value is set to true, then the response observer of gRPC call will be set with the name GrpcConstants.GRPC_RESPONSE_OBSERVER in the Exchange object. Please note that the stream observer's onNext(), onError(), onCompleted() methods should be called in the route." }, - "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "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 default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, - "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, if true, the component will look for a ClientInterceptor instance in the registry automatically otherwise it will skip that checking." }, - "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 exchange to all exchanges created for route defined by streamRepliesTo." }, - "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": "The mode used to communicate with a remote gRPC server. In SIMPLE mode a single exchange is translated into a remote procedure call. In STREAMING mode all exchanges will be sent within the same request (input and output of the recipient gRPC service must be of type 'stream')." }, - "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_RESPONSE_OBSERVER is set. Takes its value and calls onNext, onError and onComplete on that StreamObserver. All other gRPC parameters are ignored." }, - "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "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": "Authentication method type in advance to the SSL\/TLS negotiation" }, - "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": "configuration", "description": "JSON Web Token sign algorithm" }, - "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, "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 resource in PEM format link" }, - "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, "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 negotiation type used for HTTP\/2 communication" }, - "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 JSON format resource link supported by the Google Cloud SDK" }, - "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 certificates collection file resource in PEM format for verifying the remote endpoint's certificate" } + "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 returned to the client won't contain the exception's message." }, + "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 permitted to configure. The server will try to detect clients exceeding this rate and will forcefully close the connection." }, + "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 PINGs even if there are no outstanding RPCs on the connection." }, + "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. If this value is set to true, then the response observer of gRPC call will be set with the name GrpcConstants.GRPC_RESPONSE_OBSERVER in the Exchange object. Please note that the stream observer's onNext(), onError(), onCompleted() methods should be called in the route." }, + "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 messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "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 default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored." }, + "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, if true, the component will look for a ClientInterceptor instance in the registry automatically otherwise it will skip that checking." }, + "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 exchange to all exchanges created for route defined by streamRepliesTo." }, + "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": "The mode used to communicate with a remote gRPC server. In SIMPLE mode a single exchange is translated into a remote procedure call. In STREAMING mode all exchanges will be sent within the same request (input and output of the recipient gRPC service must be of type 'stream')." }, + "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_RESPONSE_OBSERVER is set. Takes its value and calls onNext, onError and onComplete on that StreamObserver. All other gRPC parameters are ignored." }, + "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 producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "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": "Authentication method type in advance to the SSL\/TLS negotiation" }, + "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": "configuration", "description": "JSON Web Token sign algorithm" }, + "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, "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 resource in PEM format link" }, + "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, "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 negotiation type used for HTTP\/2 communication" }, + "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 JSON format resource link supported by the Google Cloud SDK" }, + "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 certificates collection file resource in PEM format for verifying the remote endpoint's certificate" } } } From ca5bf8afad0d0dd1b99121b2882726324fc9b3dc Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Mon, 31 Aug 2026 14:31:16 +0200 Subject: [PATCH 5/5] chore: update GreeterClientTest for camel-cxf muteException default CxfEndpoint's muteException consumer option now defaults to true (CAMEL-24477), so an undeclared route failure such as this test's authorization denial no longer leaks its message to the SOAP caller. (cherry picked from commit f922ada7c747a580235a8b7f8b9d8d8eff4b4dcf) Co-authored-by: Claude Opus 5 (1M context) --- .../apache/camel/itest/security/GreeterClientTest.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/security/GreeterClientTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/security/GreeterClientTest.java index 995aaeff783a0..fb84adf15dde4 100644 --- a/tests/camel-itest/src/test/java/org/apache/camel/itest/security/GreeterClientTest.java +++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/security/GreeterClientTest.java @@ -118,12 +118,9 @@ void testServiceWithNotAuthorizedUser() { fail("should fail"); } catch (Exception ex) { assertTrue(ex instanceof SOAPFaultException, "Get a wrong type exception."); - assertTrue(ex.getMessage().startsWith("Cannot access the processor which has been protected."), - "Get a wrong exception message"); - assertTrue( - ex.getMessage().endsWith( - "Caused by: [org.springframework.security.authorization.AuthorizationDeniedException - Access Denied]"), - "Get a wrong exception message"); + // CxfEndpoint's muteException consumer option defaults to true (CAMEL-24477): an undeclared + // route failure - such as this authorization denial - no longer leaks its message to the caller. + assertEquals("Exchange processing failed", ex.getMessage(), "Get a wrong exception message"); } }