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

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


The following commit(s) were added to refs/heads/camel-karaf-3.18.x by this 
push:
     new 1d6ef764 CAMEL-18344: Supporting camel "camel-google-pubsub" and 
"camel-grpc" OSGi deployment (#180) (#185)
1d6ef764 is described below

commit 1d6ef764a1d3441bb774ac96d0cfd70112c4f465
Author: Nicolas Filotto <essob...@users.noreply.github.com>
AuthorDate: Sun Sep 4 12:48:28 2022 +0200

    CAMEL-18344: Supporting camel "camel-google-pubsub" and "camel-grpc" OSGi 
deployment (#180) (#185)
    
    Fix for https://issues.apache.org/jira/browse/CAMEL-18344 (3.18.x)
    
    ## Motivation
    
    The features camel-google-pubsub and camel-grpc have been removed from 
camel-karaf due to some integrations issues but as some users need it, it is 
important to put them back.
    
    ## Modifications:
    
    * Re-add the features
    * Use new servicemix-bundles that still need to be approved, merged, and 
released
    * Add camel-jira from 
https://github.com/apache/camel-karaf/commit/0e63ec709cdcb1ce4ca48a29a2e8ca88d26abd31
    * Fix camel-jira feature that is affected by the changes in the bundle 
google-http-client
---
 .../camel/catalog/karaf/components.properties      |  3 +
 .../catalog/karaf/components/google-pubsub.json    | 61 ++++++++++++++
 .../camel/catalog/karaf/components/grpc.json       | 68 +++++++++++++++
 .../camel/catalog/karaf/components/jira.json       | 77 +++++++++++++++++
 .../karaf/features/src/main/resources/features.xml | 96 +++++++++++++++++++++-
 pom.xml                                            | 15 ++++
 6 files changed, 319 insertions(+), 1 deletion(-)

diff --git 
a/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components.properties
 
b/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components.properties
index 0c6e9f81..de0e69ee 100644
--- 
a/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components.properties
+++ 
b/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components.properties
@@ -73,8 +73,10 @@ ftp
 git
 github
 google-bigquery
+google-pubsub
 grape
 graphql
+grpc
 guava-eventbus
 http
 influxdb
@@ -85,6 +87,7 @@ jcache
 jcr
 jdbc
 jetty
+jira
 jms
 jmx
 jolt
diff --git 
a/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/google-pubsub.json
 
b/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/google-pubsub.json
new file mode 100644
index 00000000..55c6f303
--- /dev/null
+++ 
b/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/google-pubsub.json
@@ -0,0 +1,61 @@
+{
+  "component": {
+    "kind": "component",
+    "name": "google-pubsub",
+    "title": "Google Pubsub",
+    "description": "Send and receive messages to\/from Google Cloud Platform 
PubSub Service.",
+    "deprecated": false,
+    "firstVersion": "2.19.0",
+    "label": "cloud,messaging",
+    "javaType": 
"org.apache.camel.component.google.pubsub.GooglePubsubComponent",
+    "supportLevel": "Stable",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-pubsub",
+    "version": "3.18.2-SNAPSHOT",
+    "scheme": "google-pubsub",
+    "extendsScheme": "",
+    "syntax": "google-pubsub:projectId:destinationName",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false
+  },
+  "componentProperties": {
+    "authenticate": { "kind": "property", "displayName": "Authenticate", 
"group": "common", "label": "common", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": true, "description": "Use Credentials when interacting 
with PubSub service (no authentication is required when using emulator)." },
+    "endpoint": { "kind": "property", "displayName": "Endpoint", "group": 
"common", "label": "common", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Endpoint to use with local Pub\/Sub emulator." },
+    "serviceAccountKey": { "kind": "property", "displayName": "Service Account 
Key", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The Service account key that can be 
used as credentials for the PubSub publisher\/subscriber. It can be loaded by 
default from classpath, but you can prefix with classpath:, file:, or http: to 
load the resource from different  [...]
+    "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error 
Handler", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Allows for bridging the 
consumer to the Camel routing Error Handler, which mean any exceptions occurred 
while the consumer is trying to pickup incoming messages, or the likes, will 
now be processed as a me [...]
+    "synchronousPullRetryableCodes": { "kind": "property", "displayName": 
"Synchronous Pull Retryable Codes", "group": "consumer", "label": "consumer", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Comma-separated list of additional retryable error codes for synchronous pull. 
By default the PubSub client library retries ABORTED, UNAVAILABLE, UNKNOWN" },
+    "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during star [...]
+    "publisherCacheSize": { "kind": "property", "displayName": "Publisher 
Cache Size", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "description": "Maximum number of producers to cache. This 
could be increased if you have producers for lots of different topics." },
+    "publisherCacheTimeout": { "kind": "property", "displayName": "Publisher 
Cache Timeout", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "description": "How many milliseconds should each producer 
stay alive in the cache." },
+    "autowiredEnabled": { "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 t [...]
+    "publisherTerminationTimeout": { "kind": "property", "displayName": 
"Publisher Termination Timeout", "group": "advanced", "label": "advanced", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "How many milliseconds 
should a producer be allowed to terminate." }
+  },
+  "headers": {
+    "CamelGooglePubsub.MessageId": { "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ID of the message, assigned by the server when the 
message is published.", "constantName": 
"org.apache.camel.component.google.pubsub.GooglePubsubConstants#MESSAGE_ID" },
+    "CamelGooglePubsub.MsgAckId": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The ID used to acknowledge the received 
message.", "constantName": 
"org.apache.camel.component.google.pubsub.GooglePubsubConstants#ACK_ID" },
+    "CamelGooglePubsub.PublishTime": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"com.google.protobuf.Timestamp", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The time at which the 
message was published", "constantName": 
"org.apache.camel.component.google.pubsub.GooglePubsubConstants#PUBLISH_TIME" },
+    "CamelGooglePubsub.Attributes": { "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "Map<String, 
String>", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The attributes of the message.", 
"constantName": 
"org.apache.camel.component.google.pubsub.GooglePubsubConstants#ATTRIBUTES" },
+    "CamelGooglePubsub.OrderingKey": { "kind": "header", "displayName": "", 
"group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "If non-empty, identifies related messages for 
which publish order should be respected.", "constantName": 
"org.apache.camel.component.google.pubsub.GooglePubsubConstants#ORDERING_KEY" }
+  },
+  "properties": {
+    "projectId": { "kind": "path", "displayName": "Project Id", "group": 
"common", "label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The Google Cloud PubSub Project Id" },
+    "destinationName": { "kind": "path", "displayName": "Destination Name", 
"group": "common", "label": "common", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The Destination Name. For 
the consumer this will be the subscription name, while for the producer this 
will be the topic name." },
+    "authenticate": { "kind": "parameter", "displayName": "Authenticate", 
"group": "common", "label": "common", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": true, "description": "Use Credentials when interacting 
with PubSub service (no authentication is required when using emulator)." },
+    "loggerId": { "kind": "parameter", "displayName": "Logger Id", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Logger ID to use when a match to the parent route required" },
+    "serviceAccountKey": { "kind": "parameter", "displayName": "Service 
Account Key", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The Service account key that can be 
used as credentials for the PubSub publisher\/subscriber. It can be loaded by 
default from classpath, but you can prefix with classpath:, file:, or http: to 
load the resource from different [...]
+    "ackMode": { "kind": "parameter", "displayName": "Ack Mode", "group": 
"consumer", "label": "consumer", "required": false, "type": "object", 
"javaType": 
"org.apache.camel.component.google.pubsub.GooglePubsubConstants.AckMode", 
"enum": [ "AUTO", "NONE" ], "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": "AUTO", "description": "AUTO = exchange gets 
ack'ed\/nack'ed on completion. NONE = downstream process has to ack\/nack 
explicitly" },
+    "concurrentConsumers": { "kind": "parameter", "displayName": "Concurrent 
Consumers", "group": "consumer", "label": "consumer", "required": false, 
"type": "integer", "javaType": "java.lang.Integer", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "1", "description": "The 
number of parallel streams consuming from the subscription" },
+    "maxMessagesPerPoll": { "kind": "parameter", "displayName": "Max Messages 
Per Poll", "group": "consumer", "label": "consumer", "required": false, "type": 
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "1", "description": "The max number of 
messages to receive from the server in a single API call" },
+    "synchronousPull": { "kind": "parameter", "displayName": "Synchronous 
Pull", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Synchronously pull 
batches of messages" },
+    "bridgeErrorHandler": { "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 occurred while the consumer is trying to 
pickup incoming messages, or the likes, will now [...]
+    "exceptionHandler": { "kind": "parameter", "displayName": "Exception 
Handler", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
let the consumer use a custom ExceptionHandler. Notice if the option 
bridgeErrorHandler is enabled then this option is not in use. By default the 
con [...]
+    "exchangePattern": { "kind": "parameter", "displayName": "Exchange 
Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut", 
"InOptionalOut" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the exchange pattern when the consumer creates an 
exchange." },
+    "lazyStartProducer": { "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 other [...]
+    "messageOrderingEnabled": { "kind": "parameter", "displayName": "Message 
Ordering Enabled", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Should message ordering be enabled" },
+    "pubsubEndpoint": { "kind": "parameter", "displayName": "Pubsub Endpoint", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Pub\/Sub endpoint to use. 
Required when using message ordering, and ensures that messages are received in 
order even when multiple publishers are used" },
+    "serializer": { "kind": "parameter", "displayName": "Serializer", "group": 
"producer (advanced)", "label": "producer,advanced", "required": false, "type": 
"object", "javaType": 
"org.apache.camel.component.google.pubsub.serializer.GooglePubsubSerializer", 
"deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, 
"description": "A custom GooglePubsubSerializer to use for serializing message 
payloads in the producer" }
+  }
+}
diff --git 
a/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/grpc.json
 
b/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/grpc.json
new file mode 100644
index 00000000..18f3c41e
--- /dev/null
+++ 
b/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/grpc.json
@@ -0,0 +1,68 @@
+{
+  "component": {
+    "kind": "component",
+    "name": "grpc",
+    "title": "gRPC",
+    "description": "Expose gRPC endpoints and access external gRPC endpoints.",
+    "deprecated": false,
+    "firstVersion": "2.19.0",
+    "label": "rpc",
+    "javaType": "org.apache.camel.component.grpc.GrpcComponent",
+    "supportLevel": "Stable",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-grpc",
+    "version": "3.18.2-SNAPSHOT",
+    "scheme": "grpc",
+    "extendsScheme": "",
+    "syntax": "grpc:host:port\/service",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false
+  },
+  "componentProperties": {
+    "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error 
Handler", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Allows for bridging the 
consumer to the Camel routing Error Handler, which mean any exceptions occurred 
while the consumer is trying to pickup incoming messages, or the likes, will 
now be processed as a me [...]
+    "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during star [...]
+    "autowiredEnabled": { "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 t [...]
+  },
+  "headers": {
+    "CamelGrpcMethodName": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Method name handled by the consumer service", 
"constantName": 
"org.apache.camel.component.grpc.GrpcConstants#GRPC_METHOD_NAME_HEADER" },
+    "CamelGrpcUserAgent": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "If provided, the given agent will prepend the gRPC 
library's user agent information", "constantName": 
"org.apache.camel.component.grpc.GrpcConstants#GRPC_USER_AGENT_HEADER" },
+    "CamelGrpcEventType": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Received event type from the sent request. Possible 
values: onNext onCompleted onError", "constantName": 
"org.apache.camel.component.grpc.GrpcConstants#GRPC_EVENT_TYPE_HEADER" }
+  },
+  "properties": {
+    "host": { "kind": "path", "displayName": "Host", "group": "common", 
"label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The gRPC server host name. This is localhost 
or 0.0.0.0 when being a consumer or remote server host name when using 
producer." },
+    "port": { "kind": "path", "displayName": "Port", "group": "common", 
"label": "", "required": true, "type": "integer", "javaType": "int", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The gRPC local or remote server port" },
+    "service": { "kind": "path", "displayName": "Service", "group": "common", 
"label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Fully qualified service name from the protocol 
buffer descriptor file (package dot service definition name)" },
+    "flowControlWindow": { "kind": "parameter", "displayName": "Flow Control 
Window", "group": "common", "label": "", "required": false, "type": "integer", 
"javaType": "int", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": 1048576, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The HTTP\/2 flow control window size (MiB)" },
+    "maxMessageSize": { "kind": "parameter", "displayName": "Max Message 
Size", "group": "common", "label": "", "required": false, "type": "integer", 
"javaType": "int", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": 4194304, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The maximum message size allowed to be 
received\/sent (MiB)" },
+    "autoDiscoverServerInterceptors": { "kind": "parameter", "displayName": 
"Auto Discover Server Interceptors", "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": "Setting the 
autoDiscoverServerInterceptors mechanism, if true, the [...]
+    "consumerStrategy": { "kind": "parameter", "displayName": "Consumer 
Strategy", "group": "consumer", "label": "consumer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.grpc.GrpcConsumerStrategy", 
"enum": [ "AGGREGATION", "PROPAGATION" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "PROPAGATION", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "T [...]
+    "forwardOnCompleted": { "kind": "parameter", "displayName": "Forward On 
Completed", "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": "Determines if onCompleted events should be 
pushed to the Camel route." },
+    "forwardOnError": { "kind": "parameter", "displayName": "Forward On 
Error", "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": "Determines if onError events should be pushed 
to the Camel route. Exceptions will be set as messag [...]
+    "maxConcurrentCallsPerConnection": { "kind": "parameter", "displayName": 
"Max Concurrent Calls Per Connection", "group": "consumer", "label": 
"consumer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
2147483647, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The maximum number of concurrent calls 
permitted for each inc [...]
+    "routeControlledStreamObserver": { "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  [...]
+    "bridgeErrorHandler": { "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 occurred while the consumer is trying to 
pickup incoming messages, or the likes, will now [...]
+    "exceptionHandler": { "kind": "parameter", "displayName": "Exception 
Handler", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
let the consumer use a custom ExceptionHandler. Notice if the option 
bridgeErrorHandler is enabled then this option is not in use. By default the 
con [...]
+    "exchangePattern": { "kind": "parameter", "displayName": "Exchange 
Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut", 
"InOptionalOut" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the exchange pattern when the consumer creates an 
exchange." },
+    "autoDiscoverClientInterceptors": { "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 [...]
+    "method": { "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": { "kind": "parameter", "displayName": "Producer 
Strategy", "group": "producer", "label": "producer", "required": false, "type": 
"object", "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 [...]
+    "streamRepliesTo": { "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." },
+    "userAgent": { "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": { "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 other [...]
+    "synchronous": { "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": { "kind": "parameter", "displayName": 
"Authentication Type", "group": "security", "label": "security", "required": 
false, "type": "object", "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 me [...]
+    "jwtAlgorithm": { "kind": "parameter", "displayName": "Jwt Algorithm", 
"group": "security", "label": "security", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.grpc.auth.jwt.JwtAlgorithm", "enum": [ 
"HMAC256", "HMAC384", "HMAC512" ], "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "HMAC256", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "JSON Web  [...]
+    "jwtIssuer": { "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": { "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": { "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": { "kind": "parameter", "displayName": "Key Cert 
Chain Resource", "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": "The X.509 certificate chain file resource in 
PEM format link" },
+    "keyPassword": { "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": { "kind": "parameter", "displayName": "Key Resource", 
"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": "The PKCS#8 private key file resource in PEM 
format link" },
+    "negotiationType": { "kind": "parameter", "displayName": "Negotiation 
Type", "group": "security", "label": "security", "required": false, "type": 
"object", "javaType": "io.grpc.netty.NegotiationType", "enum": [ "TLS", 
"PLAINTEXT_UPGRADE", "PLAINTEXT" ], "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "PLAINTEXT", "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "Identifies the se [...]
+    "serviceAccountResource": { "kind": "parameter", "displayName": "Service 
Account Resource", "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": "Service Account key file in JSON format 
resource link supported by the Google Cloud SDK" },
+    "trustCertCollectionResource": { "kind": "parameter", "displayName": 
"Trust Cert Collection Resource", "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": "The trusted certificates collection file 
resource in PEM format for verifying the remo [...]
+  }
+}
diff --git 
a/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/jira.json
 
b/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/jira.json
new file mode 100644
index 00000000..dcaf3327
--- /dev/null
+++ 
b/catalog/camel-catalog-provider-karaf/src/main/resources/org/apache/camel/catalog/karaf/components/jira.json
@@ -0,0 +1,77 @@
+{
+  "component": {
+    "kind": "component",
+    "name": "jira",
+    "title": "Jira",
+    "description": "Interact with JIRA issue tracker.",
+    "deprecated": false,
+    "firstVersion": "3.0",
+    "label": "api,reporting",
+    "javaType": "org.apache.camel.component.jira.JiraComponent",
+    "supportLevel": "Stable",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jira",
+    "version": "3.18.2-SNAPSHOT",
+    "scheme": "jira",
+    "extendsScheme": "",
+    "syntax": "jira:type",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false
+  },
+  "componentProperties": {
+    "delay": { "kind": "property", "displayName": "Delay", "group": "common", 
"label": "", "required": false, "type": "integer", "javaType": 
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "6000", "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "Time in milliseconds to elapse for the next 
poll." },
+    "jiraUrl": { "kind": "property", "displayName": "Jira Url", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "The Jira server url, example: 
http:\/\/my_jira.com:8081" },
+    "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error 
Handler", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Allows for bridging the 
consumer to the Camel routing Error Handler, which mean any exceptions occurred 
while the consumer is trying to pickup incoming messages, or the likes, will 
now be processed as a me [...]
+    "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during star [...]
+    "autowiredEnabled": { "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 t [...]
+    "configuration": { "kind": "property", "displayName": "Configuration", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.jira.JiraConfiguration", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a shared 
base jira configuration." },
+    "accessToken": { "kind": "property", "displayName": "Access Token", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(OAuth or Personal Access Token 
authentication) The access token generated by the Jira server." },
+    "consumerKey": { "kind": "property", "displayName": "Consumer Key", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(OAuth only) The consumer key from Jira 
settings." },
+    "password": { "kind": "property", "displayName": "Password", "group": 
"security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(Basic authentication only) The password or 
the API Token to authenticate to the Jira server. Use only if username basic 
authenti [...]
+    "privateKey": { "kind": "property", "displayName": "Private Key", "group": 
"security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(OAuth only) The private key generated by the 
client to encrypt the conversation to the server." },
+    "username": { "kind": "property", "displayName": "Username", "group": 
"security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(Basic authentication only) The username to 
authenticate to the Jira server. Use only if OAuth is not enabled on the Jira 
server. [...]
+    "verificationCode": { "kind": "property", "displayName": "Verification 
Code", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(OAuth only) The verification code from Jira 
generated in the first step of the authorization proccess." }
+  },
+  "headers": {
+    "IssueAssignee": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The assignee's name of the issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_ASSIGNEE" },
+    "IssueComponents": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The comma separated list of the issue's components", 
"constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_COMPONENTS" },
+    "IssueChanged": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The name of the updated field (i.e Status)", 
"constantName": "org.apache.camel.component.jira.JiraConstants#ISSUE_CHANGED" },
+    "IssueKey": { "kind": "header", "displayName": "", "group": "common", 
"label": "", "required": false, "javaType": "String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
id of the issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_KEY" },
+    "IssuePriorityId": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "Long", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The priority's id of the issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_PRIORITY_ID" },
+    "IssuePriorityName": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The priority's name of the issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_PRIORITY_NAME" },
+    "ProjectKey": { "kind": "header", "displayName": "", "group": "producer", 
"label": "producer", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The project's id of the issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_PROJECT_KEY" },
+    "IssueSummary": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The summary of the issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_SUMMARY" },
+    "IssueTransitionId": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The transition id", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_TRANSITION_ID" },
+    "IssueTypeId": { "kind": "header", "displayName": "", "group": "producer", 
"label": "producer", "required": false, "javaType": "Long", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The type's id of the issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_TYPE_ID" },
+    "IssueTypeName": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The type's name of the issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_TYPE_NAME" },
+    "IssueWatchedIssues": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The list of all issue keys that are watched in the time 
of update", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_WATCHED_ISSUES" },
+    "IssueWatchersAdd": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The comma separated list of watchers to add to the 
issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_WATCHERS_ADD" },
+    "IssueWatchersRemove": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The watchers of the issue to remove", "constantName": 
"org.apache.camel.component.jira.JiraConstants#ISSUE_WATCHERS_REMOVE" },
+    "ParentIssueKey": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The id of the parent issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#PARENT_ISSUE_KEY" },
+    "ChildIssueKey": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The id of the child issue", "constantName": 
"org.apache.camel.component.jira.JiraConstants#CHILD_ISSUE_KEY" },
+    "linkType": { "kind": "header", "displayName": "", "group": "producer", 
"label": "producer", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The type of link", "constantName": 
"org.apache.camel.component.jira.JiraConstants#LINK_TYPE" },
+    "minutesSpent": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "int", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "defaultValue": "-1", "description": "The minutes spent", 
"constantName": "org.apache.camel.component.jira.JiraConstants#MINUTES_SPENT" }
+  },
+  "properties": {
+    "type": { "kind": "path", "displayName": "Type", "group": "common", 
"label": "", "required": true, "type": "object", "javaType": 
"org.apache.camel.component.jira.JiraType", "enum": [ "ADDCOMMENT", "ADDISSUE", 
"ATTACH", "DELETEISSUE", "NEWISSUES", "NEWCOMMENTS", "WATCHUPDATES", 
"UPDATEISSUE", "TRANSITIONISSUE", "WATCHERS", "ADDISSUELINK", "ADDWORKLOG", 
"FETCHISSUE", "FETCHCOMMENTS" ], "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "Oper [...]
+    "delay": { "kind": "parameter", "displayName": "Delay", "group": "common", 
"label": "", "required": false, "type": "integer", "javaType": 
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "6000", "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "Time in milliseconds to elapse for the next 
poll." },
+    "jiraUrl": { "kind": "parameter", "displayName": "Jira Url", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "The Jira server url, example: 
http:\/\/my_jira.com:8081" },
+    "jql": { "kind": "parameter", "displayName": "Jql", "group": "consumer", 
"label": "consumer", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "JQL is the query language from JIRA which allows you to 
retrieve the data you want. For example jql=project=MyProject Where MyProject 
is the product key in Jira. It is important to use the RAW() and set the JQL 
inside it to prevent camel parsing it, e [...]
+    "maxResults": { "kind": "parameter", "displayName": "Max Results", 
"group": "consumer", "label": "consumer", "required": false, "type": "integer", 
"javaType": "java.lang.Integer", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "50", "description": "Max number of issues to 
search for" },
+    "sendOnlyUpdatedField": { "kind": "parameter", "displayName": "Send Only 
Updated Field", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": true, "description": "Indicator for 
sending only changed fields in exchange body or issue object. By default 
consumer sends only changed fields." },
+    "watchedFields": { "kind": "parameter", "displayName": "Watched Fields", 
"group": "consumer", "label": "consumer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "Status,Priority", "description": "Comma 
separated list of fields to watch for changes. Status,Priority are the 
defaults." },
+    "bridgeErrorHandler": { "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 occurred while the consumer is trying to 
pickup incoming messages, or the likes, will now [...]
+    "exceptionHandler": { "kind": "parameter", "displayName": "Exception 
Handler", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
let the consumer use a custom ExceptionHandler. Notice if the option 
bridgeErrorHandler is enabled then this option is not in use. By default the 
con [...]
+    "exchangePattern": { "kind": "parameter", "displayName": "Exchange 
Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut", 
"InOptionalOut" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the exchange pattern when the consumer creates an 
exchange." },
+    "lazyStartProducer": { "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 other [...]
+    "accessToken": { "kind": "parameter", "displayName": "Access Token", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(OAuth or Personal Access Token 
authentication) The access token generated by the Jira server." },
+    "consumerKey": { "kind": "parameter", "displayName": "Consumer Key", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(OAuth only) The consumer key from Jira 
settings." },
+    "password": { "kind": "parameter", "displayName": "Password", "group": 
"security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(Basic authentication only) The password or 
the API Token to authenticate to the Jira server. Use only if username basic 
authent [...]
+    "privateKey": { "kind": "parameter", "displayName": "Private Key", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(OAuth only) The private key generated by the 
client to encrypt the conversation to the server." },
+    "username": { "kind": "parameter", "displayName": "Username", "group": 
"security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(Basic authentication only) The username to 
authenticate to the Jira server. Use only if OAuth is not enabled on the Jira 
server [...]
+    "verificationCode": { "kind": "parameter", "displayName": "Verification 
Code", "group": "security", "label": "security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "configurationClass": 
"org.apache.camel.component.jira.JiraConfiguration", "configurationField": 
"configuration", "description": "(OAuth only) The verification code from Jira 
generated in the first step of the authorization proccess." }
+  }
+}
diff --git a/platforms/karaf/features/src/main/resources/features.xml 
b/platforms/karaf/features/src/main/resources/features.xml
index 3af92fc3..c98ecaf1 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -994,6 +994,48 @@
     <bundle 
dependency='true'>wrap:mvn:org.threeten/threetenbp/${google-cloud-threetenbp-version}</bundle>
     
<bundle>mvn:org.apache.camel/camel-google-bigquery/${project.version}</bundle>
   </feature>
+  <feature name='camel-google-pubsub' version='${project.version}' 
start-level='50'>
+    <feature version='${project.version}'>camel-core</feature>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.google-cloud-pubsub/${google-cloud-pubsub-bundle-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.api/api-common/${google-cloud-api-common-version}</bundle>
+    <bundle 
dependency='true'>mvn:com.google.protobuf/protobuf-java/${protobuf-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-common-protos/${google-cloud-common-protos-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-iam-v1/${google-proto-iam-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.guava/${google-cloud-guava-bundle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.google-gax-grpc/${google-gax-bundle-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${grpc-google-auth-library-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${grpc-google-auth-library-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:org.threeten/threetenbp/${google-cloud-threetenbp-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${google-http-client-opencensus-api-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.code.gson/gson/${gson-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.perfmark/perfmark-api/${google-cloud-perfmark-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.google-http-client/${google-http-client-bundle-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${google-http-client-opencensus-api-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.httpcomponents/httpcore-osgi/${httpcore4-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.httpcomponents/httpclient-osgi/${httpclient4-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.grpc/${google-cloud-grpc-bundle-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.re2j/re2j/${re2j-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-common/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-codec/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-codec-http/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-codec-http2/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-codec-socks/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-resolver/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-transport/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-buffer/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-transport-classes-epoll/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-transport-native-unix-common/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-handler/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-handler-proxy/${netty-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-proto/${opencensus-proto-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.okhttp/${squareup-okhttp-bundle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.okio/${squareup-okio-bundle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.bouncycastle/bcpkix-jdk18on/${bouncycastle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.bouncycastle/bctls-jdk18on/${bouncycastle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.bouncycastle/bcprov-jdk18on/${bouncycastle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.bouncycastle/bcutil-jdk18on/${bouncycastle-version}</bundle>
+    
<bundle>mvn:org.apache.camel/camel-google-pubsub/${project.version}</bundle>
+  </feature>
   <feature name='camel-grape' version='${project.version}' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
     <bundle 
dependency='true'>mvn:org.codehaus.groovy/groovy/${groovy-version}</bundle>
@@ -1018,7 +1060,42 @@
     <bundle 
dependency='true'>wrap:mvn:io.krakens/java-grok/${java-grok-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-grok/${project.version}</bundle>
   </feature>
-
+  <feature name='camel-grpc' version='${project.version}' start-level='50'>
+    <feature version='${project.version}'>camel-core</feature>
+    <bundle 
dependency='true'>wrap:mvn:com.auth0/java-jwt/${grpc-java-jwt-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${grpc-google-auth-library-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${grpc-google-auth-library-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.grpc/${google-cloud-grpc-bundle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.guava/${google-cloud-guava-bundle-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-common-protos/${google-cloud-common-protos-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.code.gson/gson/${gson-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.re2j/re2j/${re2j-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.okhttp/${squareup-okhttp-bundle-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-transport/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-buffer/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-common/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-resolver/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-transport-classes-epoll/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-transport-native-unix-common/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-codec/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-codec-http/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-codec-http2/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-handler/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-handler-proxy/${netty-version}</bundle>
+    <bundle 
dependency='true'>mvn:io.netty/netty-codec-socks/${netty-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${google-http-client-opencensus-api-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-proto/${opencensus-proto-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.perfmark/perfmark-api/${google-cloud-perfmark-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.okio/${squareup-okio-bundle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.bouncycastle/bcprov-jdk18on/${bouncycastle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.bouncycastle/bcpkix-jdk18on/${bouncycastle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.bouncycastle/bcutil-jdk18on/${bouncycastle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.bouncycastle/bctls-jdk18on/${bouncycastle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.javassist/javassist/${javassist-version}</bundle>
+    <bundle 
dependency='true'>mvn:com.google.protobuf/protobuf-java/${protobuf-version}</bundle>
+    <bundle 
dependency='true'>mvn:com.google.protobuf/protobuf-java-util/${protobuf-version}</bundle>
+    <bundle>mvn:org.apache.camel/camel-grpc/${project.version}</bundle>
+  </feature>
 
   <feature name='camel-gson' version='${project.version}' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
@@ -1180,6 +1257,23 @@
     <feature version='${project.version}'>camel-core</feature>
     <bundle>mvn:org.apache.camel/camel-jdbc/${project.version}</bundle>
   </feature>
+  <feature name='camel-jira' version='${project.version}' start-level='50'>
+    <feature version='${project.version}'>camel-core</feature>
+    <bundle 
dependency='true'>mvn:org.apache.commons/commons-lang3/${commons-lang3-version}</bundle>
+    <bundle 
dependency='true'>mvn:commons-codec/commons-codec/${commons-codec-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.httpcomponents/httpcore-osgi/${httpcore4-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.httpcomponents/httpclient-osgi/${httpclient4-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.httpcomponents/httpasyncclient-osgi/${httpasyncclient-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.codehaus.jettison/jettison/${jettison-version}</bundle>
+    <bundle 
dependency='true'>mvn:joda-time/joda-time/${jodatime2-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:com.google.code.gson/gson/${gson-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${google-http-client-opencensus-api-version}</bundle>
+    <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${google-http-client-opencensus-api-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.google-http-client/${google-http-client-bundle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.guava/${jira-guava-bundle-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.atlassian-jira-client/${atlassian-jira-client-bundle-version}</bundle>
+    <bundle>mvn:org.apache.camel/camel-jira/${project.version}</bundle>
+  </feature>
   <feature name='camel-jetty' version='${project.version}' start-level='50'>
     <feature>jetty</feature>
     <feature version='${project.version}'>camel-core</feature>
diff --git a/pom.xml b/pom.xml
index 777c86c7..429ff65f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -121,6 +121,7 @@
         <aries-spifly.bundle.version>1.3.0</aries-spifly.bundle.version>
         <asm.bundle.version>8.0.1</asm.bundle.version>
         
<asterisk-java-bundle-version>1.0.0-final_1</asterisk-java-bundle-version>
+        
<atlassian-jira-client-bundle-version>5.2.4_2</atlassian-jira-client-bundle-version>
         <automaton-bundle-version>1.11-8_1</automaton-bundle-version>
         <avalon-bundle-version>4.3.1_1</avalon-bundle-version>
         
<avro-java-commons-compress-version>1.21</avro-java-commons-compress-version>
@@ -177,17 +178,27 @@
         <google-cloud-core-version>2.7.1</google-cloud-core-version>
         <google-cloud-gax-version>2.18.1</google-cloud-gax-version>
         
<google-cloud-gax-httpjson-version>0.103.1</google-cloud-gax-httpjson-version>
+        
<google-cloud-grpc-bundle-version>1.48.1_2</google-cloud-grpc-bundle-version>
+        
<google-cloud-guava-bundle-version>31.1_1</google-cloud-guava-bundle-version>
         
<google-cloud-http-client-version>1.41.8</google-cloud-http-client-version>
         
<google-cloud-oauth-client-version>1.33.3</google-cloud-oauth-client-version>
         
<google-cloud-common-protos-version>2.8.3</google-cloud-common-protos-version>
+        <google-cloud-perfmark-version>0.25.0</google-cloud-perfmark-version>
+        
<google-cloud-pubsub-bundle-version>1.119.0_1</google-cloud-pubsub-bundle-version>
         <google-cloud-iam-version>1.3.4</google-cloud-iam-version>
         
<google-cloud-threetenbp-version>1.6.0</google-cloud-threetenbp-version>
         <google-findbugs-jsr305-version>3.0.2</google-findbugs-jsr305-version>
         
<google-findbugs-annotations2-version>2.0.3</google-findbugs-annotations2-version>
+        
<google-http-client-bundle-version>1.41.8_1</google-http-client-bundle-version>
+        <google-gax-bundle-version>2.18.1_1</google-gax-bundle-version>
+        
<google-http-client-bundle-version>1.41.8_2</google-http-client-bundle-version>
+        
<google-http-client-opencensus-api-version>0.31.1</google-http-client-opencensus-api-version>
+        <google-proto-iam-version>1.3.4</google-proto-iam-version>
         <google-truth-version>0.30</google-truth-version>
         <groovy-version>3.0.8</groovy-version>
         <grpc-bundle-version>1.44.1_1</grpc-bundle-version>
         <grpc-errorprone-version>2.3.4</grpc-errorprone-version>
+        
<grpc-google-auth-library-version>1.7.0</grpc-google-auth-library-version>
         <guice-bundle-version>3.0_1</guice-bundle-version>
         <hikaricp-version>2.4.13</hikaricp-version>
         <hk2-osgi-resource-version>1.0.1</hk2-osgi-resource-version>
@@ -209,6 +220,7 @@
         <jaxb-bundle-version>2.3.1_1</jaxb-bundle-version>
         <jboss-logging-version>3.4.1.Final</jboss-logging-version>
         <jdom-bundle-version>2.0.6_1</jdom-bundle-version>
+        <jira-guava-bundle-version>30.1.1_1</jira-guava-bundle-version>
         <jetty9-version>9.4.32.v20200930</jetty9-version>
         <jodatime-bundle-version>1.6.2</jodatime-bundle-version>
         <jolt-bundle-version>0.1.6_1</jolt-bundle-version>
@@ -247,6 +259,7 @@
         <olingo2-gson-version>2.4</olingo2-gson-version>
         <ognl-bundle-version>3.1.12_1</ognl-bundle-version>
         <opencensus-api-version>0.24.0</opencensus-api-version>
+        <opencensus-proto-version>0.2.0</opencensus-proto-version>
         <oncrpc-version>1.1.3</oncrpc-version>
         <ops4j-base-version>1.5.0</ops4j-base-version>
         <oro-bundle-version>2.0.8_6</oro-bundle-version>
@@ -259,9 +272,11 @@
         <perfmark-version>0.17.0</perfmark-version>
         <protobuf-guava-version>30.1.1-jre</protobuf-guava-version>
         <protobuf-javanano-version>3.1.0</protobuf-javanano-version>
+        <protobuf-version>3.21.4</protobuf-version>
         <reflections-bundle-version>0.9.12_1</reflections-bundle-version>
         <regexp-bundle-version>1.4_1</regexp-bundle-version>
         <rescu-version>2.1.0</rescu-version>
+        <re2j-version>1.5</re2j-version>
         <roaster-version>2.21.1.Final</roaster-version>
         <saxon-bundle-version>9.9.1-6_1</saxon-bundle-version>
         <scribe-bundle-version>1.3.7_1</scribe-bundle-version>

Reply via email to