You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2021/02/17 06:24:29 UTC

[camel] branch master updated (10092f2 -> df83ef5)

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

acosentino pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from 10092f2  Sync deps
     new d0f7bf9  CAMEL-15964 create camel-google-storage component
     new 7cae141  CAMEL-15964 create camel-google-storage component
     new ac9e144  CAMEL-15964 create camel-google-storage component
     new 2b62b90  CAMEL-15964 create camel-google-storage component
     new 407a7b8  CAMEL-15964 create camel-google-storage component
     new 8eba1d4  CAMEL-15964 create camel-google-storage component
     new d3ac419  CAMEL-15964 create camel-google-storage component
     new 2c10f08  CAMEL-15964 create camel-google-storage omponent
     new f59b178  CAMEL-15964 create camel-google-storage component
     new 72777e5  CAMEL-15964 create camel-google-storage component
     new f3622f0  CAMEL-15964 create camel-google-storage component
     new 8978ecb  CAMEL-15964 create camel-google-storage component
     new 813e655  CAMEL-15964 create camel-google-storage component
     new 3b86ce9  CAMEL-15964 create camel-google-storage component
     new ef217a1  CAMEL-15964 create camel-google-storage component
     new f1f6b46  CAMEL-15964 create camel-google-storage component
     new 1dbbacf  CAMEL-15964 create camel-google-storage component
     new 3b01437  CAMEL-15964 create camel-google-storage component
     new 30ba414  CAMEL-15964 create camel-google-storage component
     new 33ddcea  CAMEL-15964 create camel-google-storage component
     new be9a64b  CAMEL-15964 camel-google-storage - check style
     new a657a03  CAMEL-15964 camel-google-storage component - improvements
     new 06238c7  CAMEL-15964 camel-google-storage component - improvements
     new 78efb7a  CAMEL-15964 camel-google-storage component - improvements
     new 079cdc0  CAMEL-15964 camel-google-storage comp. - class name collision with springboot
     new b7b84a0  CAMEL-15964 - Added component to kit
     new 528c8ba  CAMEL-15964 - Added component to catalog and regen
     new ab56327  CAMEL-15964 - Fixed test logs configuration
     new f9dd025  CAMEL-15964 - Fixed doc file name
     new da67188  CAMEL-15964 - Regen docs
     new df83ef5  CAMEL-15964 - Full regen

The 31 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 bom/camel-bom/pom.xml                              |    5 +
 .../org/apache/camel/catalog/components.properties |    1 +
 .../camel/catalog/components/google-storage.json   |   77 +
 .../org/apache/camel/catalog/docs.properties       |    1 +
 .../apache/camel/catalog/docs/google-storage.adoc  |  396 +++++
 .../org/apache/camel/catalog/others.properties     |    1 +
 .../camel/catalog/others/google-storage.json       |   14 +
 components/camel-google-storage/ReadMe.md          |   43 +
 components/camel-google-storage/pom.xml            |  126 ++
 .../GoogleCloudStorageComponentConfigurer.java     |  145 ++
 .../GoogleCloudStorageEndpointConfigurer.java      |  237 +++
 .../GoogleCloudStorageEndpointUriFactory.java      |   93 ++
 .../services/org/apache/camel/component.properties |    7 +
 .../org/apache/camel/component/google-storage      |    2 +
 .../camel/configurer/google-storage-component      |    2 +
 .../camel/configurer/google-storage-endpoint       |    2 +
 .../services/org/apache/camel/other.properties     |    7 +
 .../camel/urifactory/google-storage-endpoint       |    2 +
 .../src/generated/resources/google-storage.json    |   14 +
 .../component/google/storage/google-storage.json   |   77 +
 .../src/main/docs/google-storage.adoc              |  396 +++++
 .../storage/GoogleCloudStorageComponent.java       |   69 +
 .../storage/GoogleCloudStorageConfiguration.java   |  240 ++++
 .../GoogleCloudStorageConnectionFactory.java       |   47 +
 .../storage/GoogleCloudStorageConstants.java       |   52 +
 .../google/storage/GoogleCloudStorageConsumer.java |  256 ++++
 .../google/storage/GoogleCloudStorageEndpoint.java |  187 +++
 .../storage/GoogleCloudStorageOperations.java      |   27 +
 .../google/storage/GoogleCloudStorageProducer.java |  366 +++++
 .../org/apache/camel/component/google-storage      |    1 +
 .../integration/ComplexIntegrationTest.java        |  147 ++
 .../storage/localstorage/FakeStorageRpc.java       |  583 ++++++++
 .../storage/localstorage/LocalStorageHelper.java   |  102 ++
 .../google/storage/unit/ConsumerLocalTest.java     |   87 ++
 .../storage/unit/GoogleCloudStorageBaseTest.java   |   45 +
 ...ogleCloudStorageComponentConfigurationTest.java |   70 +
 .../google/storage/unit/ProducerLocalTest.java     |  147 ++
 .../src/test/resources/log4j2.properties           |   31 +
 components/pom.xml                                 |    1 +
 core/camel-allcomponents/pom.xml                   |    4 +
 .../component/ComponentsBuilderFactory.java        |   14 +
 .../dsl/GoogleStorageComponentBuilderFactory.java  |  384 +++++
 .../src/generated/resources/metadata.json          |   22 +
 .../builder/endpoint/EndpointBuilderFactory.java   |    1 +
 .../camel/builder/endpoint/EndpointBuilders.java   |    1 +
 .../builder/endpoint/StaticEndpointBuilders.java   |   45 +
 .../GoogleCloudStorageEndpointBuilderFactory.java  | 1512 ++++++++++++++++++++
 docs/components/modules/others/nav.adoc            |    1 +
 .../modules/others/pages/google-storage.adoc       |  398 ++++++
 parent/pom.xml                                     |    5 +
 50 files changed, 6493 insertions(+)
 create mode 100644 catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-storage.json
 create mode 100644 catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage.adoc
 create mode 100644 catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/google-storage.json
 create mode 100644 components/camel-google-storage/ReadMe.md
 create mode 100644 components/camel-google-storage/pom.xml
 create mode 100644 components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
 create mode 100644 components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
 create mode 100644 components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
 create mode 100644 components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/component.properties
 create mode 100644 components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/component/google-storage
 create mode 100644 components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/configurer/google-storage-component
 create mode 100644 components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/configurer/google-storage-endpoint
 create mode 100644 components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/other.properties
 create mode 100644 components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/urifactory/google-storage-endpoint
 create mode 100644 components/camel-google-storage/src/generated/resources/google-storage.json
 create mode 100644 components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
 create mode 100644 components/camel-google-storage/src/main/docs/google-storage.adoc
 create mode 100644 components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
 create mode 100644 components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConfiguration.java
 create mode 100644 components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
 create mode 100644 components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
 create mode 100644 components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
 create mode 100644 components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
 create mode 100644 components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageOperations.java
 create mode 100644 components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
 create mode 100644 components/camel-google-storage/src/main/resources/META-INF/services/org/apache/camel/component/google-storage
 create mode 100644 components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
 create mode 100644 components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
 create mode 100644 components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
 create mode 100644 components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
 create mode 100644 components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
 create mode 100644 components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
 create mode 100644 components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
 create mode 100644 components/camel-google-storage/src/test/resources/log4j2.properties
 create mode 100644 core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
 create mode 100644 core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
 create mode 100644 docs/components/modules/others/pages/google-storage.adoc


[camel] 03/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ac9e144483f775d1e6dd12ea047201ad34cf294d
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Thu Feb 11 10:56:42 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/camel-google-storage/ReadMe.txt                  |  2 +-
 .../storage/GoogleCloudStorageEndpointUriFactory.java       |  4 +++-
 .../camel/component/google/storage/google-storage.json      |  3 ++-
 .../storage/GoogleCloudStorageComponentConfiguration.java   |  4 ++++
 .../google/storage/GoogleCloudStorageEndpoint.java          |  8 ++++----
 .../camel/builder/component/ComponentsBuilderFactory.java   |  3 ++-
 .../component/dsl/GoogleStorageComponentBuilderFactory.java |  6 ++++--
 .../src/generated/resources/metadata.json                   |  2 +-
 .../camel/builder/endpoint/StaticEndpointBuilders.java      | 10 ++++++----
 .../dsl/GoogleCloudStorageEndpointBuilderFactory.java       | 13 ++++++++-----
 10 files changed, 35 insertions(+), 20 deletions(-)

diff --git a/components/camel-google-storage/ReadMe.txt b/components/camel-google-storage/ReadMe.txt
index 4b5dcf0..fcefc05 100644
--- a/components/camel-google-storage/ReadMe.txt
+++ b/components/camel-google-storage/ReadMe.txt
@@ -1,4 +1,4 @@
-## Camel Google Storage Component
+# Camel Google Storage Component
 This component is based on the https://github.com/googleapis/java-storage[google java storage library] that works as a client for the Google Cloud Storage.
 
 
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
index e421f25..35339d8 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
@@ -20,8 +20,9 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(32);
+        Set<String> props = new HashSet<>(33);
         props.add("backoffMultiplier");
+        props.add("bucketName");
         props.add("destinationBucket");
         props.add("initialDelay");
         props.add("serviceAccountCredentials");
@@ -69,6 +70,7 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
 
         Map<String, Object> copy = new HashMap<>(properties);
 
+        uri = buildPathParameter(syntax, uri, "bucketName", null, true, copy);
         uri = buildQueryParameters(uri, copy, encode);
         return uri;
     }
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index d06cb07..7c752bb 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -3,7 +3,7 @@
     "kind": "component",
     "name": "google-storage",
     "title": "Google Storage",
-    "description": "GoogleCloudStorage component which does bla bla.",
+    "description": "Google Cloud Storage is an Object Storage to store any amount of data and retrieve it as often you like.",
     "deprecated": false,
     "firstVersion": "3.7.0",
     "label": "cloud",
@@ -40,6 +40,7 @@
     "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 [...]
   },
   "properties": {
+    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Bucket name" },
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
     "serviceAccountCredentials": { "kind": "parameter", "displayName": "Service Account Credentials", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Specify the service account credentials file (json)" },
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
index cf5e481..058b22b 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -2,12 +2,16 @@ package org.apache.camel.component.google.storage;
 
 import com.google.cloud.storage.Storage;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
+import org.apache.camel.spi.UriPath;
 
 @UriParams
 public class GoogleCloudStorageComponentConfiguration implements Cloneable {
 
+    @UriPath(label = "common", description = "Bucket name")
+    @Metadata(required = true)
     private String bucketName;
 
     @UriParam
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 31ed2dc..877ca2d 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -24,11 +24,11 @@ import org.slf4j.LoggerFactory;
 /**
  * Google Cloud Storage is an Object Storage to store any amount of data and retrieve it as often you like.
  * 
- * Google Storage Endpoint definition represents a bucket within the storage and contains configuration 
- * to customize the behavior of Consumer and Producer.
+ * Google Storage Endpoint definition represents a bucket within the storage and contains configuration to customize the
+ * behavior of Consumer and Producer.
+ * 
  */
-@UriEndpoint(firstVersion = "3.7.0", scheme = "google-storage", title = "Google Storage",
-             syntax = "google-storage:bucketName",
+@UriEndpoint(firstVersion = "3.7.0", scheme = "google-storage", title = "Google Storage", syntax = "google-storage:bucketName",
              category = { Category.CLOUD })
 public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
 
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index 151a36d..dff84f0 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -1985,7 +1985,8 @@ public interface ComponentsBuilderFactory {
     }
     /**
      * Google Storage (camel-google-storage)
-     * GoogleCloudStorage component which does bla bla.
+     * Google Cloud Storage is an Object Storage to store any amount of data and
+     * retrieve it as often you like.
      * 
      * Category: cloud
      * Since: 3.7
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index c69c643..1ef85d2 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -23,7 +23,8 @@ import org.apache.camel.builder.component.ComponentBuilder;
 import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
 
 /**
- * GoogleCloudStorage component which does bla bla.
+ * Google Cloud Storage is an Object Storage to store any amount of data and
+ * retrieve it as often you like.
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
@@ -32,7 +33,8 @@ public interface GoogleStorageComponentBuilderFactory {
 
     /**
      * Google Storage (camel-google-storage)
-     * GoogleCloudStorage component which does bla bla.
+     * Google Cloud Storage is an Object Storage to store any amount of data and
+     * retrieve it as often you like.
      * 
      * Category: cloud
      * Since: 3.7
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index f97dddd..b02da08 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -3237,7 +3237,7 @@
     "kind": "component",
     "name": "google-storage",
     "title": "Google Storage",
-    "description": "GoogleCloudStorage component which does bla bla.",
+    "description": "Google Cloud Storage is an Object Storage to store any amount of data and retrieve it as often you like.",
     "deprecated": false,
     "firstVersion": "3.7.0",
     "label": "cloud",
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index 882f610..1850dc5 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -6697,7 +6697,8 @@ public class StaticEndpointBuilders {
     }
     /**
      * Google Storage (camel-google-storage)
-     * GoogleCloudStorage component which does bla bla.
+     * Google Cloud Storage is an Object Storage to store any amount of data and
+     * retrieve it as often you like.
      * 
      * Category: cloud
      * Since: 3.7
@@ -6706,7 +6707,7 @@ public class StaticEndpointBuilders {
      * Syntax: <code>google-storage:bucketName</code>
      * 
      * Path parameter: bucketName (required)
-     * Bucket name or ARN
+     * Bucket name
      * 
      * @param path bucketName
      * @return the dsl builder
@@ -6717,7 +6718,8 @@ public class StaticEndpointBuilders {
     }
     /**
      * Google Storage (camel-google-storage)
-     * GoogleCloudStorage component which does bla bla.
+     * Google Cloud Storage is an Object Storage to store any amount of data and
+     * retrieve it as often you like.
      * 
      * Category: cloud
      * Since: 3.7
@@ -6726,7 +6728,7 @@ public class StaticEndpointBuilders {
      * Syntax: <code>google-storage:bucketName</code>
      * 
      * Path parameter: bucketName (required)
-     * Bucket name or ARN
+     * Bucket name
      * 
      * @param componentName to use a custom component name for the endpoint
      * instead of the default name
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index a574217..632dd6d 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -29,7 +29,8 @@ import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.PollingConsumerPollStrategy;
 
 /**
- * GoogleCloudStorage component which does bla bla.
+ * Google Cloud Storage is an Object Storage to store any amount of data and
+ * retrieve it as often you like.
  * 
  * Generated by camel build tools - do NOT edit this file!
  */
@@ -1385,7 +1386,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
     public interface GoogleCloudStorageBuilders {
         /**
          * Google Storage (camel-google-storage)
-         * GoogleCloudStorage component which does bla bla.
+         * Google Cloud Storage is an Object Storage to store any amount of data
+         * and retrieve it as often you like.
          * 
          * Category: cloud
          * Since: 3.7
@@ -1394,7 +1396,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * Syntax: <code>google-storage:bucketName</code>
          * 
          * Path parameter: bucketName (required)
-         * Bucket name or ARN
+         * Bucket name
          * 
          * @param path bucketName
          * @return the dsl builder
@@ -1404,7 +1406,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
         }
         /**
          * Google Storage (camel-google-storage)
-         * GoogleCloudStorage component which does bla bla.
+         * Google Cloud Storage is an Object Storage to store any amount of data
+         * and retrieve it as often you like.
          * 
          * Category: cloud
          * Since: 3.7
@@ -1413,7 +1416,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * Syntax: <code>google-storage:bucketName</code>
          * 
          * Path parameter: bucketName (required)
-         * Bucket name or ARN
+         * Bucket name
          * 
          * @param componentName to use a custom component name for the endpoint
          * instead of the default name


[camel] 14/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 3b86ce99f22c2e06f0b772d7162c4bed7aa46421
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sat Feb 13 21:24:14 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../catalog/docs/google-storage-component.adoc     | 340 ++++++++++++++++++++-
 .../src/main/docs/google-storage-component.adoc    | 340 ++++++++++++++++++++-
 .../GoogleCloudStorageComponentConfiguration.java  |   2 +-
 .../google/storage/GoogleCloudStorageConsumer.java |   6 +-
 .../google/storage/GoogleCloudStorageEndpoint.java |  23 +-
 .../google/storage/GoogleCloudStorageProducer.java |  13 +
 .../ROOT/pages/google-storage-component.adoc       | 340 ++++++++++++++++++++-
 7 files changed, 1038 insertions(+), 26 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index 8e5250c..cc2010d 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -165,10 +165,342 @@ with the following path and query parameters:
 // endpoint options: END
 
 
-== Message Headers
+== Usage
 
-TBD
+=== Message headers evaluated by the Google Storage Producer
 
-== Producer Endpoints
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+
+|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageDestinationBucketName` |`String` |The bucket Destination Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageDestinationObjectName` |`String` |The object Destination Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
+
+|`CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
+
+
+|`CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
+
+|`CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
+
+|`CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
+
+|`CamelGoogleCloudStorageOperation` |`String` |The operation to perform. Permitted values are copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink
+
+|`CamelGoogleCloudStorageDownloadLinkExpirationTime` |`Long` |The time in millisecond the download link will be valid.
+
+|=======================================================================
+
+=== Message headers set by the Google Storage Producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelGoogleCloudStorageETag` |`String` |The ETag value for the newly uploaded object.
+
+|=======================================================================
+
+=== Message headers set by the Google Storage Consumer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
+| `CamelGoogleCloudStorageCacheControl` |`String` | The Cache-Control metadata can specify two different aspects of how data is served from Cloud Storage: whether the data can be cached and whether the data can be transformed
+| `CamelGoogleCloudStorageComponentCount` |`String` | The component count of this object
+| `CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
+| `CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
+| `CamelGoogleCloudStorageContentLanguage` |`String` | The Content-Language metadata indicates the language(s) that the object is intended for.
+| `CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
+| `CamelGoogleCloudStorageCustomTime` |`String` | The Custom-Time metadata is a user-specified date and time represented in the RFC 3339 format YYYY-MM-DD'T'HH:MM:SS.SS'Z' or YYYY-MM-DD'T'HH:MM:SS'Z' when milliseconds are zero. This metadata is typically set in order to use the DaysSinceCustomTime condition in Object Lifecycle Management.
+| `CamelGoogleCloudStorageCrc32cHex` |`String` | The CRC32c of the object
+| `CamelGoogleCloudStorageETag` |`String` | The ETag for the Object.
+| `CamelGoogleCloudStorageGeneration` |`String` | Is the generation number of the object for which you are retrieving information.
+| `CamelGoogleCloudStorageBlobId` |`String` | The blob id of the object
+| `CamelGoogleCloudStorageKmsKeyName` |`String` | The KMS key name
+| `CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
+| `CamelGoogleCloudStorageMediaLink` |`String` | The media link
+| `CamelGoogleCloudStorageMetageneration` | `String` | The metageneration of the object
+| `CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
+| `CamelGoogleCloudStorageStorageClass` | `String` | The storage class of the object
+| `CamelGoogleCloudStorageCreateTime` |`String` | The creation time of the object
+| `CamelGoogleCloudStorageLastUpdate` |`String` | The last update of the object
+|=======================================================================
+
+=== Google Storage Producer operations
+
+Google Storage component provides the following operation on the producer side:
+
+- copyObject
+- listObjects
+- deleteObject
+- deleteBucket
+- listBuckets
+- getObject
+- createDownloadLink
+
+If you don't specify an operation explicitly the producer will a file upload.
+
+=== Advanced component configuration
+
+If you need to have more control over the `storageClient` instance configuration, you can create your own instance and refer to it in your Camel google-storage component configuration:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("google-storage://myCamelBucket?storageClient=#client")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+=== Google Storage Producer Operation examples
+
+- File Upload: This operation will upload a file to the Google Storage based on the body content
+
+[source,java]
+--------------------------------------------------------------------------------
+//upload a file
+byte[] payload = "Camel rocks!".getBytes();
+ByteArrayInputStream bais = new ByteArrayInputStream(payload);
+from("direct:start")
+.process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
+    exchange.getIn().setBody(bais);    
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+.log("uploaded file object:${header.CamelGoogleCloudStorageObjectName}, body:${body}");
+--------------------------------------------------------------------------------
+
+This operation will upload the file camel.txt with the content "Camel rocks!" in the myCamelBucket bucket
+
+- CopyObject: this operation copy an object from one bucket to a different one
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.BUCKET_DESTINATION_NAME, "camelDestinationBucket");
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+          exchange.getIn().setHeader(S3Constants.DESTINATION_KEY, "camelDestinationKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=copyObject")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will copy the object with the name expressed in the header camelDestinationKey to the camelDestinationBucket bucket, from the bucket mycamelbucket.
+
+- DeleteObject: this operation deletes an object from a bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteObject")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the object camelKey from the bucket mycamelbucket.
+
+- ListBuckets: this operation list the buckets for this account in this region
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listBuckets")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will list the buckets for this account
+
+- DeleteBucket: this operation delete the bucket specified as URI parameter or header
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the bucket mycamelbucket
+
+- ListObjects: this operation list object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listObjects")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will list the objects in the mycamelbucket bucket
+
+- GetObject: this operation get a single object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket.
+
+- GetObjectRange: this operation get a single object range in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+          exchange.getIn().setHeader(S3Constants.RANGE_START, "0");
+          exchange.getIn().setHeader(S3Constants.RANGE_END, "9");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket, containing a the bytes from 0 to 9.
+
+- CreateDownloadLink: this operation will return a download link through S3 Presigner
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?accessKey=xxx&secretKey=yyy&region=region&operation=createDownloadLink")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return a download link url for the file camel-key in the bucket mycamelbucket and region region
+
+== Bucket Autocreation
+
+With the option `autoCreateBucket` users are able to avoid the autocreation of an S3 Bucket in case it doesn't exist. The default for this option is `true`.
+If set to false any operation on a not-existent bucket in AWS won't be successful and an error will be returned.
+
+== Moving stuff between a bucket and another bucket
+
+Some users like to consume stuff from a bucket and move the content in a different one without using the copyObject feature of this component.
+If this is case for you, don't forget to remove the bucketName header from the incoming exchange of the consumer, otherwise the file will be always overwritten on the same
+original bucket.
+
+== MoveAfterRead consumer option
+
+In addition to deleteAfterRead it has been added another option, moveAfterRead. With this option enabled the consumed object will be moved to a target destinationBucket instead of being only deleted.
+This will require specifying the destinationBucket option. As example:
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
+
+You have also the possibility of using a key prefix/suffix while moving the file to a different bucket. The options are destinationBucketPrefix and destinationBucketSuffix.
+
+Taking the above example, you could do something like:
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket&destinationBucketPrefix=RAW(pre-)&destinationBucketSuffix=RAW(-suff)")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
+
+So if the file name is test, in the myothercamelbucket you should see a file called pre-test-suff.
+
+== Using customer key as encryption
+
+We introduced also the customer key support (an alternative of using KMS). The following code shows an example.
+
+[source,java]
+--------------------------------------------------------------------------------
+String key = UUID.randomUUID().toString();
+byte[] secretKey = generateSecretKey();
+String b64Key = Base64.getEncoder().encodeToString(secretKey);
+String b64KeyMd5 = Md5Utils.md5AsBase64(secretKey);
+
+String awsEndpoint = "google-storage://mycamel?autoCreateBucket=false&useCustomerKey=true&customerKeyId=RAW(" + b64Key + ")&customerKeyMD5=RAW(" + b64KeyMd5 + ")&customerAlgorithm=" + AES256.name();
+
+from("direct:putObject")
+    .setHeader(AWS2S3Constants.KEY, constant("test.txt"))
+    .setBody(constant("Test"))
+    .to(awsEndpoint);
+--------------------------------------------------------------------------------
+
+== Using a POJO as body
+
+Sometimes build an AWS Request can be complex, because of multiple options. We introduce the possibility to use a POJO as body.
+In AWS S3 there are multiple operations you can submit, as an example for List brokers request, you can do something like:
+
+------------------------------------------------------------------------------------------------------
+from("direct:google-storage")
+     .setBody(ListObjectsRequest.builder().bucket(bucketName).build())
+     .to("google-storage://test?amazonS3Client=#amazonS3Client&operation=listObjects&pojoRequest=true")
+------------------------------------------------------------------------------------------------------
+
+In this way you'll pass the request directly without the need of passing headers and options specifically related to this operation.
+
+== Create S3 client and add component to registry
+Sometimes you would want to perform some advanced configuration using AWS2S3Configuration which also allows to set the S3 client.
+You can create and set the S3 client in the component configuration as shown in the following example
+
+[source,java]
+--------------------------------------------------------------------------------
+String awsBucketAccessKey = "your_access_key";
+String awsBucketSecretKey = "your_secret_key";
+
+S3Client s3Client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(awsBucketAccessKey, awsBucketSecretKey)))
+                .region(Region.US_EAST_1).build();
+
+AWS2S3Configuration configuration = new AWS2S3Configuration();
+configuration.setAmazonS3Client(s3Client);
+configuration.setAutoDiscoverClient(true);
+configuration.setBucketName("s3bucket2020");
+configuration.setRegion("us-east-1");
+--------------------------------------------------------------------------------
+
+Now you can configure the S3 component (using the configuration object created above) and add it to the registry in the
+configure method before initialization of routes.
+
+[source,java]
+--------------------------------------------------------------------------------
+AWS2S3Component s3Component = new AWS2S3Component(getContext());
+s3Component.setConfiguration(configuration);
+s3Component.setLazyStartProducer(true);
+camelContext.addComponent("google-storage", s3Component);
+--------------------------------------------------------------------------------
+
+Now your component will be used for all the operations implemented in camel routes.
 
-TBD
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index 8e5250c..6ef1b8e 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -165,10 +165,342 @@ with the following path and query parameters:
 // endpoint options: END
 
 
-== Message Headers
+== Usage
 
-TBD
+=== Message headers evaluated by the Google Storage Producer
 
-== Producer Endpoints
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+
+|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageDestinationBucketName` |`String` |The bucket Destination Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageDestinationObjectName` |`String` |The object Destination Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
+
+|`CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
+
+
+|`CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
+
+|`CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
+
+|`CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
+
+|`CamelGoogleCloudStorageOperation` |`String` |The operation to perform. Permitted values are copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink
+
+|`CamelGoogleCloudStorageDownloadLinkExpirationTime` |`Long` |The time in millisecond the download link will be valid.
+
+|=======================================================================
+
+=== Message headers set by the Google Storage Producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelGoogleCloudStorageETag` |`String` |The ETag value for the newly uploaded object.
+
+|=======================================================================
+
+=== Message headers set by the Google Storage Consumer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
+| `CamelGoogleCloudStorageCacheControl` |`String` | The Cache-Control metadata can specify two different aspects of how data is served from Cloud Storage: whether the data can be cached and whether the data can be transformed
+| `CamelGoogleCloudStorageComponentCount` |`String` | The component count of this object
+| `CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
+| `CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
+| `CamelGoogleCloudStorageContentLanguage` |`String` | The Content-Language metadata indicates the language(s) that the object is intended for.
+| `CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
+| `CamelGoogleCloudStorageCustomTime` |`String` | The Custom-Time metadata is a user-specified date and time represented in the RFC 3339 format YYYY-MM-DD'T'HH:MM:SS.SS'Z' or YYYY-MM-DD'T'HH:MM:SS'Z' when milliseconds are zero. This metadata is typically set in order to use the DaysSinceCustomTime condition in Object Lifecycle Management.
+| `CamelGoogleCloudStorageCrc32cHex` |`String` | The CRC32c of the object
+| `CamelGoogleCloudStorageETag` |`String` | The ETag for the Object.
+| `CamelGoogleCloudStorageGeneration` |`String` | Is the generation number of the object for which you are retrieving information.
+| `CamelGoogleCloudStorageBlobId` |`String` | The blob id of the object
+| `CamelGoogleCloudStorageKmsKeyName` |`String` | The KMS key name
+| `CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
+| `CamelGoogleCloudStorageMediaLink` |`String` | The media link
+| `CamelGoogleCloudStorageMetageneration` | `String` | The metageneration of the object
+| `CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
+| `CamelGoogleCloudStorageStorageClass` | `String` | The storage class of the object
+| `CamelGoogleCloudStorageCreateTime` |`String` | The creation time of the object
+| `CamelGoogleCloudStorageLastUpdate` |`String` | The last update of the object
+|=======================================================================
+
+=== Google Storage Producer operations
+
+Google Storage component provides the following operation on the producer side:
+
+- copyObject
+- listObjects
+- deleteObject
+- deleteBucket
+- listBuckets
+- getObject
+- createDownloadLink
+
+If you don't specify an operation explicitly the producer will a file upload.
+
+=== Advanced component configuration
+
+If you need to have more control over the `storageClient` instance configuration, you can create your own instance and refer to it in your Camel google-storage component configuration:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("google-storage://myCamelBucket?storageClient=#client")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+=== Google Storage Producer Operation examples
+
+- File Upload: This operation will upload a file to the Google Storage based on the body content
+
+[source,java]
+--------------------------------------------------------------------------------
+//upload a file
+byte[] payload = "Camel rocks!".getBytes();
+ByteArrayInputStream bais = new ByteArrayInputStream(payload);
+from("direct:start")
+.process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
+    exchange.getIn().setBody(bais);    
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+.log("uploaded file object:${header.CamelGoogleCloudStorageObjectName}, body:${body}");
+--------------------------------------------------------------------------------
+
+This operation will upload the file camel.txt with the content "Camel rocks!" in the myCamelBucket bucket
+
+- CopyObject: this operation copy an object from one bucket to a different one
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.copyObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, "myCamelBucket_dest");
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, "camel_copy.txt");
+  })
+  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will copy the object with the name expressed in the header DESTINATION_OBJECT_NAME to the DESTINATION_BUCKET_NAME bucket, from the bucket myCamelBucket.
+
+- DeleteObject: this operation deletes an object from a bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.deleteObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
+  })
+  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the object from the bucket myCamelBucket.
+
+- ListBuckets: this operation list the buckets for this account in this region
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:start").process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listBuckets);
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will list the buckets for this account
+
+- DeleteBucket: this operation delete the bucket specified as URI parameter or header
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:start").process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listObjects);
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the bucket mycamelbucket
+
+- ListObjects: this operation list object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:start").process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listObjects);
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will list the objects in the mycamelbucket bucket
+
+- GetObject: this operation get a single object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket.
+
+- GetObjectRange: this operation get a single object range in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+          exchange.getIn().setHeader(S3Constants.RANGE_START, "0");
+          exchange.getIn().setHeader(S3Constants.RANGE_END, "9");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket, containing a the bytes from 0 to 9.
+
+- CreateDownloadLink: this operation will return a download link through S3 Presigner
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?accessKey=xxx&secretKey=yyy&region=region&operation=createDownloadLink")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return a download link url for the file camel-key in the bucket mycamelbucket and region region
+
+== Bucket Autocreation
+
+With the option `autoCreateBucket` users are able to avoid the autocreation of an S3 Bucket in case it doesn't exist. The default for this option is `true`.
+If set to false any operation on a not-existent bucket in AWS won't be successful and an error will be returned.
+
+== Moving stuff between a bucket and another bucket
+
+Some users like to consume stuff from a bucket and move the content in a different one without using the copyObject feature of this component.
+If this is case for you, don't forget to remove the bucketName header from the incoming exchange of the consumer, otherwise the file will be always overwritten on the same
+original bucket.
+
+== MoveAfterRead consumer option
+
+In addition to deleteAfterRead it has been added another option, moveAfterRead. With this option enabled the consumed object will be moved to a target destinationBucket instead of being only deleted.
+This will require specifying the destinationBucket option. As example:
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
+
+You have also the possibility of using a key prefix/suffix while moving the file to a different bucket. The options are destinationBucketPrefix and destinationBucketSuffix.
+
+Taking the above example, you could do something like:
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket&destinationBucketPrefix=RAW(pre-)&destinationBucketSuffix=RAW(-suff)")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
+
+So if the file name is test, in the myothercamelbucket you should see a file called pre-test-suff.
+
+== Using customer key as encryption
+
+We introduced also the customer key support (an alternative of using KMS). The following code shows an example.
+
+[source,java]
+--------------------------------------------------------------------------------
+String key = UUID.randomUUID().toString();
+byte[] secretKey = generateSecretKey();
+String b64Key = Base64.getEncoder().encodeToString(secretKey);
+String b64KeyMd5 = Md5Utils.md5AsBase64(secretKey);
+
+String awsEndpoint = "google-storage://mycamel?autoCreateBucket=false&useCustomerKey=true&customerKeyId=RAW(" + b64Key + ")&customerKeyMD5=RAW(" + b64KeyMd5 + ")&customerAlgorithm=" + AES256.name();
+
+from("direct:putObject")
+    .setHeader(AWS2S3Constants.KEY, constant("test.txt"))
+    .setBody(constant("Test"))
+    .to(awsEndpoint);
+--------------------------------------------------------------------------------
+
+== Using a POJO as body
+
+Sometimes build an AWS Request can be complex, because of multiple options. We introduce the possibility to use a POJO as body.
+In AWS S3 there are multiple operations you can submit, as an example for List brokers request, you can do something like:
+
+------------------------------------------------------------------------------------------------------
+from("direct:google-storage")
+     .setBody(ListObjectsRequest.builder().bucket(bucketName).build())
+     .to("google-storage://test?amazonS3Client=#amazonS3Client&operation=listObjects&pojoRequest=true")
+------------------------------------------------------------------------------------------------------
+
+In this way you'll pass the request directly without the need of passing headers and options specifically related to this operation.
+
+== Create S3 client and add component to registry
+Sometimes you would want to perform some advanced configuration using AWS2S3Configuration which also allows to set the S3 client.
+You can create and set the S3 client in the component configuration as shown in the following example
+
+[source,java]
+--------------------------------------------------------------------------------
+String awsBucketAccessKey = "your_access_key";
+String awsBucketSecretKey = "your_secret_key";
+
+S3Client s3Client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(awsBucketAccessKey, awsBucketSecretKey)))
+                .region(Region.US_EAST_1).build();
+
+AWS2S3Configuration configuration = new AWS2S3Configuration();
+configuration.setAmazonS3Client(s3Client);
+configuration.setAutoDiscoverClient(true);
+configuration.setBucketName("s3bucket2020");
+configuration.setRegion("us-east-1");
+--------------------------------------------------------------------------------
+
+Now you can configure the S3 component (using the configuration object created above) and add it to the registry in the
+configure method before initialization of routes.
+
+[source,java]
+--------------------------------------------------------------------------------
+AWS2S3Component s3Component = new AWS2S3Component(getContext());
+s3Component.setConfiguration(configuration);
+s3Component.setLazyStartProducer(true);
+camelContext.addComponent("google-storage", s3Component);
+--------------------------------------------------------------------------------
+
+Now your component will be used for all the operations implemented in camel routes.
 
-TBD
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
index 737aeab..7129bdb 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -43,7 +43,7 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
 
     @UriParam(label = "common", defaultValue = "US-EAST1",
               description = "The Cloud Storage location to use when creating the new buckets")
-    private String storageLocation;
+    private String storageLocation = "US-EAST1";
 
     @UriParam(label = "common", defaultValue = "STANDARD",
               description = "The Cloud Storage class to use when creating the new buckets")
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
index 42e7035..6fa173e 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
@@ -23,7 +23,6 @@ import java.util.Queue;
 import com.google.cloud.storage.Blob;
 import com.google.cloud.storage.BlobId;
 import com.google.cloud.storage.Bucket;
-import com.google.cloud.storage.BucketInfo;
 import com.google.cloud.storage.CopyWriter;
 import com.google.cloud.storage.Storage;
 import com.google.cloud.storage.Storage.CopyRequest;
@@ -63,9 +62,8 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
                 LOG.trace("Destination Bucket [{}] doesn't exist yet", getConfiguration().getDestinationBucket());
                 if (getConfiguration().isAutoCreateBucket()) {
                     // creates the new bucket because it doesn't exist yet
-                    BucketInfo bucketInfo = BucketInfo.newBuilder(getConfiguration().getDestinationBucket()).build();
-                    bucket = getStorageClient().create(bucketInfo);
-                    LOG.trace("Destination Bucket created", bucket.getName());
+                    GoogleCloudStorageEndpoint.createNewBucket(getConfiguration().getDestinationBucket(), getConfiguration(),
+                            getStorageClient());
                 }
             }
 
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 677cd75..043b414 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -95,15 +95,7 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
                     return;
                 } else {
                     // creates the new bucket because it doesn't exist yet
-                    final String location = configuration.getStorageLocation();
-                    final StorageClass storageClass = configuration.getStorageClass();
-
-                    Builder bucketBuilder = BucketInfo.newBuilder(configuration.getBucketName())
-                            .setStorageClass(storageClass)
-                            .setLocation(location);
-                    BucketInfo bucketInfo = bucketBuilder.build();
-                    bucket = storageClient.create(bucketInfo);
-                    LOG.trace("Bucket [{}] has been created", bucket.getName());
+                    createNewBucket(configuration.getBucketName(), configuration, this.storageClient);
                 }
             } catch (Exception e) {
                 LOG.error("Error - autocreatebucket", e);
@@ -112,6 +104,19 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
         }
     }
 
+    public static Bucket createNewBucket(String bucketName, GoogleCloudStorageComponentConfiguration conf, Storage storage) {
+        final String location = conf.getStorageLocation();
+        final StorageClass storageClass = conf.getStorageClass();
+
+        Builder bucketBuilder = BucketInfo.newBuilder(bucketName)
+                .setStorageClass(storageClass)
+                .setLocation(location);
+        BucketInfo bucketInfo = bucketBuilder.build();
+        Bucket bucket = storage.create(bucketInfo);
+        LOG.trace("Bucket [{}] has been created", bucket.getName());
+        return bucket;
+    }
+
     public GoogleCloudStorageComponentConfiguration getConfiguration() {
         return configuration;
     }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
index 9cf73b5..b4a3a51 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
@@ -241,6 +241,19 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
             throw new IllegalArgumentException("Destination Key must be specified for copyObject Operation");
         }
 
+        //if bucket does not exsist, create it
+        Bucket destinationBucketCheck = storage.get(bucketNameDestination);
+        if (destinationBucketCheck != null) {
+            LOG.trace("destinationBucketCheck [{}] already exists", destinationBucketCheck.getName());
+        } else {
+            LOG.trace("Destination Bucket [{}] doesn't exist yet", bucketNameDestination);
+            if (getConfiguration().isAutoCreateBucket()) {
+                // creates the new bucket because it doesn't exist yet
+                destinationBucketCheck
+                        = GoogleCloudStorageEndpoint.createNewBucket(bucketNameDestination, getConfiguration(), storage);
+            }
+        }
+
         BlobId sourceBlobId = BlobId.of(bucketName, objectName);
         BlobId targetBlobId = BlobId.of(bucketNameDestination, destinationObjectName);
         CopyRequest request = CopyRequest.of(sourceBlobId, targetBlobId);
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index 9b83c19..c078d71 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -167,10 +167,342 @@ with the following path and query parameters:
 // endpoint options: END
 
 
-== Message Headers
+== Usage
 
-TBD
+=== Message headers evaluated by the Google Storage Producer
 
-== Producer Endpoints
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+
+|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageDestinationBucketName` |`String` |The bucket Destination Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageDestinationObjectName` |`String` |The object Destination Name which will be used for the current operation
+
+|`CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
+
+|`CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
+
+
+|`CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
+
+|`CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
+
+|`CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
+
+|`CamelGoogleCloudStorageOperation` |`String` |The operation to perform. Permitted values are copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink
+
+|`CamelGoogleCloudStorageDownloadLinkExpirationTime` |`Long` |The time in millisecond the download link will be valid.
+
+|=======================================================================
+
+=== Message headers set by the Google Storage Producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelGoogleCloudStorageETag` |`String` |The ETag value for the newly uploaded object.
+
+|=======================================================================
+
+=== Message headers set by the Google Storage Consumer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
+| `CamelGoogleCloudStorageCacheControl` |`String` | The Cache-Control metadata can specify two different aspects of how data is served from Cloud Storage: whether the data can be cached and whether the data can be transformed
+| `CamelGoogleCloudStorageComponentCount` |`String` | The component count of this object
+| `CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
+| `CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
+| `CamelGoogleCloudStorageContentLanguage` |`String` | The Content-Language metadata indicates the language(s) that the object is intended for.
+| `CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
+| `CamelGoogleCloudStorageCustomTime` |`String` | The Custom-Time metadata is a user-specified date and time represented in the RFC 3339 format YYYY-MM-DD'T'HH:MM:SS.SS'Z' or YYYY-MM-DD'T'HH:MM:SS'Z' when milliseconds are zero. This metadata is typically set in order to use the DaysSinceCustomTime condition in Object Lifecycle Management.
+| `CamelGoogleCloudStorageCrc32cHex` |`String` | The CRC32c of the object
+| `CamelGoogleCloudStorageETag` |`String` | The ETag for the Object.
+| `CamelGoogleCloudStorageGeneration` |`String` | Is the generation number of the object for which you are retrieving information.
+| `CamelGoogleCloudStorageBlobId` |`String` | The blob id of the object
+| `CamelGoogleCloudStorageKmsKeyName` |`String` | The KMS key name
+| `CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
+| `CamelGoogleCloudStorageMediaLink` |`String` | The media link
+| `CamelGoogleCloudStorageMetageneration` | `String` | The metageneration of the object
+| `CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
+| `CamelGoogleCloudStorageStorageClass` | `String` | The storage class of the object
+| `CamelGoogleCloudStorageCreateTime` |`String` | The creation time of the object
+| `CamelGoogleCloudStorageLastUpdate` |`String` | The last update of the object
+|=======================================================================
+
+=== Google Storage Producer operations
+
+Google Storage component provides the following operation on the producer side:
+
+- copyObject
+- listObjects
+- deleteObject
+- deleteBucket
+- listBuckets
+- getObject
+- createDownloadLink
+
+If you don't specify an operation explicitly the producer will a file upload.
+
+=== Advanced component configuration
+
+If you need to have more control over the `storageClient` instance configuration, you can create your own instance and refer to it in your Camel google-storage component configuration:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("google-storage://myCamelBucket?storageClient=#client")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+=== Google Storage Producer Operation examples
+
+- File Upload: This operation will upload a file to the Google Storage based on the body content
+
+[source,java]
+--------------------------------------------------------------------------------
+//upload a file
+byte[] payload = "Camel rocks!".getBytes();
+ByteArrayInputStream bais = new ByteArrayInputStream(payload);
+from("direct:start")
+.process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
+    exchange.getIn().setBody(bais);    
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+.log("uploaded file object:${header.CamelGoogleCloudStorageObjectName}, body:${body}");
+--------------------------------------------------------------------------------
+
+This operation will upload the file camel.txt with the content "Camel rocks!" in the myCamelBucket bucket
+
+- CopyObject: this operation copy an object from one bucket to a different one
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.BUCKET_DESTINATION_NAME, "camelDestinationBucket");
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+          exchange.getIn().setHeader(S3Constants.DESTINATION_KEY, "camelDestinationKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=copyObject")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will copy the object with the name expressed in the header camelDestinationKey to the camelDestinationBucket bucket, from the bucket mycamelbucket.
+
+- DeleteObject: this operation deletes an object from a bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteObject")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the object camelKey from the bucket mycamelbucket.
+
+- ListBuckets: this operation list the buckets for this account in this region
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listBuckets")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will list the buckets for this account
+
+- DeleteBucket: this operation delete the bucket specified as URI parameter or header
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the bucket mycamelbucket
+
+- ListObjects: this operation list object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listObjects")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will list the objects in the mycamelbucket bucket
+
+- GetObject: this operation get a single object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket.
+
+- GetObjectRange: this operation get a single object range in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+          exchange.getIn().setHeader(S3Constants.RANGE_START, "0");
+          exchange.getIn().setHeader(S3Constants.RANGE_END, "9");
+      }
+  })
+  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket, containing a the bytes from 0 to 9.
+
+- CreateDownloadLink: this operation will return a download link through S3 Presigner
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
+      }
+  })
+  .to("google-storage://mycamelbucket?accessKey=xxx&secretKey=yyy&region=region&operation=createDownloadLink")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will return a download link url for the file camel-key in the bucket mycamelbucket and region region
+
+== Bucket Autocreation
+
+With the option `autoCreateBucket` users are able to avoid the autocreation of an S3 Bucket in case it doesn't exist. The default for this option is `true`.
+If set to false any operation on a not-existent bucket in AWS won't be successful and an error will be returned.
+
+== Moving stuff between a bucket and another bucket
+
+Some users like to consume stuff from a bucket and move the content in a different one without using the copyObject feature of this component.
+If this is case for you, don't forget to remove the bucketName header from the incoming exchange of the consumer, otherwise the file will be always overwritten on the same
+original bucket.
+
+== MoveAfterRead consumer option
+
+In addition to deleteAfterRead it has been added another option, moveAfterRead. With this option enabled the consumed object will be moved to a target destinationBucket instead of being only deleted.
+This will require specifying the destinationBucket option. As example:
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
+
+You have also the possibility of using a key prefix/suffix while moving the file to a different bucket. The options are destinationBucketPrefix and destinationBucketSuffix.
+
+Taking the above example, you could do something like:
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket&destinationBucketPrefix=RAW(pre-)&destinationBucketSuffix=RAW(-suff)")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
+
+So if the file name is test, in the myothercamelbucket you should see a file called pre-test-suff.
+
+== Using customer key as encryption
+
+We introduced also the customer key support (an alternative of using KMS). The following code shows an example.
+
+[source,java]
+--------------------------------------------------------------------------------
+String key = UUID.randomUUID().toString();
+byte[] secretKey = generateSecretKey();
+String b64Key = Base64.getEncoder().encodeToString(secretKey);
+String b64KeyMd5 = Md5Utils.md5AsBase64(secretKey);
+
+String awsEndpoint = "google-storage://mycamel?autoCreateBucket=false&useCustomerKey=true&customerKeyId=RAW(" + b64Key + ")&customerKeyMD5=RAW(" + b64KeyMd5 + ")&customerAlgorithm=" + AES256.name();
+
+from("direct:putObject")
+    .setHeader(AWS2S3Constants.KEY, constant("test.txt"))
+    .setBody(constant("Test"))
+    .to(awsEndpoint);
+--------------------------------------------------------------------------------
+
+== Using a POJO as body
+
+Sometimes build an AWS Request can be complex, because of multiple options. We introduce the possibility to use a POJO as body.
+In AWS S3 there are multiple operations you can submit, as an example for List brokers request, you can do something like:
+
+------------------------------------------------------------------------------------------------------
+from("direct:google-storage")
+     .setBody(ListObjectsRequest.builder().bucket(bucketName).build())
+     .to("google-storage://test?amazonS3Client=#amazonS3Client&operation=listObjects&pojoRequest=true")
+------------------------------------------------------------------------------------------------------
+
+In this way you'll pass the request directly without the need of passing headers and options specifically related to this operation.
+
+== Create S3 client and add component to registry
+Sometimes you would want to perform some advanced configuration using AWS2S3Configuration which also allows to set the S3 client.
+You can create and set the S3 client in the component configuration as shown in the following example
+
+[source,java]
+--------------------------------------------------------------------------------
+String awsBucketAccessKey = "your_access_key";
+String awsBucketSecretKey = "your_secret_key";
+
+S3Client s3Client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(awsBucketAccessKey, awsBucketSecretKey)))
+                .region(Region.US_EAST_1).build();
+
+AWS2S3Configuration configuration = new AWS2S3Configuration();
+configuration.setAmazonS3Client(s3Client);
+configuration.setAutoDiscoverClient(true);
+configuration.setBucketName("s3bucket2020");
+configuration.setRegion("us-east-1");
+--------------------------------------------------------------------------------
+
+Now you can configure the S3 component (using the configuration object created above) and add it to the registry in the
+configure method before initialization of routes.
+
+[source,java]
+--------------------------------------------------------------------------------
+AWS2S3Component s3Component = new AWS2S3Component(getContext());
+s3Component.setConfiguration(configuration);
+s3Component.setLazyStartProducer(true);
+camelContext.addComponent("google-storage", s3Component);
+--------------------------------------------------------------------------------
+
+Now your component will be used for all the operations implemented in camel routes.
 
-TBD


[camel] 05/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 407a7b81cd4a9b0d791a5ebe4e985e81e450812c
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Thu Feb 11 21:59:55 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/camel-google-storage/ReadMe.md | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/components/camel-google-storage/ReadMe.md b/components/camel-google-storage/ReadMe.md
index fcefc05..e0af72a 100644
--- a/components/camel-google-storage/ReadMe.md
+++ b/components/camel-google-storage/ReadMe.md
@@ -1,5 +1,5 @@
 # Camel Google Storage Component
-This component is based on the https://github.com/googleapis/java-storage[google java storage library] that works as a client for the Google Cloud Storage.
+This component is based on the [google java storage library](https://github.com/googleapis/java-storage) that works as a client for the Google Cloud Storage.
 
 
 ## Camel Google Storage Component testing
@@ -9,18 +9,26 @@ Due to the nature of the component, it needs to be tested against a google Stora
 they doesn't cover all the functionalities.
 
 The tests are organized into two packages:
-* Unit : <br>
-  Standalone tests that can be conducted on their own
-* Integration : <br>
-  Tests against a Google Storage instance
+* **Unit** : Standalone tests that can be conducted on their own
+* **Integration** : Tests against a Google Storage instance
 
-For the Unit tests has been extended the emulator https://github.com/googleapis/java-storage-nio/blob/master/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java[FakeStorageRpc]
+For the Unit tests has been extended the emulator [google-cloud-nio](https://github.com/googleapis/java-storage-nio/tree/master/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing)
 adding some functionalities (bucket creation and deletion). However there are still some unsupported operations.
 
 
 ### Execution of integration tests
 
-A Google Cloud account with a project...
+To run the Google Storage client library, you must first set up authentication by creating a service account key.
+You can find more info at: (cloud.google.com/storage/docs/reference/libraries#setting_up_authentication)[https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication].
+
+When you have the **service account key** you can provide authentication credentials to your application code by setting the environment variable:
+
+`export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"`
+
+or directly through the component endpoint
+
+`from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")`
+
 
 Running tests against Storage instance:
 


[camel] 24/31: CAMEL-15964 camel-google-storage component - improvements

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 78efb7a9b028693be66d26e917dc0f927313b9e8
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Tue Feb 16 18:42:58 2021 +0100

    CAMEL-15964 camel-google-storage component - improvements
---
 .../camel/component/google/storage/GoogleCloudStorageConsumer.java    | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
index 6fa173e..bbe41b0 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
@@ -41,9 +41,6 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
 
     private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageConsumer.class);
 
-    //private String marker;
-    //private transient String consumerToString;
-
     public GoogleCloudStorageConsumer(GoogleCloudStorageEndpoint endpoint, Processor processor) {
         super(endpoint, processor);
     }
@@ -198,7 +195,6 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
      * @param exchange the exchange
      */
     protected void processCommit(Exchange exchange) {
-        //LOG.info("processCommit");
         try {
             if (getConfiguration().isMoveAfterRead()) {
                 String bucketName = exchange.getIn().getHeader(GoogleCloudStorageConstants.BUCKET_NAME, String.class);


[camel] 06/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8eba1d4a5364ec09727374fce1a8c6cfc704095e
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Thu Feb 11 22:02:16 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/camel-google-storage/ReadMe.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/components/camel-google-storage/ReadMe.md b/components/camel-google-storage/ReadMe.md
index e0af72a..fe73812 100644
--- a/components/camel-google-storage/ReadMe.md
+++ b/components/camel-google-storage/ReadMe.md
@@ -19,7 +19,7 @@ adding some functionalities (bucket creation and deletion). However there are st
 ### Execution of integration tests
 
 To run the Google Storage client library, you must first set up authentication by creating a service account key.
-You can find more info at: (cloud.google.com/storage/docs/reference/libraries#setting_up_authentication)[https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication].
+You can find more info at: [cloud.google.com/storage/docs/reference/libraries#setting_up_authentication](https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication).
 
 When you have the **service account key** you can provide authentication credentials to your application code by setting the environment variable:
 


[camel] 29/31: CAMEL-15964 - Fixed doc file name

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f9dd025a04d87f542b232fafa9923b909751d6ce
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 17 07:14:03 2021 +0100

    CAMEL-15964 - Fixed doc file name
---
 .../src/main/docs/{google-storage-component.adoc => google-storage.adoc}  | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage.adoc
similarity index 100%
rename from components/camel-google-storage/src/main/docs/google-storage-component.adoc
rename to components/camel-google-storage/src/main/docs/google-storage.adoc


[camel] 09/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f59b178bd07bed8c1ed41ecc403aa0cebb0f57e2
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sat Feb 13 16:56:07 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../catalog/docs/google-storage-component.adoc     |  22 ++--
 components/camel-google-storage/ReadMe.md          |   2 +-
 .../component/google/storage/google-storage.json   |  20 ++--
 .../src/main/docs/google-storage-component.adoc    |  22 ++--
 .../GoogleCloudStorageComponentConfiguration.java  |  32 ++---
 .../dsl/GoogleStorageComponentBuilderFactory.java  |  69 +++++------
 .../GoogleCloudStorageEndpointBuilderFactory.java  | 133 +++++++--------------
 .../ROOT/pages/google-storage-component.adoc       |  22 ++--
 8 files changed, 125 insertions(+), 197 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index b6cdfc5..7754e9a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -49,7 +49,7 @@ export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 or directly through the component endpoint
 [source,text]
 --------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
 --------------------------------------------------------
 
 
@@ -74,16 +74,16 @@ The Google Storage component supports 13 options, which are listed below.
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
-| *objectName* (common) | objectName |  | String
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *objectName* (producer) | Object name |  | String
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -114,20 +114,20 @@ with the following path and query parameters:
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *objectName* (common) | objectName |  | String
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *objectName* (producer) | Object name |  | String
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
diff --git a/components/camel-google-storage/ReadMe.md b/components/camel-google-storage/ReadMe.md
index ee5f91c..bbd2bed 100644
--- a/components/camel-google-storage/ReadMe.md
+++ b/components/camel-google-storage/ReadMe.md
@@ -31,7 +31,7 @@ or for windows:
 
 or directly through the component endpoint
 
-`from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")`
+`from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")`
 
 
 Running tests against Storage instance:
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index 2e1d205..a139f6c 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -24,35 +24,35 @@
   "componentProperties": {
     "autoCreateBucket": { "kind": "property", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
-    "objectName": { "kind": "property", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
     "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key" },
     "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
     "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 [...]
-    "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from S3 after they have been retrieved. The delete [...]
+    "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. Th [...]
     "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRe [...]
-    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the S3Object exchange will be consumed and put into the bod [...]
-    "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from S3 bucket to a different bucket after they have be [...]
+    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body  [...]
+    "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after they [...]
     "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 [...]
-    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Googl [...]
+    "objectName": { "kind": "property", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Object name" },
+    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Googl [...]
     "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 [...]
   },
   "properties": {
     "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Bucket name" },
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
-    "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
     "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key" },
     "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
     "bridgeErrorHandler": { "kind": "parameter", "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 m [...]
-    "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from S3 after they have been retrieved. The delet [...]
+    "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. T [...]
     "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterR [...]
-    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the S3Object exchange will be consumed and put into the bo [...]
-    "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from S3 bucket to a different bucket after they have b [...]
+    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body [...]
+    "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after the [...]
     "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
     "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." },
     "pollStrategy": { "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation  [...]
     "lazyStartProducer": { "kind": "parameter", "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 sta [...]
-    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Goog [...]
+    "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Object name" },
+    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Goog [...]
     "backoffErrorThreshold": { "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
     "backoffIdleThreshold": { "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
     "backoffMultiplier": { "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening agai [...]
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index b6cdfc5..7754e9a 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -49,7 +49,7 @@ export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 or directly through the component endpoint
 [source,text]
 --------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
 --------------------------------------------------------
 
 
@@ -74,16 +74,16 @@ The Google Storage component supports 13 options, which are listed below.
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
-| *objectName* (common) | objectName |  | String
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *objectName* (producer) | Object name |  | String
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -114,20 +114,20 @@ with the following path and query parameters:
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *objectName* (common) | objectName |  | String
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *objectName* (producer) | Object name |  | String
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
index 49e8f8b..c77e5b3 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -17,14 +17,11 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     @UriParam(label = "common", description = "Service account key")
     private String serviceAccountKey;
 
-    //@UriParam(label = "common", description = "ProjectId")
-    //private String projectId;
-
     @UriParam(label = "producer",
               enums = "copyObject,listObjects,deleteObject,deleteBucket,listBuckets,getObject,createDownloadLink")
     private GoogleCloudStorageComponentOperations operation;
 
-    @UriParam
+    @UriParam(label = "producer", description = "Object name")
     private String objectName;
 
     @UriParam(label = "common", defaultValue = "true")
@@ -87,7 +84,7 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     }
 
     /**
-     * objectName
+     * The bjectName (the file insisde the bucket)
      */
     public void setObjectName(String objectName) {
         this.objectName = objectName;
@@ -111,7 +108,7 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     }
 
     /**
-     * set the operation for the producer
+     * Set the operation for the producer
      * 
      * @param operation
      */
@@ -135,9 +132,9 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     }
 
     /**
-     * Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the
-     * destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed.
-     * If a rollback occurs, the object is not moved.
+     * Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the
+     * operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange
+     * is committed. If a rollback occurs, the object is not moved.
      */
     public void setMoveAfterRead(boolean moveAfterRead) {
         this.moveAfterRead = moveAfterRead;
@@ -194,25 +191,18 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     }
 
     /**
-     * Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed.
-     * If a rollback occurs, the object is not deleted.
+     * Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is
+     * committed. If a rollback occurs, the object is not deleted.
      * <p/>
-     * If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you
-     * need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the
-     * {@link AWS2S3Constants#BUCKET_NAME} and {@link AWS2S3Constants#KEY} headers, or only the
-     * {@link AWS2S3Constants#KEY} header.
+     * If this option is false, then the same objects will be retrieve over and over again on the polls.
      */
     public void setDeleteAfterRead(boolean deleteAfterRead) {
         this.deleteAfterRead = deleteAfterRead;
     }
 
     /**
-     * If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object
-     * stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is
-     * strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will
-     * be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close
-     * the S3Object stream. However setting autocloseBody to true when includeBody is false it will schedule to close
-     * the S3Object stream automatically on exchange completion.
+     * If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream
+     * will be put raw into the body and the headers will be set with the object metadata.
      */
     public void setIncludeBody(boolean includeBody) {
         this.includeBody = includeBody;
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index e717385..4bb5f79 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -85,21 +85,6 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * objectName.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param objectName the value to set
-         * @return the dsl builder
-         */
-        default GoogleStorageComponentBuilder objectName(
-                java.lang.String objectName) {
-            doSetProperty("objectName", objectName);
-            return this;
-        }
-        /**
          * Service account key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
@@ -153,14 +138,10 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * Delete objects from S3 after they have been retrieved. The delete is
-         * only performed if the Exchange is committed. If a rollback occurs,
-         * the object is not deleted. If this option is false, then the same
-         * objects will be retrieve over and over again on the polls. Therefore
-         * you need to use the Idempotent Consumer EIP in the route to filter
-         * out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME
-         * and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY
-         * header.
+         * Delete objects from the bucket after they have been retrieved. The
+         * delete is only performed if the Exchange is committed. If a rollback
+         * occurs, the object is not deleted. If this option is false, then the
+         * same objects will be retrieve over and over again on the polls.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
@@ -192,16 +173,9 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * If it is true, the S3Object exchange will be consumed and put into
-         * the body and closed. If false the S3Object stream will be put raw
-         * into the body and the headers will be set with the S3 object
-         * metadata. This option is strongly related to autocloseBody option. In
-         * case of setting includeBody to true because the S3Object stream will
-         * be consumed then it will also be closed in case of includeBody false
-         * then it will be up to the caller to close the S3Object stream.
-         * However setting autocloseBody to true when includeBody is false it
-         * will schedule to close the S3Object stream automatically on exchange
-         * completion.
+         * If it is true, the Object exchange will be consumed and put into the
+         * body and closed. If false the Object stream will be put raw into the
+         * body and the headers will be set with the object metadata.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
@@ -216,11 +190,11 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * Move objects from S3 bucket to a different bucket after they have
-         * been retrieved. To accomplish the operation the destinationBucket
-         * option must be set. The copy bucket operation is only performed if
-         * the Exchange is committed. If a rollback occurs, the object is not
-         * moved.
+         * Move objects from the origin bucket to a different bucket after they
+         * have been retrieved. To accomplish the operation the
+         * destinationBucket option must be set. The copy bucket operation is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the object is not moved.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
@@ -260,7 +234,22 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * set the operation for the producer.
+         * Object name.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param objectName the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder objectName(
+                java.lang.String objectName) {
+            doSetProperty("objectName", objectName);
+            return this;
+        }
+        /**
+         * Set the operation for the producer.
          * 
          * The option is a:
          * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
@@ -322,7 +311,6 @@ public interface GoogleStorageComponentBuilderFactory {
             switch (name) {
             case "autoCreateBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setAutoCreateBucket((boolean) value); return true;
             case "configuration": ((GoogleCloudStorageComponent) component).setConfiguration((org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration) value); return true;
-            case "objectName": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setObjectName((java.lang.String) value); return true;
             case "serviceAccountKey": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setServiceAccountKey((java.lang.String) value); return true;
             case "storageClient": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageClient((com.google.cloud.storage.Storage) value); return true;
             case "bridgeErrorHandler": ((GoogleCloudStorageComponent) component).setBridgeErrorHandler((boolean) value); return true;
@@ -331,6 +319,7 @@ public interface GoogleStorageComponentBuilderFactory {
             case "includeBody": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setIncludeBody((boolean) value); return true;
             case "moveAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setMoveAfterRead((boolean) value); return true;
             case "lazyStartProducer": ((GoogleCloudStorageComponent) component).setLazyStartProducer((boolean) value); return true;
+            case "objectName": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setObjectName((java.lang.String) value); return true;
             case "operation": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setOperation((org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations) value); return true;
             case "autowiredEnabled": ((GoogleCloudStorageComponent) component).setAutowiredEnabled((boolean) value); return true;
             default: return false;
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index 42ceb8d..87fe200d 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -81,21 +81,6 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * objectName.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param objectName the value to set
-         * @return the dsl builder
-         */
-        default GoogleCloudStorageEndpointConsumerBuilder objectName(
-                String objectName) {
-            doSetProperty("objectName", objectName);
-            return this;
-        }
-        /**
          * Service account key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
@@ -188,14 +173,10 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Delete objects from S3 after they have been retrieved. The delete is
-         * only performed if the Exchange is committed. If a rollback occurs,
-         * the object is not deleted. If this option is false, then the same
-         * objects will be retrieve over and over again on the polls. Therefore
-         * you need to use the Idempotent Consumer EIP in the route to filter
-         * out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME
-         * and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY
-         * header.
+         * Delete objects from the bucket after they have been retrieved. The
+         * delete is only performed if the Exchange is committed. If a rollback
+         * occurs, the object is not deleted. If this option is false, then the
+         * same objects will be retrieve over and over again on the polls.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
@@ -211,14 +192,10 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Delete objects from S3 after they have been retrieved. The delete is
-         * only performed if the Exchange is committed. If a rollback occurs,
-         * the object is not deleted. If this option is false, then the same
-         * objects will be retrieve over and over again on the polls. Therefore
-         * you need to use the Idempotent Consumer EIP in the route to filter
-         * out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME
-         * and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY
-         * header.
+         * Delete objects from the bucket after they have been retrieved. The
+         * delete is only performed if the Exchange is committed. If a rollback
+         * occurs, the object is not deleted. If this option is false, then the
+         * same objects will be retrieve over and over again on the polls.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -251,16 +228,9 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * If it is true, the S3Object exchange will be consumed and put into
-         * the body and closed. If false the S3Object stream will be put raw
-         * into the body and the headers will be set with the S3 object
-         * metadata. This option is strongly related to autocloseBody option. In
-         * case of setting includeBody to true because the S3Object stream will
-         * be consumed then it will also be closed in case of includeBody false
-         * then it will be up to the caller to close the S3Object stream.
-         * However setting autocloseBody to true when includeBody is false it
-         * will schedule to close the S3Object stream automatically on exchange
-         * completion.
+         * If it is true, the Object exchange will be consumed and put into the
+         * body and closed. If false the Object stream will be put raw into the
+         * body and the headers will be set with the object metadata.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
@@ -276,16 +246,9 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * If it is true, the S3Object exchange will be consumed and put into
-         * the body and closed. If false the S3Object stream will be put raw
-         * into the body and the headers will be set with the S3 object
-         * metadata. This option is strongly related to autocloseBody option. In
-         * case of setting includeBody to true because the S3Object stream will
-         * be consumed then it will also be closed in case of includeBody false
-         * then it will be up to the caller to close the S3Object stream.
-         * However setting autocloseBody to true when includeBody is false it
-         * will schedule to close the S3Object stream automatically on exchange
-         * completion.
+         * If it is true, the Object exchange will be consumed and put into the
+         * body and closed. If false the Object stream will be put raw into the
+         * body and the headers will be set with the object metadata.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -302,11 +265,11 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Move objects from S3 bucket to a different bucket after they have
-         * been retrieved. To accomplish the operation the destinationBucket
-         * option must be set. The copy bucket operation is only performed if
-         * the Exchange is committed. If a rollback occurs, the object is not
-         * moved.
+         * Move objects from the origin bucket to a different bucket after they
+         * have been retrieved. To accomplish the operation the
+         * destinationBucket option must be set. The copy bucket operation is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the object is not moved.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
@@ -322,11 +285,11 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Move objects from S3 bucket to a different bucket after they have
-         * been retrieved. To accomplish the operation the destinationBucket
-         * option must be set. The copy bucket operation is only performed if
-         * the Exchange is committed. If a rollback occurs, the object is not
-         * moved.
+         * Move objects from the origin bucket to a different bucket after they
+         * have been retrieved. To accomplish the operation the
+         * destinationBucket option must be set. The copy bucket operation is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the object is not moved.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -1027,21 +990,6 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * objectName.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param objectName the value to set
-         * @return the dsl builder
-         */
-        default GoogleCloudStorageEndpointProducerBuilder objectName(
-                String objectName) {
-            doSetProperty("objectName", objectName);
-            return this;
-        }
-        /**
          * Service account key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
@@ -1138,7 +1086,22 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * set the operation for the producer.
+         * Object name.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param objectName the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder objectName(
+                String objectName) {
+            doSetProperty("objectName", objectName);
+            return this;
+        }
+        /**
+         * Set the operation for the producer.
          * 
          * The option is a:
          * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
@@ -1154,7 +1117,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * set the operation for the producer.
+         * Set the operation for the producer.
          * 
          * The option will be converted to a
          * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
@@ -1226,20 +1189,6 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * objectName.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param objectName the value to set
-         * @return the dsl builder
-         */
-        default GoogleCloudStorageEndpointBuilder objectName(String objectName) {
-            doSetProperty("objectName", objectName);
-            return this;
-        }
-        /**
          * Service account key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index 96c2165..9bc1d1b 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -51,7 +51,7 @@ export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 or directly through the component endpoint
 [source,text]
 --------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
 --------------------------------------------------------
 
 
@@ -76,16 +76,16 @@ The Google Storage component supports 13 options, which are listed below.
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
-| *objectName* (common) | objectName |  | String
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *objectName* (producer) | Object name |  | String
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -116,20 +116,20 @@ with the following path and query parameters:
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *objectName* (common) | objectName |  | String
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *objectName* (producer) | Object name |  | String
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int


[camel] 07/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d3ac419308e181a56bb4daf5a1ce3ba05943d7c4
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Thu Feb 11 22:45:54 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../catalog/docs/google-storage-component.adoc     | 161 ++++++++++++++++++++
 .../component/google/storage/google-storage.json   |   2 +-
 .../src/main/docs/google-storage-component.adoc    | 161 ++++++++++++++++++++
 .../google/storage/GoogleCloudStorageEndpoint.java |   2 +-
 .../component/ComponentsBuilderFactory.java        |   4 +-
 .../dsl/GoogleStorageComponentBuilderFactory.java  |   8 +-
 .../src/generated/resources/metadata.json          |   2 +-
 .../builder/endpoint/StaticEndpointBuilders.java   |   8 +-
 .../GoogleCloudStorageEndpointBuilderFactory.java  |  12 +-
 .../ROOT/pages/google-storage-component.adoc       | 163 +++++++++++++++++++++
 10 files changed, 504 insertions(+), 19 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
new file mode 100644
index 0000000..c26ce4a
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -0,0 +1,161 @@
+[[google-storage-component]]
+= Google Storage Component
+:docTitle: Google Storage
+:artifactId: camel-google-storage
+:description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
+:since: 3.7
+:supportLevel: Preview
+:component-header: Both producer and consumer are supported
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
+//Manually maintained attributes
+:group: Google
+
+*Since Camel {since}*
+
+*{component-header}*
+
+The Google Storage component provides access to https://cloud.google.com/storage/[Cloud Storage] via
+the https://github.com/googleapis/java-storage[google java storage library].
+
+Maven users will need to add the following dependency to their pom.xml
+for this component:
+
+[source,xml]
+------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-google-storage</artifactId>
+    <!-- use the same version as your Camel core version -->
+    <version>x.x.x</version>
+</dependency>
+
+------------------------------------------------------
+
+[[GoogleStorage-AuthenticationConfiguration]]
+
+== Authentication Configuration
+
+Google Storage component authentication is targeted for use with the GCP Service Accounts.
+For more information please refer to https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication[Google Storage Auth Guide].
+
+When you have the **service account key** you can provide authentication credentials to your application code.
+Google security credentials can be set explicitly by providing the path to the GCP credentials file location.
+
+[source,text]
+--------------------------------------------------------
+export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
+--------------------------------------------------------
+
+or directly through the component endpoint
+[source,text]
+--------------------------------------------------------
+from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")
+--------------------------------------------------------
+
+
+
+== URI Format
+
+[source,text]
+--------------------------------------------------------
+        google-storage://bucketName?[options]
+--------------------------------------------------------
+
+
+== Options
+
+// component options: START
+The Google Storage component supports 16 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
+| *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
+| *objectName* (common) | objectName |  | String
+| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *storageClient* (common) | Set strage client |  | Storage
+| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
+| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
+| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
+| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *lazyStartProducer* (producer) | 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 [...]
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *autowiredEnabled* (advanced) | 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. | true | boolean
+|===
+// component options: END
+
+// endpoint options: START
+The Google Storage endpoint is configured using URI syntax:
+
+----
+google-storage:bucketName
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *bucketName* | *Required* Bucket name |  | String
+|===
+
+
+=== Query Parameters (32 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
+| *objectName* (common) | objectName |  | String
+| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *storageClient* (common) | Set strage client |  | Storage
+| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
+| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
+| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
+| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
+| *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
+| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
+| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
+| *lazyStartProducer* (producer) | 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 [...]
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
+| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
+| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
+| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
+| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
+| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
+| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
+| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
+| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
+| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler | none | Object
+| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
+| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
+| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. There are 7 enums and the value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
+| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
+|===
+// endpoint options: END
+
+
+== Message Headers
+
+TBD
+
+== Producer Endpoints
+
+TBD
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index 7c752bb..7fac5a9 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -3,7 +3,7 @@
     "kind": "component",
     "name": "google-storage",
     "title": "Google Storage",
-    "description": "Google Cloud Storage is an Object Storage to store any amount of data and retrieve it as often you like.",
+    "description": "Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.",
     "deprecated": false,
     "firstVersion": "3.7.0",
     "label": "cloud",
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
new file mode 100644
index 0000000..c26ce4a
--- /dev/null
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -0,0 +1,161 @@
+[[google-storage-component]]
+= Google Storage Component
+:docTitle: Google Storage
+:artifactId: camel-google-storage
+:description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
+:since: 3.7
+:supportLevel: Preview
+:component-header: Both producer and consumer are supported
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
+//Manually maintained attributes
+:group: Google
+
+*Since Camel {since}*
+
+*{component-header}*
+
+The Google Storage component provides access to https://cloud.google.com/storage/[Cloud Storage] via
+the https://github.com/googleapis/java-storage[google java storage library].
+
+Maven users will need to add the following dependency to their pom.xml
+for this component:
+
+[source,xml]
+------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-google-storage</artifactId>
+    <!-- use the same version as your Camel core version -->
+    <version>x.x.x</version>
+</dependency>
+
+------------------------------------------------------
+
+[[GoogleStorage-AuthenticationConfiguration]]
+
+== Authentication Configuration
+
+Google Storage component authentication is targeted for use with the GCP Service Accounts.
+For more information please refer to https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication[Google Storage Auth Guide].
+
+When you have the **service account key** you can provide authentication credentials to your application code.
+Google security credentials can be set explicitly by providing the path to the GCP credentials file location.
+
+[source,text]
+--------------------------------------------------------
+export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
+--------------------------------------------------------
+
+or directly through the component endpoint
+[source,text]
+--------------------------------------------------------
+from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")
+--------------------------------------------------------
+
+
+
+== URI Format
+
+[source,text]
+--------------------------------------------------------
+        google-storage://bucketName?[options]
+--------------------------------------------------------
+
+
+== Options
+
+// component options: START
+The Google Storage component supports 16 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
+| *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
+| *objectName* (common) | objectName |  | String
+| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *storageClient* (common) | Set strage client |  | Storage
+| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
+| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
+| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
+| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *lazyStartProducer* (producer) | 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 [...]
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *autowiredEnabled* (advanced) | 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. | true | boolean
+|===
+// component options: END
+
+// endpoint options: START
+The Google Storage endpoint is configured using URI syntax:
+
+----
+google-storage:bucketName
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *bucketName* | *Required* Bucket name |  | String
+|===
+
+
+=== Query Parameters (32 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
+| *objectName* (common) | objectName |  | String
+| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *storageClient* (common) | Set strage client |  | Storage
+| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
+| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
+| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
+| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
+| *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
+| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
+| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
+| *lazyStartProducer* (producer) | 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 [...]
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
+| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
+| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
+| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
+| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
+| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
+| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
+| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
+| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
+| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler | none | Object
+| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
+| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
+| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. There are 7 enums and the value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
+| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
+|===
+// endpoint options: END
+
+
+== Message Headers
+
+TBD
+
+== Producer Endpoints
+
+TBD
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 877ca2d..19d5800 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -22,7 +22,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Google Cloud Storage is an Object Storage to store any amount of data and retrieve it as often you like.
+ * Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
  * 
  * Google Storage Endpoint definition represents a bucket within the storage and contains configuration to customize the
  * behavior of Consumer and Producer.
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index dff84f0..5f529a4 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -1985,8 +1985,8 @@ public interface ComponentsBuilderFactory {
     }
     /**
      * Google Storage (camel-google-storage)
-     * Google Cloud Storage is an Object Storage to store any amount of data and
-     * retrieve it as often you like.
+     * Store and retrieve objects from Google Cloud Storage Service using the
+     * google-cloud-storage library.
      * 
      * Category: cloud
      * Since: 3.7
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index 1ef85d2..72ce762 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -23,8 +23,8 @@ import org.apache.camel.builder.component.ComponentBuilder;
 import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
 
 /**
- * Google Cloud Storage is an Object Storage to store any amount of data and
- * retrieve it as often you like.
+ * Store and retrieve objects from Google Cloud Storage Service using the
+ * google-cloud-storage library.
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
@@ -33,8 +33,8 @@ public interface GoogleStorageComponentBuilderFactory {
 
     /**
      * Google Storage (camel-google-storage)
-     * Google Cloud Storage is an Object Storage to store any amount of data and
-     * retrieve it as often you like.
+     * Store and retrieve objects from Google Cloud Storage Service using the
+     * google-cloud-storage library.
      * 
      * Category: cloud
      * Since: 3.7
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index b02da08..7406e1a 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -3237,7 +3237,7 @@
     "kind": "component",
     "name": "google-storage",
     "title": "Google Storage",
-    "description": "Google Cloud Storage is an Object Storage to store any amount of data and retrieve it as often you like.",
+    "description": "Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.",
     "deprecated": false,
     "firstVersion": "3.7.0",
     "label": "cloud",
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index 1850dc5..2c54d0a 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -6697,8 +6697,8 @@ public class StaticEndpointBuilders {
     }
     /**
      * Google Storage (camel-google-storage)
-     * Google Cloud Storage is an Object Storage to store any amount of data and
-     * retrieve it as often you like.
+     * Store and retrieve objects from Google Cloud Storage Service using the
+     * google-cloud-storage library.
      * 
      * Category: cloud
      * Since: 3.7
@@ -6718,8 +6718,8 @@ public class StaticEndpointBuilders {
     }
     /**
      * Google Storage (camel-google-storage)
-     * Google Cloud Storage is an Object Storage to store any amount of data and
-     * retrieve it as often you like.
+     * Store and retrieve objects from Google Cloud Storage Service using the
+     * google-cloud-storage library.
      * 
      * Category: cloud
      * Since: 3.7
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index 632dd6d..da762b7 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -29,8 +29,8 @@ import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.PollingConsumerPollStrategy;
 
 /**
- * Google Cloud Storage is an Object Storage to store any amount of data and
- * retrieve it as often you like.
+ * Store and retrieve objects from Google Cloud Storage Service using the
+ * google-cloud-storage library.
  * 
  * Generated by camel build tools - do NOT edit this file!
  */
@@ -1386,8 +1386,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
     public interface GoogleCloudStorageBuilders {
         /**
          * Google Storage (camel-google-storage)
-         * Google Cloud Storage is an Object Storage to store any amount of data
-         * and retrieve it as often you like.
+         * Store and retrieve objects from Google Cloud Storage Service using
+         * the google-cloud-storage library.
          * 
          * Category: cloud
          * Since: 3.7
@@ -1406,8 +1406,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
         }
         /**
          * Google Storage (camel-google-storage)
-         * Google Cloud Storage is an Object Storage to store any amount of data
-         * and retrieve it as often you like.
+         * Store and retrieve objects from Google Cloud Storage Service using
+         * the google-cloud-storage library.
          * 
          * Category: cloud
          * Since: 3.7
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
new file mode 100644
index 0000000..ca3c088
--- /dev/null
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -0,0 +1,163 @@
+[[google-storage-component]]
+= Google Storage Component
+//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
+:page-source: componentscamel-google-storagesrcmaindocsgoogle-storage-component.adoc
+:docTitle: Google Storage
+:artifactId: camel-google-storage
+:description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
+:since: 3.7
+:supportLevel: Preview
+:component-header: Both producer and consumer are supported
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
+//Manually maintained attributes
+:group: Google
+
+*Since Camel {since}*
+
+*{component-header}*
+
+The Google Storage component provides access to https://cloud.google.com/storage/[Cloud Storage] via
+the https://github.com/googleapis/java-storage[google java storage library].
+
+Maven users will need to add the following dependency to their pom.xml
+for this component:
+
+[source,xml]
+------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-google-storage</artifactId>
+    <!-- use the same version as your Camel core version -->
+    <version>x.x.x</version>
+</dependency>
+
+------------------------------------------------------
+
+[[GoogleStorage-AuthenticationConfiguration]]
+
+== Authentication Configuration
+
+Google Storage component authentication is targeted for use with the GCP Service Accounts.
+For more information please refer to https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication[Google Storage Auth Guide].
+
+When you have the **service account key** you can provide authentication credentials to your application code.
+Google security credentials can be set explicitly by providing the path to the GCP credentials file location.
+
+[source,text]
+--------------------------------------------------------
+export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
+--------------------------------------------------------
+
+or directly through the component endpoint
+[source,text]
+--------------------------------------------------------
+from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")
+--------------------------------------------------------
+
+
+
+== URI Format
+
+[source,text]
+--------------------------------------------------------
+        google-storage://bucketName?[options]
+--------------------------------------------------------
+
+
+== Options
+
+// component options: START
+The Google Storage component supports 16 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
+| *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
+| *objectName* (common) | objectName |  | String
+| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *storageClient* (common) | Set strage client |  | Storage
+| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
+| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
+| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
+| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *lazyStartProducer* (producer) | 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 [...]
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *autowiredEnabled* (advanced) | 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. | true | boolean
+|===
+// component options: END
+
+// endpoint options: START
+The Google Storage endpoint is configured using URI syntax:
+
+----
+google-storage:bucketName
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *bucketName* | *Required* Bucket name |  | String
+|===
+
+
+=== Query Parameters (32 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
+| *objectName* (common) | objectName |  | String
+| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *storageClient* (common) | Set strage client |  | Storage
+| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
+| *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
+| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
+| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
+| *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
+| *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
+| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
+| *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
+| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
+| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
+| *lazyStartProducer* (producer) | 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 [...]
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
+| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
+| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
+| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
+| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
+| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
+| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
+| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
+| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
+| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler | none | Object
+| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
+| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
+| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. There are 7 enums and the value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
+| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
+|===
+// endpoint options: END
+
+
+== Message Headers
+
+TBD
+
+== Producer Endpoints
+
+TBD


[camel] 15/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ef217a1aefa6b98e230f16a09989c3ec186164b0
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sun Feb 14 11:09:04 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../catalog/docs/google-storage-component.adoc     | 207 +++++----------------
 .../src/main/docs/google-storage-component.adoc    | 177 ++++--------------
 .../google/storage/GoogleCloudStorageEndpoint.java |   2 +-
 .../google/storage/GoogleCloudStorageProducer.java |   4 +-
 .../ROOT/pages/google-storage-component.adoc       | 207 +++++----------------
 5 files changed, 138 insertions(+), 459 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index cc2010d..d50dd54 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -284,134 +284,98 @@ This operation will upload the file camel.txt with the content "Camel rocks!" in
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.BUCKET_DESTINATION_NAME, "camelDestinationBucket");
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-          exchange.getIn().setHeader(S3Constants.DESTINATION_KEY, "camelDestinationKey");
-      }
+  from("direct:start").process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.copyObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, "myCamelBucket_dest");
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, "camel_copy.txt");
   })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=copyObject")
+  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
   .to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will copy the object with the name expressed in the header camelDestinationKey to the camelDestinationBucket bucket, from the bucket mycamelbucket.
+This operation will copy the object with the name expressed in the header DESTINATION_OBJECT_NAME to the DESTINATION_BUCKET_NAME bucket, from the bucket myCamelBucket.
 
 - DeleteObject: this operation deletes an object from a bucket
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-      }
+  from("direct:start").process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.deleteObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
   })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteObject")
+  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
   .to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will delete the object camelKey from the bucket mycamelbucket.
+This operation will delete the object from the bucket myCamelBucket.
 
 - ListBuckets: this operation list the buckets for this account in this region
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start")
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listBuckets")
-  .to("mock:result");
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listBuckets")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will list the buckets for this account
+This operation will list the buckets for this account.
 
 - DeleteBucket: this operation delete the bucket specified as URI parameter or header
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start")
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
-  .to("mock:result");
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=deleteBucket")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will delete the bucket mycamelbucket
+This operation will delete the bucket myCamelBucket.
 
 - ListObjects: this operation list object in a specific bucket
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start")
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listObjects")
-  .to("mock:result");
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listObjects")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will list the objects in the mycamelbucket bucket
+This operation will list the objects in the myCamelBucket bucket.
 
 - GetObject: this operation get a single object in a specific bucket
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-      }
-  })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket.
-
-- GetObjectRange: this operation get a single object range in a specific bucket
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-          exchange.getIn().setHeader(S3Constants.RANGE_START, "0");
-          exchange.getIn().setHeader(S3Constants.RANGE_END, "9");
-      }
-  })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange")
-  .to("mock:result");
+from("direct:start")
+.process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=getObject")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket, containing a the bytes from 0 to 9.
+This operation will return an Blob objct instance related to the OBJECT_NAME object in myCamelBucket bucket.
 
-- CreateDownloadLink: this operation will return a download link through S3 Presigner
+- CreateDownloadLink: this operation will return a download link
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-      }
-  })
-  .to("google-storage://mycamelbucket?accessKey=xxx&secretKey=yyy&region=region&operation=createDownloadLink")
-  .to("mock:result");
+from("direct:start")
+.process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=createDownloadLink")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will return a download link url for the file camel-key in the bucket mycamelbucket and region region
+This operation will return a download link url for the file OBJECT_NAME in the bucket myCamelBucket. It's possible to specify the expiration time for the created link through the header DOWNLOAD_LINK_EXPIRATION_TIME. If not specified, by default it is 5 minutes.
 
 == Bucket Autocreation
 
-With the option `autoCreateBucket` users are able to avoid the autocreation of an S3 Bucket in case it doesn't exist. The default for this option is `true`.
-If set to false any operation on a not-existent bucket in AWS won't be successful and an error will be returned.
-
-== Moving stuff between a bucket and another bucket
-
-Some users like to consume stuff from a bucket and move the content in a different one without using the copyObject feature of this component.
-If this is case for you, don't forget to remove the bucketName header from the incoming exchange of the consumer, otherwise the file will be always overwritten on the same
-original bucket.
+With the option `autoCreateBucket` users are able to avoid the autocreation of a Bucket in case it doesn't exist. The default for this option is `true`.
+If set to false any operation on a not-existent bucket won't be successful and an error will be returned.
 
 == MoveAfterRead consumer option
 
@@ -420,87 +384,16 @@ This will require specifying the destinationBucket option. As example:
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket")
+  from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json"
+    + "&autoCreateBucket=true"
+    + "&destinationBucket=myCamelProcessedBucket"
+    + "&moveAfterRead=true"
+    + "&deleteAfterRead=true"
+    + "&includeBody=true"
+  )
   .to("mock:result");
 --------------------------------------------------------------------------------
 
-In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
-
-You have also the possibility of using a key prefix/suffix while moving the file to a different bucket. The options are destinationBucketPrefix and destinationBucketSuffix.
-
-Taking the above example, you could do something like:
-
-[source,java]
---------------------------------------------------------------------------------
-  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket&destinationBucketPrefix=RAW(pre-)&destinationBucketSuffix=RAW(-suff)")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
-
-So if the file name is test, in the myothercamelbucket you should see a file called pre-test-suff.
-
-== Using customer key as encryption
-
-We introduced also the customer key support (an alternative of using KMS). The following code shows an example.
-
-[source,java]
---------------------------------------------------------------------------------
-String key = UUID.randomUUID().toString();
-byte[] secretKey = generateSecretKey();
-String b64Key = Base64.getEncoder().encodeToString(secretKey);
-String b64KeyMd5 = Md5Utils.md5AsBase64(secretKey);
-
-String awsEndpoint = "google-storage://mycamel?autoCreateBucket=false&useCustomerKey=true&customerKeyId=RAW(" + b64Key + ")&customerKeyMD5=RAW(" + b64KeyMd5 + ")&customerAlgorithm=" + AES256.name();
-
-from("direct:putObject")
-    .setHeader(AWS2S3Constants.KEY, constant("test.txt"))
-    .setBody(constant("Test"))
-    .to(awsEndpoint);
---------------------------------------------------------------------------------
-
-== Using a POJO as body
-
-Sometimes build an AWS Request can be complex, because of multiple options. We introduce the possibility to use a POJO as body.
-In AWS S3 there are multiple operations you can submit, as an example for List brokers request, you can do something like:
-
-------------------------------------------------------------------------------------------------------
-from("direct:google-storage")
-     .setBody(ListObjectsRequest.builder().bucket(bucketName).build())
-     .to("google-storage://test?amazonS3Client=#amazonS3Client&operation=listObjects&pojoRequest=true")
-------------------------------------------------------------------------------------------------------
-
-In this way you'll pass the request directly without the need of passing headers and options specifically related to this operation.
-
-== Create S3 client and add component to registry
-Sometimes you would want to perform some advanced configuration using AWS2S3Configuration which also allows to set the S3 client.
-You can create and set the S3 client in the component configuration as shown in the following example
-
-[source,java]
---------------------------------------------------------------------------------
-String awsBucketAccessKey = "your_access_key";
-String awsBucketSecretKey = "your_secret_key";
-
-S3Client s3Client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(awsBucketAccessKey, awsBucketSecretKey)))
-                .region(Region.US_EAST_1).build();
-
-AWS2S3Configuration configuration = new AWS2S3Configuration();
-configuration.setAmazonS3Client(s3Client);
-configuration.setAutoDiscoverClient(true);
-configuration.setBucketName("s3bucket2020");
-configuration.setRegion("us-east-1");
---------------------------------------------------------------------------------
-
-Now you can configure the S3 component (using the configuration object created above) and add it to the registry in the
-configure method before initialization of routes.
-
-[source,java]
---------------------------------------------------------------------------------
-AWS2S3Component s3Component = new AWS2S3Component(getContext());
-s3Component.setConfiguration(configuration);
-s3Component.setLazyStartProducer(true);
-camelContext.addComponent("google-storage", s3Component);
---------------------------------------------------------------------------------
+In this case the objects consumed will be moved to myCamelProcessedBucket bucket and deleted from the original one (because of deleteAfterRead).
 
-Now your component will be used for all the operations implemented in camel routes.
 
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index 6ef1b8e..d50dd54 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -314,104 +314,68 @@ This operation will delete the object from the bucket myCamelBucket.
 
 [source,java]
 --------------------------------------------------------------------------------
-from("direct:start").process( exchange -> {
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listBuckets);
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listBuckets")
 .to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will list the buckets for this account
+This operation will list the buckets for this account.
 
 - DeleteBucket: this operation delete the bucket specified as URI parameter or header
 
 [source,java]
 --------------------------------------------------------------------------------
-from("direct:start").process( exchange -> {
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listObjects);
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=deleteBucket")
 .to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will delete the bucket mycamelbucket
+This operation will delete the bucket myCamelBucket.
 
 - ListObjects: this operation list object in a specific bucket
 
 [source,java]
 --------------------------------------------------------------------------------
-from("direct:start").process( exchange -> {
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listObjects);
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listObjects")
 .to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will list the objects in the mycamelbucket bucket
+This operation will list the objects in the myCamelBucket bucket.
 
 - GetObject: this operation get a single object in a specific bucket
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-      }
-  })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket.
-
-- GetObjectRange: this operation get a single object range in a specific bucket
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-          exchange.getIn().setHeader(S3Constants.RANGE_START, "0");
-          exchange.getIn().setHeader(S3Constants.RANGE_END, "9");
-      }
-  })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange")
-  .to("mock:result");
+from("direct:start")
+.process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=getObject")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket, containing a the bytes from 0 to 9.
+This operation will return an Blob objct instance related to the OBJECT_NAME object in myCamelBucket bucket.
 
-- CreateDownloadLink: this operation will return a download link through S3 Presigner
+- CreateDownloadLink: this operation will return a download link
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-      }
-  })
-  .to("google-storage://mycamelbucket?accessKey=xxx&secretKey=yyy&region=region&operation=createDownloadLink")
-  .to("mock:result");
+from("direct:start")
+.process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=createDownloadLink")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will return a download link url for the file camel-key in the bucket mycamelbucket and region region
+This operation will return a download link url for the file OBJECT_NAME in the bucket myCamelBucket. It's possible to specify the expiration time for the created link through the header DOWNLOAD_LINK_EXPIRATION_TIME. If not specified, by default it is 5 minutes.
 
 == Bucket Autocreation
 
-With the option `autoCreateBucket` users are able to avoid the autocreation of an S3 Bucket in case it doesn't exist. The default for this option is `true`.
-If set to false any operation on a not-existent bucket in AWS won't be successful and an error will be returned.
-
-== Moving stuff between a bucket and another bucket
-
-Some users like to consume stuff from a bucket and move the content in a different one without using the copyObject feature of this component.
-If this is case for you, don't forget to remove the bucketName header from the incoming exchange of the consumer, otherwise the file will be always overwritten on the same
-original bucket.
+With the option `autoCreateBucket` users are able to avoid the autocreation of a Bucket in case it doesn't exist. The default for this option is `true`.
+If set to false any operation on a not-existent bucket won't be successful and an error will be returned.
 
 == MoveAfterRead consumer option
 
@@ -420,87 +384,16 @@ This will require specifying the destinationBucket option. As example:
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket")
+  from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json"
+    + "&autoCreateBucket=true"
+    + "&destinationBucket=myCamelProcessedBucket"
+    + "&moveAfterRead=true"
+    + "&deleteAfterRead=true"
+    + "&includeBody=true"
+  )
   .to("mock:result");
 --------------------------------------------------------------------------------
 
-In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
-
-You have also the possibility of using a key prefix/suffix while moving the file to a different bucket. The options are destinationBucketPrefix and destinationBucketSuffix.
-
-Taking the above example, you could do something like:
-
-[source,java]
---------------------------------------------------------------------------------
-  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket&destinationBucketPrefix=RAW(pre-)&destinationBucketSuffix=RAW(-suff)")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
-
-So if the file name is test, in the myothercamelbucket you should see a file called pre-test-suff.
-
-== Using customer key as encryption
-
-We introduced also the customer key support (an alternative of using KMS). The following code shows an example.
-
-[source,java]
---------------------------------------------------------------------------------
-String key = UUID.randomUUID().toString();
-byte[] secretKey = generateSecretKey();
-String b64Key = Base64.getEncoder().encodeToString(secretKey);
-String b64KeyMd5 = Md5Utils.md5AsBase64(secretKey);
-
-String awsEndpoint = "google-storage://mycamel?autoCreateBucket=false&useCustomerKey=true&customerKeyId=RAW(" + b64Key + ")&customerKeyMD5=RAW(" + b64KeyMd5 + ")&customerAlgorithm=" + AES256.name();
-
-from("direct:putObject")
-    .setHeader(AWS2S3Constants.KEY, constant("test.txt"))
-    .setBody(constant("Test"))
-    .to(awsEndpoint);
---------------------------------------------------------------------------------
-
-== Using a POJO as body
-
-Sometimes build an AWS Request can be complex, because of multiple options. We introduce the possibility to use a POJO as body.
-In AWS S3 there are multiple operations you can submit, as an example for List brokers request, you can do something like:
-
-------------------------------------------------------------------------------------------------------
-from("direct:google-storage")
-     .setBody(ListObjectsRequest.builder().bucket(bucketName).build())
-     .to("google-storage://test?amazonS3Client=#amazonS3Client&operation=listObjects&pojoRequest=true")
-------------------------------------------------------------------------------------------------------
-
-In this way you'll pass the request directly without the need of passing headers and options specifically related to this operation.
-
-== Create S3 client and add component to registry
-Sometimes you would want to perform some advanced configuration using AWS2S3Configuration which also allows to set the S3 client.
-You can create and set the S3 client in the component configuration as shown in the following example
-
-[source,java]
---------------------------------------------------------------------------------
-String awsBucketAccessKey = "your_access_key";
-String awsBucketSecretKey = "your_secret_key";
-
-S3Client s3Client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(awsBucketAccessKey, awsBucketSecretKey)))
-                .region(Region.US_EAST_1).build();
-
-AWS2S3Configuration configuration = new AWS2S3Configuration();
-configuration.setAmazonS3Client(s3Client);
-configuration.setAutoDiscoverClient(true);
-configuration.setBucketName("s3bucket2020");
-configuration.setRegion("us-east-1");
---------------------------------------------------------------------------------
-
-Now you can configure the S3 component (using the configuration object created above) and add it to the registry in the
-configure method before initialization of routes.
-
-[source,java]
---------------------------------------------------------------------------------
-AWS2S3Component s3Component = new AWS2S3Component(getContext());
-s3Component.setConfiguration(configuration);
-s3Component.setLazyStartProducer(true);
-camelContext.addComponent("google-storage", s3Component);
---------------------------------------------------------------------------------
+In this case the objects consumed will be moved to myCamelProcessedBucket bucket and deleted from the original one (because of deleteAfterRead).
 
-Now your component will be used for all the operations implemented in camel routes.
 
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 043b414..e4000d6 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -86,7 +86,7 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
         }
 
         if (configuration.isAutoCreateBucket()) {
-            LOG.info("getting the bucket {}", configuration.getBucketName());
+
             try {
 
                 Bucket bucket = this.storageClient.get(configuration.getBucketName());
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
index b4a3a51..b835aea 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
@@ -208,8 +208,8 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
     private void createDownloadLink(Storage storage, Exchange exchange) {
         final String bucketName = determineBucketName(exchange);
         final String objectName = determineObjectName(exchange);
-        Long expirationMillis = exchange.getIn().getHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME,
-                Long.class);
+        Long expirationMillis
+                = exchange.getIn().getHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 300000L, Long.class);
         long milliSeconds = 0;
         if (expirationMillis != null) {
             milliSeconds += expirationMillis;
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index c078d71..0a9aefa 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -286,134 +286,98 @@ This operation will upload the file camel.txt with the content "Camel rocks!" in
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.BUCKET_DESTINATION_NAME, "camelDestinationBucket");
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-          exchange.getIn().setHeader(S3Constants.DESTINATION_KEY, "camelDestinationKey");
-      }
+  from("direct:start").process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.copyObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, "myCamelBucket_dest");
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, "camel_copy.txt");
   })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=copyObject")
+  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
   .to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will copy the object with the name expressed in the header camelDestinationKey to the camelDestinationBucket bucket, from the bucket mycamelbucket.
+This operation will copy the object with the name expressed in the header DESTINATION_OBJECT_NAME to the DESTINATION_BUCKET_NAME bucket, from the bucket myCamelBucket.
 
 - DeleteObject: this operation deletes an object from a bucket
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-      }
+  from("direct:start").process( exchange -> {
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.deleteObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
   })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteObject")
+  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
   .to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will delete the object camelKey from the bucket mycamelbucket.
+This operation will delete the object from the bucket myCamelBucket.
 
 - ListBuckets: this operation list the buckets for this account in this region
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start")
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listBuckets")
-  .to("mock:result");
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listBuckets")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will list the buckets for this account
+This operation will list the buckets for this account.
 
 - DeleteBucket: this operation delete the bucket specified as URI parameter or header
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start")
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
-  .to("mock:result");
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=deleteBucket")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will delete the bucket mycamelbucket
+This operation will delete the bucket myCamelBucket.
 
 - ListObjects: this operation list object in a specific bucket
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start")
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listObjects")
-  .to("mock:result");
+from("direct:start")
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listObjects")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will list the objects in the mycamelbucket bucket
+This operation will list the objects in the myCamelBucket bucket.
 
 - GetObject: this operation get a single object in a specific bucket
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-      }
-  })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket.
-
-- GetObjectRange: this operation get a single object range in a specific bucket
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-          exchange.getIn().setHeader(S3Constants.RANGE_START, "0");
-          exchange.getIn().setHeader(S3Constants.RANGE_END, "9");
-      }
-  })
-  .to("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange")
-  .to("mock:result");
+from("direct:start")
+.process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=getObject")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will return an S3Object instance related to the camelKey object in mycamelbucket bucket, containing a the bytes from 0 to 9.
+This operation will return an Blob objct instance related to the OBJECT_NAME object in myCamelBucket bucket.
 
-- CreateDownloadLink: this operation will return a download link through S3 Presigner
+- CreateDownloadLink: this operation will return a download link
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
-      }
-  })
-  .to("google-storage://mycamelbucket?accessKey=xxx&secretKey=yyy&region=region&operation=createDownloadLink")
-  .to("mock:result");
+from("direct:start")
+.process( exchange -> {
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
+  exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
+})
+.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=createDownloadLink")
+.to("mock:result");
 --------------------------------------------------------------------------------
 
-This operation will return a download link url for the file camel-key in the bucket mycamelbucket and region region
+This operation will return a download link url for the file OBJECT_NAME in the bucket myCamelBucket. It's possible to specify the expiration time for the created link through the header DOWNLOAD_LINK_EXPIRATION_TIME. If not specified, by default it is 5 minutes.
 
 == Bucket Autocreation
 
-With the option `autoCreateBucket` users are able to avoid the autocreation of an S3 Bucket in case it doesn't exist. The default for this option is `true`.
-If set to false any operation on a not-existent bucket in AWS won't be successful and an error will be returned.
-
-== Moving stuff between a bucket and another bucket
-
-Some users like to consume stuff from a bucket and move the content in a different one without using the copyObject feature of this component.
-If this is case for you, don't forget to remove the bucketName header from the incoming exchange of the consumer, otherwise the file will be always overwritten on the same
-original bucket.
+With the option `autoCreateBucket` users are able to avoid the autocreation of a Bucket in case it doesn't exist. The default for this option is `true`.
+If set to false any operation on a not-existent bucket won't be successful and an error will be returned.
 
 == MoveAfterRead consumer option
 
@@ -422,87 +386,16 @@ This will require specifying the destinationBucket option. As example:
 
 [source,java]
 --------------------------------------------------------------------------------
-  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket")
+  from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json"
+    + "&autoCreateBucket=true"
+    + "&destinationBucket=myCamelProcessedBucket"
+    + "&moveAfterRead=true"
+    + "&deleteAfterRead=true"
+    + "&includeBody=true"
+  )
   .to("mock:result");
 --------------------------------------------------------------------------------
 
-In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
-
-You have also the possibility of using a key prefix/suffix while moving the file to a different bucket. The options are destinationBucketPrefix and destinationBucketSuffix.
-
-Taking the above example, you could do something like:
-
-[source,java]
---------------------------------------------------------------------------------
-  from("google-storage://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket&destinationBucketPrefix=RAW(pre-)&destinationBucketSuffix=RAW(-suff)")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-In this case the objects consumed will be moved to myothercamelbucket bucket and deleted from the original one (because of deleteAfterRead set to true as default).
-
-So if the file name is test, in the myothercamelbucket you should see a file called pre-test-suff.
-
-== Using customer key as encryption
-
-We introduced also the customer key support (an alternative of using KMS). The following code shows an example.
-
-[source,java]
---------------------------------------------------------------------------------
-String key = UUID.randomUUID().toString();
-byte[] secretKey = generateSecretKey();
-String b64Key = Base64.getEncoder().encodeToString(secretKey);
-String b64KeyMd5 = Md5Utils.md5AsBase64(secretKey);
-
-String awsEndpoint = "google-storage://mycamel?autoCreateBucket=false&useCustomerKey=true&customerKeyId=RAW(" + b64Key + ")&customerKeyMD5=RAW(" + b64KeyMd5 + ")&customerAlgorithm=" + AES256.name();
-
-from("direct:putObject")
-    .setHeader(AWS2S3Constants.KEY, constant("test.txt"))
-    .setBody(constant("Test"))
-    .to(awsEndpoint);
---------------------------------------------------------------------------------
-
-== Using a POJO as body
-
-Sometimes build an AWS Request can be complex, because of multiple options. We introduce the possibility to use a POJO as body.
-In AWS S3 there are multiple operations you can submit, as an example for List brokers request, you can do something like:
-
-------------------------------------------------------------------------------------------------------
-from("direct:google-storage")
-     .setBody(ListObjectsRequest.builder().bucket(bucketName).build())
-     .to("google-storage://test?amazonS3Client=#amazonS3Client&operation=listObjects&pojoRequest=true")
-------------------------------------------------------------------------------------------------------
-
-In this way you'll pass the request directly without the need of passing headers and options specifically related to this operation.
-
-== Create S3 client and add component to registry
-Sometimes you would want to perform some advanced configuration using AWS2S3Configuration which also allows to set the S3 client.
-You can create and set the S3 client in the component configuration as shown in the following example
-
-[source,java]
---------------------------------------------------------------------------------
-String awsBucketAccessKey = "your_access_key";
-String awsBucketSecretKey = "your_secret_key";
-
-S3Client s3Client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(awsBucketAccessKey, awsBucketSecretKey)))
-                .region(Region.US_EAST_1).build();
-
-AWS2S3Configuration configuration = new AWS2S3Configuration();
-configuration.setAmazonS3Client(s3Client);
-configuration.setAutoDiscoverClient(true);
-configuration.setBucketName("s3bucket2020");
-configuration.setRegion("us-east-1");
---------------------------------------------------------------------------------
-
-Now you can configure the S3 component (using the configuration object created above) and add it to the registry in the
-configure method before initialization of routes.
-
-[source,java]
---------------------------------------------------------------------------------
-AWS2S3Component s3Component = new AWS2S3Component(getContext());
-s3Component.setConfiguration(configuration);
-s3Component.setLazyStartProducer(true);
-camelContext.addComponent("google-storage", s3Component);
---------------------------------------------------------------------------------
+In this case the objects consumed will be moved to myCamelProcessedBucket bucket and deleted from the original one (because of deleteAfterRead).
 
-Now your component will be used for all the operations implemented in camel routes.
 


[camel] 23/31: CAMEL-15964 camel-google-storage component - improvements

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 06238c7bd14f7f90a36a07b97ff8a1328f4b48ef
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Mon Feb 15 22:12:50 2021 +0100

    CAMEL-15964 camel-google-storage component - improvements
---
 .../camel/component/google/storage/GoogleCloudStorageConstants.java      | 1 -
 1 file changed, 1 deletion(-)

diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
index 1a9b316..5967ecb 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
@@ -30,7 +30,6 @@ public final class GoogleCloudStorageConstants {
     public static final String CONTENT_DISPOSITION = "CamelGoogleCloudStorageContentDisposition";
     public static final String CONTENT_ENCODING = "CamelGoogleCloudStorageContentEncoding";
     public static final String CONTENT_MD5 = "CamelGoogleCloudStorageContentMd5";
-
     public static final String METADATA_COMPONENT_COUNT = "CamelGoogleCloudStorageComponentCount";
     public static final String METADATA_CONTENT_LANGUAGE = "CamelGoogleCloudStorageContentLanguage";
     public static final String METADATA_CUSTOM_TIME = "CamelGoogleCloudStorageCustomTime";


[camel] 26/31: CAMEL-15964 - Added component to kit

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b7b84a003620f16dfc5130632f61617240e9df33
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 17 06:54:04 2021 +0100

    CAMEL-15964 - Added component to kit
---
 bom/camel-bom/pom.xml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 5a84654..1c42379 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -859,6 +859,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-google-storage</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-gora</artifactId>
         <version>${project.version}</version>
       </dependency>


[camel] 01/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d0f7bf939994f762bffa939b83866d3a79b2fe64
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Thu Feb 11 00:02:29 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/camel-google-storage/ReadMe.txt         |   13 +
 components/camel-google-storage/pom.xml            |  127 ++
 .../GoogleCloudStorageComponentConfigurer.java     |  140 ++
 .../GoogleCloudStorageEndpointConfigurer.java      |  232 ++++
 .../GoogleCloudStorageEndpointUriFactory.java      |   93 ++
 .../camel/configurer/google-storage-component      |    2 +
 .../camel/configurer/google-storage-endpoint       |    2 +
 .../services/org/apache/camel/other.properties     |    7 +
 .../camel/urifactory/google-storage-endpoint       |    2 +
 .../src/generated/resources/google-storage.json    |   14 +
 .../component/google/storage/google-storage.json   |   77 ++
 .../storage/GoogleCloudStorageComponent.java       |   60 +
 .../GoogleCloudStorageComponentConfiguration.java  |  222 +++
 .../GoogleCloudStorageComponentOperations.java     |   11 +
 ...ogleCloudStorageComponentVerifierExtension.java |   82 ++
 .../storage/GoogleCloudStorageConstants.java       |   45 +
 .../google/storage/GoogleCloudStorageConsumer.java |  329 +++++
 .../google/storage/GoogleCloudStorageEndpoint.java |  183 +++
 .../google/storage/GoogleCloudStorageProducer.java |  347 +++++
 .../storage/client/StorageInternalClient.java      |    7 +
 .../client/StorageInternalClientFactory.java       |   11 +
 .../storage/client/StorageInternalClientImpl.java  |   44 +
 .../org/apache/camel/component/google-storage      |    1 +
 .../google/storage/ConsumerLocalTest.java          |   90 ++
 .../google/storage/GoogleCloudStorageBaseTest.java |   28 +
 ...ogleCloudStorageComponentConfigurationTest.java |   19 +
 .../google/storage/ProducerLocalTest.java          |  132 ++
 .../storage/localstorage/FakeStorageRpc.java       |  566 ++++++++
 .../storage/localstorage/LocalStorageHelper.java   |   84 ++
 .../src/test/resources/log4j2.properties           |    7 +
 core/camel-allcomponents/pom.xml                   |    4 +
 .../component/ComponentsBuilderFactory.java        |   13 +
 .../dsl/GoogleStorageComponentBuilderFactory.java  |  391 ++++++
 .../src/generated/resources/metadata.json          |   22 +
 .../builder/endpoint/EndpointBuilderFactory.java   |   63 +-
 .../camel/builder/endpoint/EndpointBuilders.java   |   63 +-
 .../builder/endpoint/StaticEndpointBuilders.java   |   43 +
 .../GoogleCloudStorageEndpointBuilderFactory.java  | 1439 ++++++++++++++++++++
 parent/pom.xml                                     |    5 +
 39 files changed, 4958 insertions(+), 62 deletions(-)

diff --git a/components/camel-google-storage/ReadMe.txt b/components/camel-google-storage/ReadMe.txt
new file mode 100644
index 0000000..f327e1e
--- /dev/null
+++ b/components/camel-google-storage/ReadMe.txt
@@ -0,0 +1,13 @@
+Camel Component Project
+=======================
+
+This project is a template of a Camel component.
+
+To build this project use
+
+    mvn install
+
+For more help see the Apache Camel documentation:
+
+    http://camel.apache.org/writing-components.html
+    
diff --git a/components/camel-google-storage/pom.xml b/components/camel-google-storage/pom.xml
new file mode 100644
index 0000000..26d3519
--- /dev/null
+++ b/components/camel-google-storage/pom.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components</artifactId>
+    <version>3.8.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>camel-google-storage</artifactId>
+  <packaging>jar</packaging>
+  <name>Camel :: Google Storage</name>
+  <description>Camel Component for Google Cloud Platform Storage</description>
+
+  <properties>
+    <firstVersion>3.7.0</firstVersion>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <!-- Google cloud libraries -->
+      <dependency>
+        <groupId>com.google.cloud</groupId>
+        <artifactId>libraries-bom</artifactId>
+        <version>${google-cloud-bom-version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+
+    <!-- more info at https://github.com/googleapis/google-cloud-java -->
+    <!-- google-cloud-storage libraries -->
+    <dependency>
+      <groupId>com.google.cloud</groupId>
+      <artifactId>google-cloud-storage</artifactId>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-support</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-test-junit5</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-junit-jupiter</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+              <childDelegation>false</childDelegation>
+              <useFile>true</useFile>
+              <forkCount>1</forkCount>
+              <reuseForks>true</reuseForks>
+              <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
+              <!--<includes>
+                     
+                  <include>**/unit/**/*.java</include>
+              </includes>-->
+          </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+        <id>google-storage-test</id>
+        <build>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <configuration>
+                        <childDelegation>false</childDelegation>
+                        <useFile>true</useFile>
+                        <forkCount>1</forkCount>
+                        <reuseForks>true</reuseForks>
+                        <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
+                        <includes>
+                            <include>**/*Test.java</include>
+                        </includes>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </build>
+    </profile>
+</profiles>
+
+</project>
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
new file mode 100644
index 0000000..79a1fad
--- /dev/null
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
@@ -0,0 +1,140 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.google.storage;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    private org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration getOrCreateConfiguration(GoogleCloudStorageComponent target) {
+        if (target.getConfiguration() == null) {
+            target.setConfiguration(new org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration());
+        }
+        return target.getConfiguration();
+    }
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        GoogleCloudStorageComponent target = (GoogleCloudStorageComponent) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autocreatebucket":
+        case "autoCreateBucket": getOrCreateConfiguration(target).setAutoCreateBucket(property(camelContext, boolean.class, value)); return true;
+        case "autowiredenabled":
+        case "autowiredEnabled": target.setAutowiredEnabled(property(camelContext, boolean.class, value)); return true;
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
+        case "configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration.class, value)); return true;
+        case "deleteafterread":
+        case "deleteAfterRead": getOrCreateConfiguration(target).setDeleteAfterRead(property(camelContext, boolean.class, value)); return true;
+        case "destinationbucket":
+        case "destinationBucket": getOrCreateConfiguration(target).setDestinationBucket(property(camelContext, java.lang.String.class, value)); return true;
+        case "destinationbucketprefix":
+        case "destinationBucketPrefix": getOrCreateConfiguration(target).setDestinationBucketPrefix(property(camelContext, java.lang.String.class, value)); return true;
+        case "destinationbucketsuffix":
+        case "destinationBucketSuffix": getOrCreateConfiguration(target).setDestinationBucketSuffix(property(camelContext, java.lang.String.class, value)); return true;
+        case "includebody":
+        case "includeBody": getOrCreateConfiguration(target).setIncludeBody(property(camelContext, boolean.class, value)); return true;
+        case "includefolders":
+        case "includeFolders": getOrCreateConfiguration(target).setIncludeFolders(property(camelContext, boolean.class, value)); return true;
+        case "lazystartproducer":
+        case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
+        case "moveafterread":
+        case "moveAfterRead": getOrCreateConfiguration(target).setMoveAfterRead(property(camelContext, boolean.class, value)); return true;
+        case "objectname":
+        case "objectName": getOrCreateConfiguration(target).setObjectName(property(camelContext, java.lang.String.class, value)); return true;
+        case "operation": getOrCreateConfiguration(target).setOperation(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class, value)); return true;
+        case "serviceaccountcredentials":
+        case "serviceAccountCredentials": getOrCreateConfiguration(target).setServiceAccountCredentials(property(camelContext, java.lang.String.class, value)); return true;
+        case "storageclient":
+        case "storageClient": getOrCreateConfiguration(target).setStorageClient(property(camelContext, com.google.cloud.storage.Storage.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autocreatebucket":
+        case "autoCreateBucket": return boolean.class;
+        case "autowiredenabled":
+        case "autowiredEnabled": return boolean.class;
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": return boolean.class;
+        case "configuration": return org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration.class;
+        case "deleteafterread":
+        case "deleteAfterRead": return boolean.class;
+        case "destinationbucket":
+        case "destinationBucket": return java.lang.String.class;
+        case "destinationbucketprefix":
+        case "destinationBucketPrefix": return java.lang.String.class;
+        case "destinationbucketsuffix":
+        case "destinationBucketSuffix": return java.lang.String.class;
+        case "includebody":
+        case "includeBody": return boolean.class;
+        case "includefolders":
+        case "includeFolders": return boolean.class;
+        case "lazystartproducer":
+        case "lazyStartProducer": return boolean.class;
+        case "moveafterread":
+        case "moveAfterRead": return boolean.class;
+        case "objectname":
+        case "objectName": return java.lang.String.class;
+        case "operation": return org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class;
+        case "serviceaccountcredentials":
+        case "serviceAccountCredentials": return java.lang.String.class;
+        case "storageclient":
+        case "storageClient": return com.google.cloud.storage.Storage.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        GoogleCloudStorageComponent target = (GoogleCloudStorageComponent) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autocreatebucket":
+        case "autoCreateBucket": return getOrCreateConfiguration(target).isAutoCreateBucket();
+        case "autowiredenabled":
+        case "autowiredEnabled": return target.isAutowiredEnabled();
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+        case "configuration": return target.getConfiguration();
+        case "deleteafterread":
+        case "deleteAfterRead": return getOrCreateConfiguration(target).isDeleteAfterRead();
+        case "destinationbucket":
+        case "destinationBucket": return getOrCreateConfiguration(target).getDestinationBucket();
+        case "destinationbucketprefix":
+        case "destinationBucketPrefix": return getOrCreateConfiguration(target).getDestinationBucketPrefix();
+        case "destinationbucketsuffix":
+        case "destinationBucketSuffix": return getOrCreateConfiguration(target).getDestinationBucketSuffix();
+        case "includebody":
+        case "includeBody": return getOrCreateConfiguration(target).isIncludeBody();
+        case "includefolders":
+        case "includeFolders": return getOrCreateConfiguration(target).isIncludeFolders();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "moveafterread":
+        case "moveAfterRead": return getOrCreateConfiguration(target).isMoveAfterRead();
+        case "objectname":
+        case "objectName": return getOrCreateConfiguration(target).getObjectName();
+        case "operation": return getOrCreateConfiguration(target).getOperation();
+        case "serviceaccountcredentials":
+        case "serviceAccountCredentials": return getOrCreateConfiguration(target).getServiceAccountCredentials();
+        case "storageclient":
+        case "storageClient": return getOrCreateConfiguration(target).getStorageClient();
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
new file mode 100644
index 0000000..3fe8f99
--- /dev/null
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
@@ -0,0 +1,232 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.google.storage;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        GoogleCloudStorageEndpoint target = (GoogleCloudStorageEndpoint) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autocreatebucket":
+        case "autoCreateBucket": target.getConfiguration().setAutoCreateBucket(property(camelContext, boolean.class, value)); return true;
+        case "backofferrorthreshold":
+        case "backoffErrorThreshold": target.setBackoffErrorThreshold(property(camelContext, int.class, value)); return true;
+        case "backoffidlethreshold":
+        case "backoffIdleThreshold": target.setBackoffIdleThreshold(property(camelContext, int.class, value)); return true;
+        case "backoffmultiplier":
+        case "backoffMultiplier": target.setBackoffMultiplier(property(camelContext, int.class, value)); return true;
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
+        case "delay": target.setDelay(property(camelContext, long.class, value)); return true;
+        case "deleteafterread":
+        case "deleteAfterRead": target.getConfiguration().setDeleteAfterRead(property(camelContext, boolean.class, value)); return true;
+        case "destinationbucket":
+        case "destinationBucket": target.getConfiguration().setDestinationBucket(property(camelContext, java.lang.String.class, value)); return true;
+        case "destinationbucketprefix":
+        case "destinationBucketPrefix": target.getConfiguration().setDestinationBucketPrefix(property(camelContext, java.lang.String.class, value)); return true;
+        case "destinationbucketsuffix":
+        case "destinationBucketSuffix": target.getConfiguration().setDestinationBucketSuffix(property(camelContext, java.lang.String.class, value)); return true;
+        case "exceptionhandler":
+        case "exceptionHandler": target.setExceptionHandler(property(camelContext, org.apache.camel.spi.ExceptionHandler.class, value)); return true;
+        case "exchangepattern":
+        case "exchangePattern": target.setExchangePattern(property(camelContext, org.apache.camel.ExchangePattern.class, value)); return true;
+        case "greedy": target.setGreedy(property(camelContext, boolean.class, value)); return true;
+        case "includebody":
+        case "includeBody": target.getConfiguration().setIncludeBody(property(camelContext, boolean.class, value)); return true;
+        case "includefolders":
+        case "includeFolders": target.getConfiguration().setIncludeFolders(property(camelContext, boolean.class, value)); return true;
+        case "initialdelay":
+        case "initialDelay": target.setInitialDelay(property(camelContext, long.class, value)); return true;
+        case "lazystartproducer":
+        case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
+        case "moveafterread":
+        case "moveAfterRead": target.getConfiguration().setMoveAfterRead(property(camelContext, boolean.class, value)); return true;
+        case "objectname":
+        case "objectName": target.getConfiguration().setObjectName(property(camelContext, java.lang.String.class, value)); return true;
+        case "operation": target.getConfiguration().setOperation(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class, value)); return true;
+        case "pollstrategy":
+        case "pollStrategy": target.setPollStrategy(property(camelContext, org.apache.camel.spi.PollingConsumerPollStrategy.class, value)); return true;
+        case "repeatcount":
+        case "repeatCount": target.setRepeatCount(property(camelContext, long.class, value)); return true;
+        case "runlogginglevel":
+        case "runLoggingLevel": target.setRunLoggingLevel(property(camelContext, org.apache.camel.LoggingLevel.class, value)); return true;
+        case "scheduledexecutorservice":
+        case "scheduledExecutorService": target.setScheduledExecutorService(property(camelContext, java.util.concurrent.ScheduledExecutorService.class, value)); return true;
+        case "scheduler": target.setScheduler(property(camelContext, java.lang.Object.class, value)); return true;
+        case "schedulerproperties":
+        case "schedulerProperties": target.setSchedulerProperties(property(camelContext, java.util.Map.class, value)); return true;
+        case "sendemptymessagewhenidle":
+        case "sendEmptyMessageWhenIdle": target.setSendEmptyMessageWhenIdle(property(camelContext, boolean.class, value)); return true;
+        case "serviceaccountcredentials":
+        case "serviceAccountCredentials": target.getConfiguration().setServiceAccountCredentials(property(camelContext, java.lang.String.class, value)); return true;
+        case "startscheduler":
+        case "startScheduler": target.setStartScheduler(property(camelContext, boolean.class, value)); return true;
+        case "storageclient":
+        case "storageClient": target.getConfiguration().setStorageClient(property(camelContext, com.google.cloud.storage.Storage.class, value)); return true;
+        case "timeunit":
+        case "timeUnit": target.setTimeUnit(property(camelContext, java.util.concurrent.TimeUnit.class, value)); return true;
+        case "usefixeddelay":
+        case "useFixedDelay": target.setUseFixedDelay(property(camelContext, boolean.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autocreatebucket":
+        case "autoCreateBucket": return boolean.class;
+        case "backofferrorthreshold":
+        case "backoffErrorThreshold": return int.class;
+        case "backoffidlethreshold":
+        case "backoffIdleThreshold": return int.class;
+        case "backoffmultiplier":
+        case "backoffMultiplier": return int.class;
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": return boolean.class;
+        case "delay": return long.class;
+        case "deleteafterread":
+        case "deleteAfterRead": return boolean.class;
+        case "destinationbucket":
+        case "destinationBucket": return java.lang.String.class;
+        case "destinationbucketprefix":
+        case "destinationBucketPrefix": return java.lang.String.class;
+        case "destinationbucketsuffix":
+        case "destinationBucketSuffix": return java.lang.String.class;
+        case "exceptionhandler":
+        case "exceptionHandler": return org.apache.camel.spi.ExceptionHandler.class;
+        case "exchangepattern":
+        case "exchangePattern": return org.apache.camel.ExchangePattern.class;
+        case "greedy": return boolean.class;
+        case "includebody":
+        case "includeBody": return boolean.class;
+        case "includefolders":
+        case "includeFolders": return boolean.class;
+        case "initialdelay":
+        case "initialDelay": return long.class;
+        case "lazystartproducer":
+        case "lazyStartProducer": return boolean.class;
+        case "moveafterread":
+        case "moveAfterRead": return boolean.class;
+        case "objectname":
+        case "objectName": return java.lang.String.class;
+        case "operation": return org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class;
+        case "pollstrategy":
+        case "pollStrategy": return org.apache.camel.spi.PollingConsumerPollStrategy.class;
+        case "repeatcount":
+        case "repeatCount": return long.class;
+        case "runlogginglevel":
+        case "runLoggingLevel": return org.apache.camel.LoggingLevel.class;
+        case "scheduledexecutorservice":
+        case "scheduledExecutorService": return java.util.concurrent.ScheduledExecutorService.class;
+        case "scheduler": return java.lang.Object.class;
+        case "schedulerproperties":
+        case "schedulerProperties": return java.util.Map.class;
+        case "sendemptymessagewhenidle":
+        case "sendEmptyMessageWhenIdle": return boolean.class;
+        case "serviceaccountcredentials":
+        case "serviceAccountCredentials": return java.lang.String.class;
+        case "startscheduler":
+        case "startScheduler": return boolean.class;
+        case "storageclient":
+        case "storageClient": return com.google.cloud.storage.Storage.class;
+        case "timeunit":
+        case "timeUnit": return java.util.concurrent.TimeUnit.class;
+        case "usefixeddelay":
+        case "useFixedDelay": return boolean.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        GoogleCloudStorageEndpoint target = (GoogleCloudStorageEndpoint) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autocreatebucket":
+        case "autoCreateBucket": return target.getConfiguration().isAutoCreateBucket();
+        case "backofferrorthreshold":
+        case "backoffErrorThreshold": return target.getBackoffErrorThreshold();
+        case "backoffidlethreshold":
+        case "backoffIdleThreshold": return target.getBackoffIdleThreshold();
+        case "backoffmultiplier":
+        case "backoffMultiplier": return target.getBackoffMultiplier();
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+        case "delay": return target.getDelay();
+        case "deleteafterread":
+        case "deleteAfterRead": return target.getConfiguration().isDeleteAfterRead();
+        case "destinationbucket":
+        case "destinationBucket": return target.getConfiguration().getDestinationBucket();
+        case "destinationbucketprefix":
+        case "destinationBucketPrefix": return target.getConfiguration().getDestinationBucketPrefix();
+        case "destinationbucketsuffix":
+        case "destinationBucketSuffix": return target.getConfiguration().getDestinationBucketSuffix();
+        case "exceptionhandler":
+        case "exceptionHandler": return target.getExceptionHandler();
+        case "exchangepattern":
+        case "exchangePattern": return target.getExchangePattern();
+        case "greedy": return target.isGreedy();
+        case "includebody":
+        case "includeBody": return target.getConfiguration().isIncludeBody();
+        case "includefolders":
+        case "includeFolders": return target.getConfiguration().isIncludeFolders();
+        case "initialdelay":
+        case "initialDelay": return target.getInitialDelay();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "moveafterread":
+        case "moveAfterRead": return target.getConfiguration().isMoveAfterRead();
+        case "objectname":
+        case "objectName": return target.getConfiguration().getObjectName();
+        case "operation": return target.getConfiguration().getOperation();
+        case "pollstrategy":
+        case "pollStrategy": return target.getPollStrategy();
+        case "repeatcount":
+        case "repeatCount": return target.getRepeatCount();
+        case "runlogginglevel":
+        case "runLoggingLevel": return target.getRunLoggingLevel();
+        case "scheduledexecutorservice":
+        case "scheduledExecutorService": return target.getScheduledExecutorService();
+        case "scheduler": return target.getScheduler();
+        case "schedulerproperties":
+        case "schedulerProperties": return target.getSchedulerProperties();
+        case "sendemptymessagewhenidle":
+        case "sendEmptyMessageWhenIdle": return target.isSendEmptyMessageWhenIdle();
+        case "serviceaccountcredentials":
+        case "serviceAccountCredentials": return target.getConfiguration().getServiceAccountCredentials();
+        case "startscheduler":
+        case "startScheduler": return target.isStartScheduler();
+        case "storageclient":
+        case "storageClient": return target.getConfiguration().getStorageClient();
+        case "timeunit":
+        case "timeUnit": return target.getTimeUnit();
+        case "usefixeddelay":
+        case "useFixedDelay": return target.isUseFixedDelay();
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getCollectionValueType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "schedulerproperties":
+        case "schedulerProperties": return java.lang.Object.class;
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
new file mode 100644
index 0000000..35339d8
--- /dev/null
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
@@ -0,0 +1,93 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.google.storage;
+
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.camel.spi.EndpointUriFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.support.component.EndpointUriFactorySupport implements EndpointUriFactory {
+
+    private static final String BASE = ":bucketName";
+
+    private static final Set<String> PROPERTY_NAMES;
+    private static final Set<String> SECRET_PROPERTY_NAMES;
+    static {
+        Set<String> props = new HashSet<>(33);
+        props.add("backoffMultiplier");
+        props.add("bucketName");
+        props.add("destinationBucket");
+        props.add("initialDelay");
+        props.add("serviceAccountCredentials");
+        props.add("scheduler");
+        props.add("bridgeErrorHandler");
+        props.add("useFixedDelay");
+        props.add("runLoggingLevel");
+        props.add("backoffErrorThreshold");
+        props.add("greedy");
+        props.add("scheduledExecutorService");
+        props.add("repeatCount");
+        props.add("timeUnit");
+        props.add("autoCreateBucket");
+        props.add("destinationBucketSuffix");
+        props.add("moveAfterRead");
+        props.add("sendEmptyMessageWhenIdle");
+        props.add("schedulerProperties");
+        props.add("exchangePattern");
+        props.add("includeFolders");
+        props.add("storageClient");
+        props.add("destinationBucketPrefix");
+        props.add("backoffIdleThreshold");
+        props.add("lazyStartProducer");
+        props.add("delay");
+        props.add("includeBody");
+        props.add("pollStrategy");
+        props.add("startScheduler");
+        props.add("deleteAfterRead");
+        props.add("objectName");
+        props.add("exceptionHandler");
+        props.add("operation");
+        PROPERTY_NAMES = Collections.unmodifiableSet(props);
+        SECRET_PROPERTY_NAMES = Collections.emptySet();
+    }
+
+    @Override
+    public boolean isEnabled(String scheme) {
+        return "google-storage".equals(scheme);
+    }
+
+    @Override
+    public String buildUri(String scheme, Map<String, Object> properties, boolean encode) throws URISyntaxException {
+        String syntax = scheme + BASE;
+        String uri = syntax;
+
+        Map<String, Object> copy = new HashMap<>(properties);
+
+        uri = buildPathParameter(syntax, uri, "bucketName", null, true, copy);
+        uri = buildQueryParameters(uri, copy, encode);
+        return uri;
+    }
+
+    @Override
+    public Set<String> propertyNames() {
+        return PROPERTY_NAMES;
+    }
+
+    @Override
+    public Set<String> secretPropertyNames() {
+        return SECRET_PROPERTY_NAMES;
+    }
+
+    @Override
+    public boolean isLenientProperties() {
+        return false;
+    }
+}
+
diff --git a/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/configurer/google-storage-component b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/configurer/google-storage-component
new file mode 100644
index 0000000..5ba3a95
--- /dev/null
+++ b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/configurer/google-storage-component
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfigurer
diff --git a/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/configurer/google-storage-endpoint b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/configurer/google-storage-endpoint
new file mode 100644
index 0000000..61592ad
--- /dev/null
+++ b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/configurer/google-storage-endpoint
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.google.storage.GoogleCloudStorageEndpointConfigurer
diff --git a/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/other.properties
new file mode 100644
index 0000000..6efbcce
--- /dev/null
+++ b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+name=google-storage
+groupId=org.apache.camel
+artifactId=camel-google-storage
+version=3.8.0-SNAPSHOT
+projectName=Camel :: Google Storage
+projectDescription=Camel Component for Google Cloud Platform Storage
diff --git a/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/urifactory/google-storage-endpoint b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/urifactory/google-storage-endpoint
new file mode 100644
index 0000000..0b7ae7a
--- /dev/null
+++ b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/urifactory/google-storage-endpoint
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.google.storage.GoogleCloudStorageEndpointUriFactory
diff --git a/components/camel-google-storage/src/generated/resources/google-storage.json b/components/camel-google-storage/src/generated/resources/google-storage.json
new file mode 100644
index 0000000..d2e99a6
--- /dev/null
+++ b/components/camel-google-storage/src/generated/resources/google-storage.json
@@ -0,0 +1,14 @@
+{
+  "other": {
+    "kind": "other",
+    "name": "google-storage",
+    "title": "Google Storage",
+    "description": "Camel Component for Google Cloud Platform Storage",
+    "deprecated": false,
+    "firstVersion": "3.7.0",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-storage",
+    "version": "3.8.0-SNAPSHOT"
+  }
+}
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
new file mode 100644
index 0000000..e75a20d7
--- /dev/null
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -0,0 +1,77 @@
+{
+  "component": {
+    "kind": "component",
+    "name": "google-storage",
+    "title": "Google Storage",
+    "description": "GoogleCloudStorage component which does bla bla.",
+    "deprecated": false,
+    "firstVersion": "3.7.0",
+    "label": "cloud",
+    "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponent",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-storage",
+    "version": "3.8.0-SNAPSHOT",
+    "scheme": "google-storage",
+    "extendsScheme": "",
+    "syntax": "google-storage:bucketName",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false
+  },
+  "componentProperties": {
+    "autoCreateBucket": { "kind": "property", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
+    "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
+    "objectName": { "kind": "property", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
+    "serviceAccountCredentials": { "kind": "property", "displayName": "Service Account Credentials", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Specify the service account credentials file (json)" },
+    "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
+    "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 [...]
+    "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from S3 after they have been retrieved. The delete [...]
+    "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRe [...]
+    "destinationBucketPrefix": { "kind": "property", "displayName": "Destination Bucket Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket prefix to use when an object must [...]
+    "destinationBucketSuffix": { "kind": "property", "displayName": "Destination Bucket Suffix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket suffix to use when an object must [...]
+    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the S3Object exchange will be consumed and put into the bod [...]
+    "includeFolders": { "kind": "property", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is f [...]
+    "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from S3 bucket to a different bucket after they have be [...]
+    "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 [...]
+    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "getObjectRange" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleClo [...]
+    "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 [...]
+  },
+  "properties": {
+    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Bucket name or ARN" },
+    "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
+    "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
+    "serviceAccountCredentials": { "kind": "parameter", "displayName": "Service Account Credentials", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Specify the service account credentials file (json)" },
+    "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
+    "bridgeErrorHandler": { "kind": "parameter", "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 m [...]
+    "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from S3 after they have been retrieved. The delet [...]
+    "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterR [...]
+    "destinationBucketPrefix": { "kind": "parameter", "displayName": "Destination Bucket Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket prefix to use when an object mus [...]
+    "destinationBucketSuffix": { "kind": "parameter", "displayName": "Destination Bucket Suffix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket suffix to use when an object mus [...]
+    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the S3Object exchange will be consumed and put into the bo [...]
+    "includeFolders": { "kind": "parameter", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is  [...]
+    "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from S3 bucket to a different bucket after they have b [...]
+    "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
+    "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." },
+    "pollStrategy": { "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation  [...]
+    "lazyStartProducer": { "kind": "parameter", "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 sta [...]
+    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "getObjectRange" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCl [...]
+    "backoffErrorThreshold": { "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening agai [...]
+    "delay": { "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." },
+    "greedy": { "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." },
+    "initialDelay": { "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." },
+    "repeatCount": { "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." },
+    "runLoggingLevel": { "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the logging level  [...]
+    "scheduledExecutorService": { "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." },
+    "scheduler": { "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler." },
+    "startScheduler": { "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." },
+    "useFixedDelay": { "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." }
+  }
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
new file mode 100644
index 0000000..d182493
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
@@ -0,0 +1,60 @@
+package org.apache.camel.component.google.storage;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.DefaultComponent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component("google-storage")
+public class GoogleCloudStorageComponent extends DefaultComponent {
+
+    private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageComponent.class);
+
+    @Metadata
+    private GoogleCloudStorageComponentConfiguration configuration = new GoogleCloudStorageComponentConfiguration();
+
+    public GoogleCloudStorageComponent() {
+        this(null);
+    }
+
+    public GoogleCloudStorageComponent(CamelContext context) {
+        super(context);
+
+        //registerExtension(new GoogleCloudStorageComponentVerifierExtension());
+    }
+
+    protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+        LOG.debug("create endopoint: uri={}, remaining={}, parameters={}", uri, remaining, parameters);
+
+        if (remaining == null || remaining.trim().length() == 0) {
+            throw new IllegalArgumentException("Bucket name must be specified.");
+        }
+        if (remaining.startsWith("arn:")) {
+            remaining = remaining.substring(remaining.lastIndexOf(':') + 1, remaining.length());
+        }
+        final GoogleCloudStorageComponentConfiguration configuration
+                = this.configuration != null ? this.configuration.copy() : new GoogleCloudStorageComponentConfiguration();
+        setProperties(configuration, parameters);
+        configuration.setBucketName(remaining);
+        Endpoint endpoint = new GoogleCloudStorageEndpoint(uri, this, configuration);
+
+        return endpoint;
+    }
+
+    public GoogleCloudStorageComponentConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * The component configuration
+     */
+    public void setConfiguration(GoogleCloudStorageComponentConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
new file mode 100644
index 0000000..cf5e481
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -0,0 +1,222 @@
+package org.apache.camel.component.google.storage;
+
+import com.google.cloud.storage.Storage;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriParams;
+
+@UriParams
+public class GoogleCloudStorageComponentConfiguration implements Cloneable {
+
+    private String bucketName;
+
+    @UriParam
+    private String serviceAccountCredentials;  //https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication
+
+    @UriParam(label = "producer",
+              enums = "copyObject,listObjects,deleteObject,deleteBucket,listBuckets,getObject,getObjectRange")
+    private GoogleCloudStorageComponentOperations operation;
+
+    @UriParam
+    private String objectName;
+
+    @UriParam(label = "common", defaultValue = "true")
+    private boolean autoCreateBucket = true;
+
+    @UriParam(label = "consumer")
+    private boolean moveAfterRead;
+    @UriParam(label = "consumer")
+    private String destinationBucket;
+    @UriParam(label = "consumer")
+    private String destinationBucketPrefix;
+    @UriParam(label = "consumer")
+    private String destinationBucketSuffix;
+    @UriParam(label = "consumer", defaultValue = "true")
+    private boolean deleteAfterRead = true;
+    /*
+    @UriParam(label = "consumer")
+    private String fileName;
+    @UriParam(label = "consumer")
+    private String prefix;
+    @UriParam(label = "consumer")
+    private String delimiter;
+    @UriParam(label = "consumer")
+    private String doneFileName;
+    */
+    @UriParam(label = "consumer", defaultValue = "true")
+    private boolean includeBody = true;
+    @UriParam(label = "consumer", defaultValue = "true")
+    private boolean includeFolders = true;
+
+    @UriParam
+    private Storage storageClient;
+
+    public String getBucketName() {
+        return this.bucketName;
+    }
+
+    /**
+     * Bucket name
+     */
+    public void setBucketName(String bucketName) {
+        this.bucketName = bucketName;
+    }
+
+    public String getServiceAccountCredentials() {
+        return serviceAccountCredentials;
+    }
+
+    /**
+     * Specify the service account credentials file (json)
+     */
+    public void setServiceAccountCredentials(String serviceAccountCredentials) {
+        this.serviceAccountCredentials = serviceAccountCredentials;
+    }
+
+    public GoogleCloudStorageComponentConfiguration copy() {
+        try {
+            return (GoogleCloudStorageComponentConfiguration) super.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+
+    public String getObjectName() {
+        return objectName;
+    }
+
+    /**
+     * objectName
+     */
+    public void setObjectName(String objectName) {
+        this.objectName = objectName;
+    }
+
+    public Storage getStorageClient() {
+        return storageClient;
+    }
+
+    /**
+     * Set strage client
+     * 
+     * @param storageClient
+     */
+    public void setStorageClient(Storage storageClient) {
+        this.storageClient = storageClient;
+    }
+
+    public GoogleCloudStorageComponentOperations getOperation() {
+        return operation;
+    }
+
+    /**
+     * set the operation for the producer
+     * 
+     * @param operation
+     */
+    public void setOperation(GoogleCloudStorageComponentOperations operation) {
+        this.operation = operation;
+    }
+
+    public boolean isAutoCreateBucket() {
+        return autoCreateBucket;
+    }
+
+    /**
+     * Setting the autocreation of the bucket bucketName.
+     */
+    public void setAutoCreateBucket(boolean autoCreateBucket) {
+        this.autoCreateBucket = autoCreateBucket;
+    }
+
+    public boolean isMoveAfterRead() {
+        return moveAfterRead;
+    }
+
+    /**
+     * Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the
+     * destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed.
+     * If a rollback occurs, the object is not moved.
+     */
+    public void setMoveAfterRead(boolean moveAfterRead) {
+        this.moveAfterRead = moveAfterRead;
+    }
+
+    public String getDestinationBucket() {
+        return destinationBucket;
+    }
+
+    /**
+     * Define the destination bucket where an object must be moved when moveAfterRead is set to true.
+     */
+    public void setDestinationBucket(String destinationBucket) {
+        this.destinationBucket = destinationBucket;
+    }
+
+    public String getDestinationBucketPrefix() {
+        return destinationBucketPrefix;
+    }
+
+    /**
+     * Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true.
+     */
+    public void setDestinationBucketPrefix(String destinationBucketPrefix) {
+        this.destinationBucketPrefix = destinationBucketPrefix;
+    }
+
+    public String getDestinationBucketSuffix() {
+        return destinationBucketSuffix;
+    }
+
+    /**
+     * Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true.
+     */
+    public void setDestinationBucketSuffix(String destinationBucketSuffix) {
+        this.destinationBucketSuffix = destinationBucketSuffix;
+    }
+
+    /**
+     * If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will
+     * not be created for those
+     */
+    public void setIncludeFolders(boolean includeFolders) {
+        this.includeFolders = includeFolders;
+    }
+
+    public boolean isIncludeFolders() {
+        return includeFolders;
+    }
+
+    public boolean isDeleteAfterRead() {
+        return deleteAfterRead;
+    }
+
+    /**
+     * Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed.
+     * If a rollback occurs, the object is not deleted.
+     * <p/>
+     * If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you
+     * need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the
+     * {@link AWS2S3Constants#BUCKET_NAME} and {@link AWS2S3Constants#KEY} headers, or only the
+     * {@link AWS2S3Constants#KEY} header.
+     */
+    public void setDeleteAfterRead(boolean deleteAfterRead) {
+        this.deleteAfterRead = deleteAfterRead;
+    }
+
+    /**
+     * If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object
+     * stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is
+     * strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will
+     * be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close
+     * the S3Object stream. However setting autocloseBody to true when includeBody is false it will schedule to close
+     * the S3Object stream automatically on exchange completion.
+     */
+    public void setIncludeBody(boolean includeBody) {
+        this.includeBody = includeBody;
+    }
+
+    public boolean isIncludeBody() {
+        return includeBody;
+    }
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java
new file mode 100644
index 0000000..f81597e
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java
@@ -0,0 +1,11 @@
+package org.apache.camel.component.google.storage;
+
+public enum GoogleCloudStorageComponentOperations {
+    copyObject,
+    listObjects,
+    deleteObject,
+    deleteBucket,
+    listBuckets,
+    getObject,
+    createDownloadLink
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentVerifierExtension.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentVerifierExtension.java
new file mode 100644
index 0000000..f0f0ba8
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentVerifierExtension.java
@@ -0,0 +1,82 @@
+package org.apache.camel.component.google.storage;
+
+import java.util.Map;
+
+import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
+import org.apache.camel.component.extension.verifier.ResultBuilder;
+import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
+import org.apache.camel.component.extension.verifier.ResultErrorHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GoogleCloudStorageComponentVerifierExtension extends DefaultComponentVerifierExtension {
+
+    private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageComponentVerifierExtension.class);
+
+    protected GoogleCloudStorageComponentVerifierExtension() {
+        super("google-storage");
+    }
+
+    protected GoogleCloudStorageComponentVerifierExtension(String scheme) {
+        super(scheme);
+    }
+
+    // *********************************
+    // Parameters validation
+    // *********************************
+
+    @Override
+    protected Result verifyParameters(Map<String, Object> parameters) {
+        LOG.debug("verifyParameters={}", parameters);
+        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS)
+                .error(ResultErrorHelper.requiresOption("applicationCredentials", parameters));
+
+        // Validate using the catalog
+
+        super.verifyParametersAgainstCatalog(builder, parameters);
+
+        return builder.build();
+    }
+
+    // *********************************
+    // Connectivity validation
+    // *********************************
+
+    @Override
+    protected Result verifyConnectivity(Map<String, Object> parameters) {
+        LOG.debug("verifyConnectivity={}", parameters);
+        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY);
+
+        try {
+            GoogleCloudStorageComponentConfiguration configuration
+                    = setProperties(new GoogleCloudStorageComponentConfiguration(), parameters);
+            /*
+            if (!S3Client.serviceMetadata().regions().contains(Region.of(configuration.getRegion()))) {
+                ResultErrorBuilder errorBuilder = ResultErrorBuilder.withCodeAndDescription(
+                        VerificationError.StandardCode.ILLEGAL_PARAMETER, "The service is not supported in this region");
+                return builder.error(errorBuilder.build()).build();
+            }
+            AwsBasicCredentials cred = AwsBasicCredentials.create(configuration.getAccessKey(), configuration.getSecretKey());
+            S3ClientBuilder clientBuilder = S3Client.builder();
+            S3Client client = clientBuilder.credentialsProvider(StaticCredentialsProvider.create(cred))
+                    .region(Region.of(configuration.getRegion())).build();
+            client.listBuckets();
+            */
+            /*
+            } catch (SdkClientException e) {
+            ResultErrorBuilder errorBuilder
+                    = ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, e.getMessage())
+                            .detail("aws_s3_exception_message", e.getMessage())
+                            .detail(VerificationError.ExceptionAttribute.EXCEPTION_CLASS, e.getClass().getName())
+                            .detail(VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE, e);
+            
+            builder.error(errorBuilder.build());
+            */
+        } catch (Exception e) {
+            builder.error(ResultErrorBuilder.withException(e).build());
+        }
+
+        return builder.build();
+    }
+
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
new file mode 100644
index 0000000..5fda9ed
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
@@ -0,0 +1,45 @@
+package org.apache.camel.component.google.storage;
+
+public class GoogleCloudStorageConstants {
+
+    public static final String OPERATION = "CamelGoogleCloudStorageOperation";
+    public static final String BUCKET_NAME = "CamelGoogleCloudStorageBucketName";
+    public static final String OBJECT_NAME = "CamelGoogleCloudStorageObjectName";
+    public static final String DESTINATION_OBJECT_NAME = "CamelGoogleCloudStorageDestinationObjectName";
+    public static final String DESTINATION_BUCKET_NAME = "CamelGoogleCloudStorageDestinationBucketName";
+    public static final String DOWNLOAD_LINK_EXPIRATION_TIME = "CamelGoogleCloudStorageDownloadLinkExpirationTime";
+    public static final String CONTENT_LENGTH = "CamelGoogleCloudStorageContentLength";
+    public static final String CONTENT_TYPE = "CamelGoogleCloudStorageContentType";
+    public static final String CACHE_CONTROL = "CamelGoogleCloudStorageCacheControl";
+    public static final String CONTENT_DISPOSITION = "CamelGoogleCloudStorageContentDisposition";
+    public static final String CONTENT_ENCODING = "CamelGoogleCloudStorageContentEncoding";
+    public static final String CONTENT_MD5 = "CamelGoogleCloudStorageContentMd5";
+
+    /*
+    public static final String BUCKET = "BUCKET";
+    public static final String CACHE_CONTROL = "CACHE_CONTROL";
+    
+    public static final String COMPONENT_COUNT = "COMPONENT_COUNT";
+    public static final String CONTENT_DISPOSITION = "CONTENT_DISPOSITION";
+    public static final String CONTENT_ENCODING = "CONTENT_ENCODING";
+    public static final String CONTENT_LANGUAGE = "CONTENT_LANGUAGE";
+    public static final String CONTENT_TYPE = "CONTENT_TYPE";
+    public static final String CUSTOM_TIME = "CUSTOM_TIME";
+    public static final String CRC32C = "CRC32C";
+    public static final String CRC32C_HEX_STRING = "CRC32C_HEX_STRING";
+    public static final String ETAG = "ETAG";
+    public static final String GENERATION = "GENERATION";
+    public static final String ID = "ID";
+    public static final String KMS_KEY_NAME = "KMS_KEY_NAME";
+    public static final String MD5_HASH = "MD5_HASH";
+    public static final String MD5_HEX_STRING = "MD5_HEX_STRING";
+    public static final String MEDIA_LINK ="MEDIA_LINK";
+    public static final String METAGENERATION = "METAGENERATION";
+    public static final String NAME = "NAME";
+    public static final String SIZE = "SIZE";
+    public static final String SORAGE_CLASS = "STORAGE_CLASS";
+    public static final String TIME_CREATED = "TIME_CREATED";
+    public static final String LAST_METADATA_UPDATE = "LAST_METADATA_UPDATE";
+    */
+
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
new file mode 100644
index 0000000..20e0ade
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
@@ -0,0 +1,329 @@
+package org.apache.camel.component.google.storage;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.CopyWriter;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.Storage.CopyRequest;
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedExchange;
+import org.apache.camel.Processor;
+import org.apache.camel.spi.Synchronization;
+import org.apache.camel.support.ScheduledBatchPollingConsumer;
+import org.apache.camel.util.CastUtils;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageConsumer.class);
+
+    //private String marker;
+    //private transient String consumerToString;
+
+    public GoogleCloudStorageConsumer(GoogleCloudStorageEndpoint endpoint, Processor processor) {
+        super(endpoint, processor);
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        super.doStart();
+
+        if (getConfiguration().isMoveAfterRead()) {
+
+            Bucket bucket = getStorageClient().get(getConfiguration().getDestinationBucket());
+            if (bucket != null) {
+                LOG.trace("Bucket [{}] already exists", bucket.getName());
+                return;
+            } else {
+                LOG.trace("Destination Bucket [{}] doesn't exist yet", getConfiguration().getDestinationBucket());
+                if (getConfiguration().isAutoCreateBucket()) {
+                    // creates the new bucket because it doesn't exist yet
+                    BucketInfo bucketInfo = BucketInfo.newBuilder(getConfiguration().getDestinationBucket()).build();
+                    bucket = getStorageClient().create(bucketInfo);
+                    LOG.trace("Destination Bucket created", bucket.getName());
+                }
+            }
+
+        }
+    }
+
+    @Override
+    protected int poll() throws Exception {
+        // must reset for each poll
+        shutdownRunningTask = null;
+        pendingExchanges = 0;
+
+        String fileName = getConfiguration().getObjectName();
+        String bucketName = getConfiguration().getBucketName();
+        //String doneFileName = getConfiguration().getDoneFileName();
+        Queue<Exchange> exchanges = new LinkedList<>();
+
+        //TODO ripristinare
+        //if (!doneFileCheckPasses(bucketName, doneFileName)) {
+        //    exchanges = new LinkedList<>();
+        //} else 
+        if (fileName != null) {
+            LOG.trace("Getting object in bucket [{}] with file name [{}]...", bucketName, fileName);
+
+            Blob blob = getStorageClient().get(bucketName, fileName);
+
+            exchanges = createExchanges(blob, fileName);
+        } else {
+            LOG.trace("Queueing objects in bucket [{}]...", bucketName);
+
+            List<Blob> bloblist = new LinkedList<>();
+            for (Blob blob : getStorageClient().list(bucketName).iterateAll()) {
+                bloblist.add(blob);
+            }
+
+            /*
+            ListObjectsRequest.Builder listObjectsRequest = ListObjectsRequest.builder();
+            listObjectsRequest.bucket(bucketName);
+            listObjectsRequest.prefix(getConfiguration().getPrefix());
+            listObjectsRequest.delimiter(getConfiguration().getDelimiter());
+            
+            if (maxMessagesPerPoll > 0) {
+                listObjectsRequest.maxKeys(maxMessagesPerPoll);
+            }
+            // if there was a marker from previous poll then use that to
+            // continue from where we left last time
+            if (marker != null) {
+                LOG.trace("Resuming from marker: {}", marker);
+                listObjectsRequest.marker(marker);
+            }
+            
+            ListObjectsResponse listObjects = getAmazonS3Client().listObjects(listObjectsRequest.build());
+            
+            if (listObjects.isTruncated()) {
+                marker = listObjects.nextMarker();
+                LOG.trace("Returned list is truncated, so setting next marker: {}", marker);
+            } else {
+                // no more data so clear marker
+                marker = null;
+            }
+            */
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Found {} objects in bucket [{}]...", bloblist.size(), bucketName);
+            }
+
+            exchanges = createExchanges(bloblist);
+        }
+
+        return processBatch(CastUtils.cast(exchanges));
+    }
+
+    /*
+    private boolean doneFileCheckPasses(String bucketName, String doneFileName) {
+        if (doneFileName == null) {
+            return true;
+        } else {
+            return checkFileExists(bucketName, doneFileName);
+        }
+    }
+    */
+
+    /*
+    private boolean checkFileExists(String bucketName, String doneFileName) {
+        HeadObjectRequest.Builder headObjectsRequest = HeadObjectRequest.builder();
+        headObjectsRequest.bucket(bucketName);
+        headObjectsRequest.key(doneFileName);
+        try {
+            getAmazonS3Client().headObject(headObjectsRequest.build());
+            return true;
+        } catch (NoSuchKeyException e) {
+            return false;
+        }
+    }
+    */
+
+    protected Queue<Exchange> createExchanges(Blob blob, String key) {
+        Queue<Exchange> answer = new LinkedList<>();
+        Exchange exchange = getEndpoint().createExchange(blob, key);
+        answer.add(exchange);
+        return answer;
+    }
+
+    protected Queue<Exchange> createExchanges(List<Blob> blobList) {
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Received {} messages in this poll", blobList.size());
+        }
+
+        //Collection<Blob> blobs = new ArrayList<>();
+        Queue<Exchange> answer = new LinkedList<>();
+        try {
+            for (Blob blob : blobList) {
+                /*
+                Builder getRequest
+                        = GetObjectRequest.builder().bucket(getConfiguration().getBucketName()).key(s3ObjectSummary.key());
+                if (getConfiguration().isUseCustomerKey()) {
+                    if (ObjectHelper.isNotEmpty(getConfiguration().getCustomerKeyId())) {
+                        getRequest.sseCustomerKey(getConfiguration().getCustomerKeyId());
+                    }
+                    if (ObjectHelper.isNotEmpty(getConfiguration().getCustomerKeyMD5())) {
+                        getRequest.sseCustomerKeyMD5(getConfiguration().getCustomerKeyMD5());
+                    }
+                    if (ObjectHelper.isNotEmpty(getConfiguration().getCustomerAlgorithm())) {
+                        getRequest.sseCustomerAlgorithm(getConfiguration().getCustomerAlgorithm());
+                    }
+                }*/
+                //ResponseInputStream<GetObjectResponse> s3Object = getAmazonS3Client().getObject(getRequest.build(), ResponseTransformer.toInputStream());
+
+                //if (includeS3Object(s3Object)) {
+                //    blobs.add(s3Object);
+                Exchange exchange = getEndpoint().createExchange(blob, blob.getBlobId().getName());
+                answer.add(exchange);
+                //} else {
+                // If includeFolders != true and the object is not included, it is safe to close the object here.
+                // If includeFolders == true, the exchange will close the object.
+                //    IOHelper.close(s3Object);
+                //}
+            }
+        } catch (Exception e) {
+            LOG.warn("Error getting object due: {}", e.getMessage(), e);
+            // ensure all previous gathered s3 objects are closed
+            // if there was an exception creating the exchanges in this batch
+            //s3Objects.forEach(IOHelper::close);
+            throw e;
+        }
+
+        return answer;
+    }
+
+    /**
+     * Decide whether to include the Objects in the results
+     *
+     * @param  Object
+     * @return        true to include, false to exclude
+     */
+    protected boolean includeObject(Blob blob) {
+
+        if (getConfiguration().isIncludeFolders()) {
+            return true;
+        } else {
+            //TODO understand if the object is a directory
+
+            // Config says to ignore folders/directories
+            //return !Optional.of(((GetObjectResponse) s3Object.response()).contentType()).orElse("")
+            //        .toLowerCase().startsWith("application/x-directory");
+            return true;
+        }
+    }
+
+    @Override
+    public int processBatch(Queue<Object> exchanges) throws Exception {
+        int total = exchanges.size();
+
+        for (int index = 0; index < total && isBatchAllowed(); index++) {
+            // only loop if we are started (allowed to run)
+            final Exchange exchange = ObjectHelper.cast(Exchange.class, exchanges.poll());
+            // add current index and total as properties
+            exchange.setProperty(Exchange.BATCH_INDEX, index);
+            exchange.setProperty(Exchange.BATCH_SIZE, total);
+            exchange.setProperty(Exchange.BATCH_COMPLETE, index == total - 1);
+
+            // update pending number of exchanges
+            pendingExchanges = total - index - 1;
+
+            // add on completion to handle after work when the exchange is done
+            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                public void onComplete(Exchange exchange) {
+                    processCommit(exchange);
+                }
+
+                public void onFailure(Exchange exchange) {
+                    processRollback(exchange);
+                }
+
+                @Override
+                public String toString() {
+                    return "S3ConsumerOnCompletion";
+                }
+            });
+
+            LOG.trace("Processing exchange [{}]...", exchange);
+            getAsyncProcessor().process(exchange, new AsyncCallback() {
+                @Override
+                public void done(boolean doneSync) {
+                    LOG.trace("Processing exchange [{}] done.", exchange);
+                }
+            });
+        }
+
+        return total;
+    }
+
+    /**
+     * Strategy to delete the message after being processed.
+     *
+     * @param exchange the exchange
+     */
+    protected void processCommit(Exchange exchange) {
+        //LOG.info("processCommit");
+        try {
+            if (getConfiguration().isMoveAfterRead()) {
+                String bucketName = exchange.getIn().getHeader(GoogleCloudStorageConstants.BUCKET_NAME, String.class);
+                String key = exchange.getIn().getHeader(GoogleCloudStorageConstants.OBJECT_NAME, String.class);
+
+                LOG.trace("Moving object from bucket {} with key {} to bucket {}...", bucketName, key,
+                        getConfiguration().getDestinationBucket());
+
+                BlobId sourceBlobId = BlobId.of(bucketName, key);
+                BlobId targetBlobId = BlobId.of(getConfiguration().getDestinationBucket(), key);
+                CopyRequest request = CopyRequest.of(sourceBlobId, targetBlobId);
+                CopyWriter copyWriter = getStorageClient().copy(request);
+
+                LOG.trace("Moved object from bucket {} with key {} to bucketName {} -> {}", bucketName, key,
+                        getConfiguration().getDestinationBucket(), copyWriter.getResult());
+            }
+            if (getConfiguration().isDeleteAfterRead()) {
+                String bucketName = exchange.getIn().getHeader(GoogleCloudStorageConstants.BUCKET_NAME, String.class);
+                String key = exchange.getIn().getHeader(GoogleCloudStorageConstants.OBJECT_NAME, String.class);
+
+                LOG.trace("Deleting object from bucket {} with key {}...", bucketName, key);
+
+                boolean b = getStorageClient().delete(bucketName, key);
+
+                LOG.trace("Deleted object from bucket {} with key {}, result={}", bucketName, key, b);
+            }
+        } catch (Exception e) {
+            getExceptionHandler().handleException("Error occurred during moving or deleting object. This exception is ignored.",
+                    exchange, e);
+        }
+    }
+
+    /**
+     * Strategy when processing the exchange failed.
+     *
+     * @param exchange the exchange
+     */
+    protected void processRollback(Exchange exchange) {
+        Exception cause = exchange.getException();
+        if (cause != null) {
+            LOG.warn("Exchange failed, so rolling back message status: {}", exchange, cause);
+        } else {
+            LOG.warn("Exchange failed, so rolling back message status: {}", exchange);
+        }
+    }
+
+    protected GoogleCloudStorageComponentConfiguration getConfiguration() {
+        return getEndpoint().getConfiguration();
+    }
+
+    protected Storage getStorageClient() {
+        return getEndpoint().getStorageClient();
+    }
+
+    @Override
+    public GoogleCloudStorageEndpoint getEndpoint() {
+        return (GoogleCloudStorageEndpoint) super.getEndpoint();
+    }
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
new file mode 100644
index 0000000..a82eab2
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -0,0 +1,183 @@
+package org.apache.camel.component.google.storage;
+
+import java.io.ByteArrayOutputStream;
+
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.Storage;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.component.google.storage.client.StorageInternalClientFactory;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * GoogleCloudStorage component which does bla bla.
+ *
+ * TODO: Update one line description above what the component does.
+ */
+@UriEndpoint(firstVersion = "3.7.0", scheme = "google-storage", title = "Google Storage",
+             syntax = "google-storage:bucketName",
+             category = { Category.CLOUD })
+public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
+
+    private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageEndpoint.class);
+
+    @UriPath(description = "Bucket name or ARN")
+    @Metadata(required = true)
+    private String bucketName; // to support component docs
+
+    @UriParam
+    private GoogleCloudStorageComponentConfiguration configuration;
+
+    private Storage storageClient;
+
+    public GoogleCloudStorageEndpoint(String uri, GoogleCloudStorageComponent component,
+                                      GoogleCloudStorageComponentConfiguration configuration) {
+        super(uri, component);
+        this.configuration = configuration;
+    }
+
+    @Override
+    public Producer createProducer() throws Exception {
+        return new GoogleCloudStorageProducer(this);
+    }
+
+    @Override
+    public Consumer createConsumer(Processor processor) throws Exception {
+        Consumer consumer = new GoogleCloudStorageConsumer(this, processor);
+        configureConsumer(consumer);
+        return consumer;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        super.doStart();
+        this.storageClient = configuration.getStorageClient() != null
+                ? configuration.getStorageClient()
+                : StorageInternalClientFactory.getStorageClient(this.configuration).getGoogleCloudStorage();
+
+        if (configuration.isAutoCreateBucket()) {
+            Bucket bucket = storageClient.get(configuration.getBucketName());
+            if (bucket != null) {
+                LOG.trace("Bucket [{}] already exists", bucket.getName());
+                return;
+            } else {
+                // creates the new bucket because it doesn't exist yet
+                BucketInfo bucketInfo = BucketInfo.newBuilder(configuration.getBucketName()).build();
+                bucket = storageClient.create(bucketInfo);
+                LOG.trace("Bucket [{}] has been created", bucket.getName());
+            }
+        }
+    }
+
+    public GoogleCloudStorageComponentConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * Setup configuration
+     * 
+     * @param configuration
+     */
+    public void setConfiguration(GoogleCloudStorageComponentConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    public Storage getStorageClient() {
+        return storageClient;
+    }
+
+    public Exchange createExchange(Blob blob, String key) {
+        return createExchange(getExchangePattern(), blob, key);
+    }
+
+    public Exchange createExchange(ExchangePattern pattern, Blob blob, String key) {
+        LOG.trace("Getting object with key [{}] from bucket [{}]...", key, getConfiguration().getBucketName());
+
+        LOG.trace("Got object [{}]", blob);
+
+        Exchange exchange = super.createExchange(pattern);
+        Message message = exchange.getIn();
+
+        if (configuration.isIncludeBody()) {
+            try {
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                blob.downloadTo(baos);
+                message.setBody(baos.toByteArray());
+
+            } catch (Exception e) {
+                throw new RuntimeCamelException(e);
+            }
+        } else {
+            message.setBody(blob);
+        }
+
+        message.setHeader(GoogleCloudStorageConstants.OBJECT_NAME, key);
+        message.setHeader(GoogleCloudStorageConstants.BUCKET_NAME, getConfiguration().getBucketName());
+        /*
+        TODO
+        message.setHeader(AWS2S3Constants.E_TAG, s3Object.response().eTag());
+        message.setHeader(AWS2S3Constants.LAST_MODIFIED, s3Object.response().lastModified());
+        message.setHeader(AWS2S3Constants.VERSION_ID, s3Object.response().versionId());
+        message.setHeader(AWS2S3Constants.CONTENT_TYPE, s3Object.response().contentType());
+        message.setHeader(AWS2S3Constants.CONTENT_LENGTH, s3Object.response().contentLength());
+        message.setHeader(AWS2S3Constants.CONTENT_ENCODING, s3Object.response().contentEncoding());
+        message.setHeader(AWS2S3Constants.CONTENT_DISPOSITION, s3Object.response().contentDisposition());
+        message.setHeader(AWS2S3Constants.CACHE_CONTROL, s3Object.response().cacheControl());
+        message.setHeader(AWS2S3Constants.SERVER_SIDE_ENCRYPTION, s3Object.response().serverSideEncryption());
+        message.setHeader(AWS2S3Constants.EXPIRATION_TIME, s3Object.response().expiration());
+        message.setHeader(AWS2S3Constants.REPLICATION_STATUS, s3Object.response().replicationStatus());
+        message.setHeader(AWS2S3Constants.STORAGE_CLASS, s3Object.response().storageClass());
+        message.setHeader(AWS2S3Constants.METADATA, s3Object.response().metadata());
+        */
+        /*
+         * If includeBody == true, it is safe to close the object here because the S3Object
+         * was consumed already. If includeBody != true, the caller is responsible for
+         * closing the stream once the body has been fully consumed or use the autoCloseBody
+         * configuration to automatically schedule the body closing at the end of exchange.
+         */
+        /*
+        if (configuration.isIncludeBody()) {
+            IOHelper.close(s3Object);
+        } else {
+            if (configuration.isAutocloseBody()) {
+                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                    @Override
+                    public void onDone(Exchange exchange) {
+                        IOHelper.close(s3Object);
+                    }
+                });
+            }
+        }
+        */
+
+        return exchange;
+    }
+
+    public String getBucketName() {
+        return bucketName;
+    }
+
+    /**
+     * Bucket name
+     * 
+     * @param bucketName
+     */
+    public void setBucketName(String bucketName) {
+        this.bucketName = bucketName;
+    }
+
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
new file mode 100644
index 0000000..37f48e2
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
@@ -0,0 +1,347 @@
+package org.apache.camel.component.google.storage;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import com.google.cloud.WriteChannel;
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.BlobInfo;
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.CopyWriter;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.Storage.CopyRequest;
+import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadException;
+import org.apache.camel.Message;
+import org.apache.camel.WrappedFile;
+import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GoogleCloudStorageProducer extends DefaultProducer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageProducer.class);
+
+    private GoogleCloudStorageEndpoint endpoint;
+
+    public GoogleCloudStorageProducer(GoogleCloudStorageEndpoint endpoint) {
+        super(endpoint);
+        this.endpoint = endpoint;
+    }
+
+    public void process(Exchange exchange) throws Exception {
+
+        GoogleCloudStorageComponentOperations operation = determineOperation(exchange);
+        if (ObjectHelper.isEmpty(operation)) {
+            processFile(getEndpoint().getStorageClient(), exchange);
+        } else {
+            switch (operation) {
+                case copyObject:
+                    copyObject(getEndpoint().getStorageClient(), exchange);
+                    break;
+                case deleteObject:
+                    deleteObject(getEndpoint().getStorageClient(), exchange);
+                    break;
+                case listBuckets:
+                    listBuckets(getEndpoint().getStorageClient(), exchange);
+                    break;
+                case deleteBucket:
+                    deleteBucket(getEndpoint().getStorageClient(), exchange);
+                    break;
+                case listObjects:
+                    listObjects(getEndpoint().getStorageClient(), exchange);
+                    break;
+                case getObject:
+                    getObject(getEndpoint().getStorageClient(), exchange);
+                    break;
+                case createDownloadLink:
+                    createDownloadLink(getEndpoint().getStorageClient(), exchange);
+                    break;
+
+                default:
+                    throw new IllegalArgumentException("Unsupported operation");
+            }
+        }
+
+    }
+
+    private void processFile(Storage storage, Exchange exchange) throws IOException, InvalidPayloadException {
+        final String bucketName = determineBucketName(exchange);
+        final String objectName = determineObjectName(exchange);
+        //LOG.info("processFile, bucketName={}, objectName={}", bucketName, objectName);
+        Map<String, String> objectMetadata = determineMetadata(exchange);
+
+        File filePayload = null;
+        InputStream is = null;
+        ByteArrayOutputStream baos = null;
+        Object obj = exchange.getIn().getMandatoryBody();
+
+        // Need to check if the message body is WrappedFile
+        if (obj instanceof WrappedFile) {
+            obj = ((WrappedFile<?>) obj).getFile();
+        }
+        if (obj instanceof File) {
+            filePayload = (File) obj;
+            is = new FileInputStream(filePayload);
+        } else {
+            is = exchange.getIn().getMandatoryBody(InputStream.class);
+            baos = determineLengthInputStream(is);
+            //TODO improve here
+            if (objectMetadata.containsKey(Exchange.CONTENT_LENGTH)) {
+                if (objectMetadata.get("Content-Length").equals("0")
+                        && ObjectHelper.isEmpty(exchange.getProperty(Exchange.CONTENT_LENGTH))) {
+                    LOG.debug(
+                            "The content length is not defined. It needs to be determined by reading the data into memory");
+                    objectMetadata.put("Content-Length", String.valueOf(baos.size()));
+                    is = new ByteArrayInputStream(baos.toByteArray());
+                } else {
+                    if (ObjectHelper.isNotEmpty(exchange.getProperty(Exchange.CONTENT_LENGTH))) {
+                        objectMetadata.put("Content-Length",
+                                exchange.getProperty(Exchange.CONTENT_LENGTH, String.class));
+                    }
+                }
+            }
+        }
+
+        Blob createdBlob = null;
+        BlobId blobId = BlobId.of(bucketName, objectName);
+        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setMetadata(objectMetadata).build();
+        if (baos.size() > 1_000_000) {
+            // When content is not available or large (1MB or more) it is recommended
+            // to write it in chunks via the blob's channel writer.
+            try (WriteChannel writer = storage.writer(blobInfo)) {
+                writer.write(ByteBuffer.wrap(baos.toByteArray()));
+            }
+            createdBlob = storage.get(blobId);
+        } else {
+            byte[] bytes = baos.toByteArray();
+            // create the blob in one request.
+            createdBlob = storage.create(blobInfo, bytes);
+        }
+
+        LOG.trace("created createdBlob [{}]", createdBlob);
+        Message message = getMessageForResponse(exchange);
+        message.setBody(createdBlob);
+
+        IOHelper.close(is);
+        /*
+        //TODO improve here
+         * if (getConfiguration().isDeleteAfterWrite() && filePayload != null) {
+         * FileUtil.deleteFile(filePayload); }
+         */
+    }
+
+    private ByteArrayOutputStream determineLengthInputStream(InputStream is) throws IOException {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        byte[] bytes = new byte[1024];
+        int count;
+        while ((count = is.read(bytes)) > 0) {
+            out.write(bytes, 0, count);
+        }
+        return out;
+    }
+
+    private Map<String, String> determineMetadata(final Exchange exchange) {
+        Map<String, String> objectMetadata = new HashMap<String, String>();
+
+        Long contentLength = exchange.getIn().getHeader(GoogleCloudStorageConstants.CONTENT_LENGTH, Long.class);
+        if (contentLength != null) {
+            objectMetadata.put("Content-Length", String.valueOf(contentLength));
+        }
+
+        String contentType = exchange.getIn().getHeader(GoogleCloudStorageConstants.CONTENT_TYPE, String.class);
+        if (contentType != null) {
+            objectMetadata.put("Content-Type", String.valueOf(contentType));
+        }
+
+        String cacheControl = exchange.getIn().getHeader(GoogleCloudStorageConstants.CACHE_CONTROL, String.class);
+        if (cacheControl != null) {
+            objectMetadata.put("Cache-Control", String.valueOf(cacheControl));
+        }
+
+        String contentDisposition = exchange.getIn().getHeader(GoogleCloudStorageConstants.CONTENT_DISPOSITION,
+                String.class);
+        if (contentDisposition != null) {
+            objectMetadata.put("Content-Disposition", String.valueOf(contentDisposition));
+        }
+
+        String contentEncoding = exchange.getIn().getHeader(GoogleCloudStorageConstants.CONTENT_ENCODING, String.class);
+        if (contentEncoding != null) {
+            objectMetadata.put("Content-Encoding", String.valueOf(contentEncoding));
+        }
+
+        String contentMD5 = exchange.getIn().getHeader(GoogleCloudStorageConstants.CONTENT_MD5, String.class);
+        if (contentMD5 != null) {
+            objectMetadata.put("Content-Md5", String.valueOf(contentMD5));
+        }
+
+        return objectMetadata;
+    }
+
+    private void createDownloadLink(Storage storage, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+        final String objectName = determineObjectName(exchange);
+        Long expirationMillis = exchange.getIn().getHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME,
+                Long.class);
+        long milliSeconds = 0;
+        if (expirationMillis != null) {
+            milliSeconds += expirationMillis;
+        } else {
+            milliSeconds += 1000 * 60 * 60;
+        }
+
+        BlobId blobId = BlobId.of(bucketName, objectName);
+        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
+        URL url = storage.signUrl(blobInfo, milliSeconds, TimeUnit.MILLISECONDS);
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(url.toString());
+
+    }
+
+    private void copyObject(Storage storage, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+        final String objectName = determineObjectName(exchange);
+        final String destinationObjectName = exchange.getIn()
+                .getHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, String.class);
+        final String bucketNameDestination = exchange.getIn()
+                .getHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, String.class);
+
+        if (ObjectHelper.isEmpty(bucketNameDestination)) {
+            throw new IllegalArgumentException("Bucket Name Destination must be specified for copyObject Operation");
+        }
+        if (ObjectHelper.isEmpty(destinationObjectName)) {
+            throw new IllegalArgumentException("Destination Key must be specified for copyObject Operation");
+        }
+
+        BlobId sourceBlobId = BlobId.of(bucketName, objectName);
+        BlobId targetBlobId = BlobId.of(bucketNameDestination, destinationObjectName);
+        CopyRequest request = CopyRequest.of(sourceBlobId, targetBlobId);
+        CopyWriter copyWriter = storage.copy(request);
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(copyWriter);
+
+    }
+
+    private void deleteObject(Storage storage, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+        final String objectName = determineObjectName(exchange);
+
+        BlobId blobId = BlobId.of(bucketName, objectName);
+        boolean result = storage.delete(blobId);
+        Message message = getMessageForResponse(exchange);
+        message.setBody(result);
+
+    }
+
+    private void deleteBucket(Storage storage, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+
+        for (Blob blob : storage.list(bucketName).iterateAll()) {
+            storage.delete(blob.getBlobId());
+        }
+
+        boolean result = storage.delete(bucketName);
+        Message message = getMessageForResponse(exchange);
+        message.setBody(result);
+
+    }
+
+    private void listBuckets(Storage storage, Exchange exchange) {
+        List<Bucket> bucketsList = new LinkedList<>();
+        for (Bucket bucket : storage.list().iterateAll()) {
+            bucketsList.add(bucket);
+        }
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(bucketsList);
+    }
+
+    private void getObject(Storage storage, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+        final String objectName = determineObjectName(exchange);
+
+        Blob blob = storage.get(BlobId.of(bucketName, objectName));
+        Message message = getMessageForResponse(exchange);
+        message.setBody(blob);
+
+    }
+
+    private void listObjects(Storage storage, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+
+        List<Blob> bloblist = new LinkedList<>();
+        for (Blob blob : storage.list(bucketName).iterateAll()) {
+            bloblist.add(blob);
+        }
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(bloblist);
+
+    }
+
+    private String determineObjectName(Exchange exchange) {
+        String key = exchange.getIn().getHeader(GoogleCloudStorageConstants.OBJECT_NAME, String.class);
+        if (ObjectHelper.isEmpty(key)) {
+            key = getConfiguration().getObjectName();
+        }
+        if (key == null) {
+            throw new IllegalArgumentException("Google Cloud Storage onject name header missing.");
+        }
+        return key;
+    }
+
+    private String determineBucketName(Exchange exchange) {
+        //String bucketName = exchange.getIn().getHeader(GoogleCloudStorageConstants.BUCKET_NAME, String.class);
+
+        //if (ObjectHelper.isEmpty(bucketName)) {
+        String bucketName = getConfiguration().getBucketName();
+        //    LOG.trace("Google Cloud Storage Bucket name header is missing, using default one [{}]", bucketName);
+        //}
+
+        if (bucketName == null) {
+            throw new IllegalArgumentException("Bucket name is missing or not configured.");
+        }
+
+        return bucketName;
+    }
+
+    public static Message getMessageForResponse(final Exchange exchange) {
+        return exchange.getMessage();
+    }
+
+    private GoogleCloudStorageComponentOperations determineOperation(Exchange exchange) {
+        GoogleCloudStorageComponentOperations operation = exchange.getIn().getHeader(
+                GoogleCloudStorageConstants.OPERATION,
+                GoogleCloudStorageComponentOperations.class);
+        if (operation == null) {
+            operation = getConfiguration().getOperation();
+        }
+        return operation;
+    }
+
+    @Override
+    public GoogleCloudStorageEndpoint getEndpoint() {
+        return (GoogleCloudStorageEndpoint) super.getEndpoint();
+    }
+
+    private GoogleCloudStorageComponentConfiguration getConfiguration() {
+        return this.endpoint.getConfiguration();
+    }
+
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClient.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClient.java
new file mode 100644
index 0000000..5cdf745
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClient.java
@@ -0,0 +1,7 @@
+package org.apache.camel.component.google.storage.client;
+
+import com.google.cloud.storage.Storage;
+
+public interface StorageInternalClient {
+    Storage getGoogleCloudStorage();
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientFactory.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientFactory.java
new file mode 100644
index 0000000..9f97d4c
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientFactory.java
@@ -0,0 +1,11 @@
+package org.apache.camel.component.google.storage.client;
+
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration;
+
+public class StorageInternalClientFactory {
+
+    public static StorageInternalClient getStorageClient(GoogleCloudStorageComponentConfiguration conf) {
+        return new StorageInternalClientImpl(conf);
+    }
+
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientImpl.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientImpl.java
new file mode 100644
index 0000000..f3a8320
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientImpl.java
@@ -0,0 +1,44 @@
+package org.apache.camel.component.google.storage.client;
+
+import java.io.FileInputStream;
+
+import com.google.auth.oauth2.ServiceAccountCredentials;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class StorageInternalClientImpl implements StorageInternalClient {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(StorageInternalClientImpl.class);
+
+    private GoogleCloudStorageComponentConfiguration configuration;
+
+    public StorageInternalClientImpl(GoogleCloudStorageComponentConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    @Override
+    public Storage getGoogleCloudStorage() {
+
+        try {
+            LOGGER.info("creating GoogleCloudStorage client using aplicationCredentials: {}",
+                    configuration.getServiceAccountCredentials());
+            FileInputStream serviceAccountCrediantialsFIS = new FileInputStream(configuration.getServiceAccountCredentials());
+
+            Storage storage = StorageOptions.newBuilder()
+                    .setCredentials(ServiceAccountCredentials.fromStream(serviceAccountCrediantialsFIS))
+                    // .setProjectId(projectId)
+                    .build().getService();
+
+            return storage;
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+
+    }
+
+}
diff --git a/components/camel-google-storage/src/main/resources/META-INF/services/org/apache/camel/component/google-storage b/components/camel-google-storage/src/main/resources/META-INF/services/org/apache/camel/component/google-storage
new file mode 100644
index 0000000..084de00
--- /dev/null
+++ b/components/camel-google-storage/src/main/resources/META-INF/services/org/apache/camel/component/google-storage
@@ -0,0 +1 @@
+class=org.apache.camel.component.google.storage.GoogleCloudStorageComponent
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java
new file mode 100644
index 0000000..22c3a49
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java
@@ -0,0 +1,90 @@
+package org.apache.camel.component.google.storage;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ConsumerLocalTest extends GoogleCloudStorageBaseTest {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ConsumerLocalTest.class);
+
+    @EndpointInject
+    private ProducerTemplate template;
+
+    @EndpointInject("mock:result")
+    private MockEndpoint result;
+
+    @EndpointInject("mock:consumedObjects")
+    private MockEndpoint consumedObjects;
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+
+                String endpoint = "google-storage://myCamelBucket?autoCreateBucket=true";
+
+                from("direct:putObject")
+                        .startupOrder(1)
+                        .to(endpoint)
+                        .to("mock:result");
+
+                from("google-storage://myCamelBucket?"
+                     + "moveAfterRead=true"
+                     + "&destinationBucket=camelDestinationBucket"
+                     + "&autoCreateBucket=true"
+                     + "&deleteAfterRead=true"
+                     + "&includeBody=true")
+                             .startupOrder(2)
+                             .log("consuming: ${header.CamelGoogleCloudStorageBucketName}/${header.CamelGoogleCloudStorageObjectName}, body=${body}")
+                             .to("mock:consumedObjects");
+
+            }
+        };
+    }
+
+    @Test
+    public void sendIn() throws Exception {
+        result.expectedMessageCount(3);
+        consumedObjects.expectedMessageCount(3);
+
+        //upload a files
+
+        template.send("direct:putObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test.txt");
+            exchange.getIn().setBody("Test");
+        });
+
+        template.send("direct:putObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test1.txt");
+            exchange.getIn().setBody("Test1");
+        });
+
+        template.send("direct:putObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test2.txt");
+            exchange.getIn().setBody("Test2");
+        });
+        /*
+        Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
+            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listBuckets);
+        });
+        List<Bucket> bucketsList = listBucketsExchange.getMessage().getBody(List.class);
+        LOG.info("bucketsList {}", bucketsList );
+        
+        
+        Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listObjects);
+        });
+        LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
+        */
+        Thread.sleep(10000);
+        assertMockEndpointsSatisfied();
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java
new file mode 100644
index 0000000..83d01f2
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java
@@ -0,0 +1,28 @@
+package org.apache.camel.component.google.storage;
+
+import com.google.cloud.storage.Storage;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.google.storage.localstorage.LocalStorageHelper;
+import org.apache.camel.test.junit5.CamelTestSupport;
+
+public class GoogleCloudStorageBaseTest extends CamelTestSupport {
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
+
+        Storage storage = createStorage();
+        initStorage(storage);
+        component.getConfiguration().setStorageClient(storage);
+        return context;
+    }
+
+    private Storage createStorage() {
+        return LocalStorageHelper.getOptions().getService();
+    }
+
+    private void initStorage(Storage storage) {
+        //override if you want to inizialite the storage
+    }
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java
new file mode 100644
index 0000000..e6977a2
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java
@@ -0,0 +1,19 @@
+package org.apache.camel.component.google.storage;
+
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class GoogleCloudStorageComponentConfigurationTest extends CamelTestSupport {
+
+    @Test
+    public void createEndpointWithMinimalConfiguration() throws Exception {
+        GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
+        GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
+                "google-storage://rafa_test_bucket?serviceAccountCredentials=somefile.json");
+
+        assertEquals(endpoint.getConfiguration().getServiceAccountCredentials(), "somefile.json");
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java
new file mode 100644
index 0000000..71b2419
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java
@@ -0,0 +1,132 @@
+package org.apache.camel.component.google.storage;
+
+import java.io.ByteArrayInputStream;
+import java.util.List;
+
+import com.google.api.services.storage.model.Bucket;
+import com.google.cloud.storage.Blob;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ProducerLocalTest.class);
+
+    @EndpointInject
+    private ProducerTemplate template;
+
+    @EndpointInject("mock:result")
+    private MockEndpoint result;
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() {
+                String endpoint = "google-storage://myCamelBucket?autoCreateBucket=true";
+
+                from("direct:addObject").to(endpoint);
+                from("direct:getObject").to(endpoint);
+                from("direct:listBucket").to(endpoint);
+                from("direct:listObjects").to(endpoint);
+                from("direct:downloadLink").to(endpoint);
+                from("direct:deleteObject").to(endpoint);
+                from("direct:deleteBucket").to(endpoint).to("mock:result");
+
+            }
+        };
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void sendIn() throws Exception {
+        result.expectedMessageCount(1);
+
+        final String FILENAME_1 = "just_a_file.txt";
+
+        //upload a file
+        byte[] payload = "Hi, How are you ?".getBytes();
+        ByteArrayInputStream bais = new ByteArrayInputStream(payload);
+        Exchange addObjectExchange = template.request("direct:addObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.CONTENT_ENCODING, "text/plain");
+            exchange.getIn().setBody(bais);
+        });
+        Blob addObject = addObjectExchange.getMessage().getBody(Blob.class);
+        LOG.info("addObject {}", addObject);
+        assertNotNull(addObject);
+        assertEquals(FILENAME_1, addObject.getName());
+
+        Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
+            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.listBuckets);
+        });
+        List<Bucket> bucketsList = listBucketsExchange.getMessage().getBody(List.class);
+        LOG.info("bucketsList {}", bucketsList);
+        assertEquals(1, bucketsList.size());
+
+        Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
+            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.listObjects);
+        });
+        LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
+        List<Blob> resp = listObjectsExchange.getMessage().getBody(List.class);
+        assertEquals(1, resp.size());
+        assertEquals(FILENAME_1, resp.get(0).getName());
+
+        Exchange getObjectExchange = template.request("direct:getObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.getObject);
+            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+        });
+        Blob getObject = getObjectExchange.getMessage().getBody(Blob.class);
+        LOG.info("getObject: {}", getObject);
+        assertNotNull(getObject);
+        assertEquals(FILENAME_1, getObject.getName());
+
+        /*
+        //sign url
+        Exchange downloadLinkExchange = template.request( "direct:downloadLink", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.createDownloadLink);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "readme.txt" );
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
+        });
+        URL downloadLink = downloadLinkExchange.getMessage().getBody(URL.class);
+        LOG.info("downloadLink {}", downloadLink );
+        assertNotNull( downloadLink );
+        */
+
+        Exchange deleteObjectExchange = template.send("direct:deleteObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.deleteObject);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+        });
+
+        boolean deleteObject = deleteObjectExchange.getMessage().getBody(Boolean.class).booleanValue();
+        LOG.info("deleteObject {}", deleteObject);
+        assertTrue(deleteObject);
+
+        Exchange deleteBucketExchange = template.send("direct:deleteBucket", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.deleteBucket);
+        });
+        boolean deleteBucket = deleteBucketExchange.getMessage().getBody(Boolean.class).booleanValue();
+        LOG.info("deleteBucket {}", deleteBucket);
+        assertTrue(deleteBucket);
+
+        assertMockEndpointsSatisfied();
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
new file mode 100644
index 0000000..0933dd9
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
@@ -0,0 +1,566 @@
+package org.apache.camel.component.google.storage.localstorage;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigInteger;
+import java.nio.file.FileAlreadyExistsException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.concurrent.NotThreadSafe;
+
+import com.google.api.client.util.DateTime;
+import com.google.api.services.storage.model.Bucket;
+import com.google.api.services.storage.model.ServiceAccount;
+import com.google.api.services.storage.model.StorageObject;
+import com.google.cloud.Tuple;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageException;
+import com.google.cloud.storage.spi.v1.StorageRpc;
+import com.google.cloud.storage.testing.StorageRpcTestBase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+//https://github.com/googleapis/java-storage-nio/blob/master/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java
+/**
+ * A bare-bones in-memory implementation of StorageRpc, meant for testing.
+ *
+ * <p>
+ * This class is <i>not</i> thread-safe. It's also (currently) limited in the following ways:
+ *
+ * <ul>
+ * <li>Supported
+ * <ul>
+ * <li>object create
+ * <li>object get
+ * <li>object delete
+ * <li>list the contents of a bucket
+ * <li>generations
+ * </ul>
+ * <li>Unsupported
+ * <ul>
+ * <li>bucket create
+ * <li>bucket get
+ * <li>bucket delete
+ * <li>list all buckets
+ * <li>file attributes
+ * <li>patch
+ * <li>continueRewrite
+ * <li>createBatch
+ * <li>checksums, etags
+ * <li>IAM operations
+ * <li>BucketLock operations
+ * <li>HMAC key operations
+ * </ul>
+ * </ul>
+ */
+@NotThreadSafe
+class FakeStorageRpc extends StorageRpcTestBase {
+
+    private static final Logger LOG = LoggerFactory.getLogger(FakeStorageRpc.class);
+
+    private static final SimpleDateFormat RFC_3339_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
+
+    // fullname -> metadata
+    Map<String, StorageObject> metadata = new HashMap<>();
+    // fullname -> contents
+    Map<String, byte[]> contents = new HashMap<>();
+    // fullname -> future contents that will be visible on close.
+    Map<String, byte[]> futureContents = new HashMap<>();
+
+    //Bucketname -> bucket
+    Map<String, Bucket> buckets = new HashMap<>();
+
+    private final boolean throwIfOption;
+
+    /** @param throwIfOption if true, we throw when given any option */
+    public FakeStorageRpc(boolean throwIfOption) {
+        this.throwIfOption = throwIfOption;
+    }
+
+    // remove all files
+    void reset() {
+        LOG.info("reset");
+        metadata = new HashMap<>();
+        contents = new HashMap<>();
+        buckets = new HashMap<>();
+    }
+
+    @Override
+    public Bucket create(Bucket bucket, Map<Option, ?> options) {
+        LOG.info("create_bucket: " + bucket.getName());
+        buckets.put(bucket.getName(), bucket);
+        return bucket;
+    }
+
+    @Override
+    public StorageObject create(StorageObject object, InputStream content, Map<Option, ?> options)
+            throws StorageException {
+        potentiallyThrow(options);
+        String key = fullname(object);
+        object.setUpdated(now());
+        metadata.put(key, object);
+        try {
+            contents.put(key, com.google.common.io.ByteStreams.toByteArray(content));
+        } catch (IOException e) {
+            throw new StorageException(e);
+        }
+        // TODO: crc, etc
+        return object;
+    }
+
+    @Override
+    public Tuple<String, Iterable<Bucket>> list(Map<Option, ?> options) {
+        String pageToken = null;
+        String preprefix = "";
+        String delimiter = null;
+        long maxResults = Long.MAX_VALUE;
+        for (Map.Entry<Option, ?> e : options.entrySet()) {
+            switch (e.getKey()) {
+                case PAGE_TOKEN:
+                    pageToken = (String) e.getValue();
+                    break;
+                case PREFIX:
+                    preprefix = (String) e.getValue();
+                    if (preprefix.startsWith("/")) {
+                        preprefix = preprefix.substring(1);
+                    }
+                    break;
+                case DELIMITER:
+                    delimiter = (String) e.getValue();
+                    break;
+                case FIELDS:
+                    // ignore and return all the fields
+                    break;
+                case MAX_RESULTS:
+                    maxResults = (Long) e.getValue();
+                    break;
+                case USER_PROJECT:
+                    // prevent unsupported operation
+                    break;
+                default:
+                    throw new UnsupportedOperationException("Unknown option: " + e.getKey());
+            }
+        }
+
+        Collection<Bucket> values = buckets.values();
+
+        return Tuple.of(pageToken, (Iterable<Bucket>) values);
+    }
+
+    @Override
+    public Tuple<String, Iterable<StorageObject>> list(String bucket, Map<Option, ?> options)
+            throws StorageException {
+        String delimiter = null;
+        String preprefix = "";
+        String pageToken = null;
+        long maxResults = Long.MAX_VALUE;
+        for (Map.Entry<Option, ?> e : options.entrySet()) {
+            switch (e.getKey()) {
+                case PAGE_TOKEN:
+                    pageToken = (String) e.getValue();
+                    break;
+                case PREFIX:
+                    preprefix = (String) e.getValue();
+                    if (preprefix.startsWith("/")) {
+                        preprefix = preprefix.substring(1);
+                    }
+                    break;
+                case DELIMITER:
+                    delimiter = (String) e.getValue();
+                    break;
+                case FIELDS:
+                    // ignore and return all the fields
+                    break;
+                case MAX_RESULTS:
+                    maxResults = (Long) e.getValue();
+                    break;
+                case USER_PROJECT:
+                    // prevent unsupported operation
+                    break;
+                default:
+                    throw new UnsupportedOperationException("Unknown option: " + e.getKey());
+            }
+        }
+        final String prefix = preprefix;
+
+        List<StorageObject> values = new ArrayList<>();
+        Map<String, StorageObject> folders = new HashMap<>();
+        for (StorageObject so : metadata.values()) {
+            if (!so.getBucket().equals(bucket) || !so.getName().startsWith(prefix)) {
+                continue;
+            }
+            if (processedAsFolder(so, delimiter, prefix, folders)) {
+                continue;
+            }
+            so.setSize(size(so));
+            values.add(so);
+        }
+        values.addAll(folders.values());
+
+        // truncate to max allowed length
+        if (values.size() > maxResults) {
+            List<StorageObject> newValues = new ArrayList<>();
+            for (int i = 0; i < maxResults; i++) {
+                newValues.add(values.get(i));
+            }
+            values = newValues;
+        }
+
+        // null cursor to indicate there is no more data (empty string would cause us to be called
+        // again).
+        // The type cast seems to be necessary to help Java's typesystem remember that collections are
+        // iterable.
+        return Tuple.of(pageToken, (Iterable<StorageObject>) values);
+    }
+
+    @Override
+    public Bucket get(Bucket bucket, Map<Option, ?> options) {
+        LOG.info("get_Bucket: {}", bucket.getName());
+        return buckets.get(bucket.getName());
+    }
+
+    /** Returns the requested storage object or {@code null} if not found. */
+    @Override
+    public StorageObject get(StorageObject object, Map<Option, ?> options) throws StorageException {
+        // we allow the "ID" option because we need to, but then we give a whole answer anyways
+        // because the caller won't mind the extra fields.
+        if (throwIfOption
+                && !options.isEmpty()
+                && options.size() > 1
+                && options.keySet().toArray()[0] != Storage.BlobGetOption.fields(Storage.BlobField.ID)) {
+            throw new UnsupportedOperationException();
+        }
+
+        String key = fullname(object);
+        if (metadata.containsKey(key)) {
+            StorageObject ret = metadata.get(key);
+            ret.setSize(size(ret));
+            ret.setId(key);
+
+            return ret;
+        }
+        return null;
+    }
+
+    @Override
+    public Bucket patch(Bucket bucket, Map<Option, ?> options) throws StorageException {
+        potentiallyThrow(options);
+        return null;
+    }
+
+    @Override
+    public StorageObject patch(StorageObject storageObject, Map<Option, ?> options)
+            throws StorageException {
+        potentiallyThrow(options);
+        return null;
+    }
+
+    @Override
+    public boolean delete(Bucket bucket, Map<Option, ?> options) throws StorageException {
+        String bucketName = bucket.getName();
+        LOG.info("delete_bucket: {}", bucketName);
+
+        if (buckets.containsKey(bucketName)) {
+            buckets.remove(bucketName);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean delete(StorageObject object, Map<Option, ?> options) throws StorageException {
+        String key = fullname(object);
+        contents.remove(key);
+        return null != metadata.remove(key);
+    }
+
+    @Override
+    public StorageObject compose(
+            Iterable<StorageObject> sources, StorageObject target, Map<Option, ?> targetOptions)
+            throws StorageException {
+        return null;
+    }
+
+    @Override
+    public byte[] load(StorageObject storageObject, Map<Option, ?> options) throws StorageException {
+        String key = fullname(storageObject);
+        if (!contents.containsKey(key)) {
+            throw new StorageException(404, "File not found: " + key);
+        }
+        return contents.get(key);
+    }
+
+    @Override
+    public Tuple<String, byte[]> read(
+            StorageObject from, Map<Option, ?> options, long zposition, int zbytes)
+            throws StorageException {
+        // if non-null, then we check the file's at that generation.
+        Long generationMatch = null;
+        for (Option op : options.keySet()) {
+            if (op.equals(StorageRpc.Option.IF_GENERATION_MATCH)) {
+                generationMatch = (Long) options.get(op);
+            } else {
+                throw new UnsupportedOperationException("Unknown option: " + op);
+            }
+        }
+        String key = fullname(from);
+        if (!contents.containsKey(key)) {
+            throw new StorageException(404, "File not found: " + key);
+        }
+        checkGeneration(key, generationMatch);
+        long position = zposition;
+        int bytes = zbytes;
+        if (position < 0) {
+            position = 0;
+        }
+        byte[] full = contents.get(key);
+        if ((int) position + bytes > full.length) {
+            bytes = full.length - (int) position;
+        }
+        if (bytes <= 0) {
+            // special case: you're trying to read past the end
+            return Tuple.of("etag-goes-here", new byte[0]);
+        }
+        byte[] ret = new byte[bytes];
+        System.arraycopy(full, (int) position, ret, 0, bytes);
+        return Tuple.of("etag-goes-here", ret);
+    }
+
+    @Override
+    public long read(
+            StorageObject from, Map<Option, ?> options, long position, OutputStream outputStream) {
+        // if non-null, then we check the file's at that generation.
+        Long generationMatch = null;
+        for (Option op : options.keySet()) {
+            if (op.equals(StorageRpc.Option.IF_GENERATION_MATCH)) {
+                generationMatch = (Long) options.get(op);
+            } else {
+                throw new UnsupportedOperationException("Unknown option: " + op);
+            }
+        }
+        String key = fullname(from);
+        if (!contents.containsKey(key)) {
+            throw new StorageException(404, "File not found: " + key);
+        }
+        checkGeneration(key, generationMatch);
+        if (position < 0) {
+            position = 0;
+        }
+        byte[] full = contents.get(key);
+        int bytes = (int) (full.length - position);
+        if (bytes <= 0) {
+            // special case: you're trying to read past the end
+            return 0;
+        }
+        try {
+            outputStream.write(full, (int) position, bytes);
+        } catch (IOException e) {
+            throw new StorageException(500, "Failed to write to file", e);
+        }
+        return bytes;
+    }
+
+    @Override
+    public String open(StorageObject object, Map<Option, ?> options) throws StorageException {
+        String key = fullname(object);
+        // if non-null, then we check the file's at that generation.
+        Long generationMatch = null;
+        for (Option option : options.keySet()) {
+            // this is a bit of a hack, since we don't implement generations.
+            if (option == Option.IF_GENERATION_MATCH) {
+                generationMatch = (Long) options.get(option);
+            }
+        }
+        checkGeneration(key, generationMatch);
+        metadata.put(key, object);
+
+        return fullname(object);
+    }
+
+    @Override
+    public String open(String signedURL) {
+        return null;
+    }
+
+    @Override
+    public void write(
+            String uploadId, byte[] toWrite, int toWriteOffset, long destOffset, int length, boolean last)
+            throws StorageException {
+        writeWithResponse(uploadId, toWrite, toWriteOffset, destOffset, length, last);
+    }
+
+    @Override
+    public StorageObject writeWithResponse(
+            String uploadId,
+            byte[] toWrite,
+            int toWriteOffset,
+            long destOffset,
+            int length,
+            boolean last) {
+        // this may have a lot more allocations than ideal, but it'll work.
+        byte[] bytes;
+        if (futureContents.containsKey(uploadId)) {
+            bytes = futureContents.get(uploadId);
+            if (bytes.length < length + destOffset) {
+                byte[] newBytes = new byte[(int) (length + destOffset)];
+                System.arraycopy(bytes, 0, newBytes, (int) 0, bytes.length);
+                bytes = newBytes;
+            }
+        } else {
+            bytes = new byte[(int) (length + destOffset)];
+        }
+        System.arraycopy(toWrite, toWriteOffset, bytes, (int) destOffset, length);
+        // we want to mimic the GCS behavior that file contents are only visible on close.
+        StorageObject storageObject = null;
+        if (last) {
+            contents.put(uploadId, bytes);
+            futureContents.remove(uploadId);
+            if (metadata.containsKey(uploadId)) {
+                storageObject = metadata.get(uploadId);
+                storageObject.setUpdated(now());
+                Long generation = storageObject.getGeneration();
+                if (null == generation) {
+                    generation = Long.valueOf(0);
+                }
+                storageObject.setGeneration(++generation);
+                metadata.put(uploadId, storageObject);
+            }
+        } else {
+            futureContents.put(uploadId, bytes);
+        }
+        return storageObject;
+    }
+
+    @Override
+    public RewriteResponse openRewrite(RewriteRequest rewriteRequest) throws StorageException {
+        String sourceKey = fullname(rewriteRequest.source);
+
+        // a little hackish, just good enough for the tests to work.
+        if (!contents.containsKey(sourceKey)) {
+            throw new StorageException(404, "File not found: " + sourceKey);
+        }
+
+        // if non-null, then we check the file's at that generation.
+        Long generationMatch = null;
+        for (Option option : rewriteRequest.targetOptions.keySet()) {
+            // this is a bit of a hack, since we don't implement generations.
+            if (option == Option.IF_GENERATION_MATCH) {
+                generationMatch = (Long) rewriteRequest.targetOptions.get(option);
+            }
+        }
+
+        String destKey = fullname(rewriteRequest.target);
+
+        // if this is a new file, set generation to 1, else increment the existing generation
+        long generation = 1;
+        if (metadata.containsKey(destKey)) {
+            generation = metadata.get(destKey).getGeneration() + 1;
+        }
+
+        checkGeneration(destKey, generationMatch);
+
+        byte[] data = contents.get(sourceKey);
+
+        rewriteRequest.target.setGeneration(generation);
+        rewriteRequest.target.setSize(BigInteger.valueOf(data.length));
+        rewriteRequest.target.setUpdated(metadata.get(sourceKey).getUpdated());
+
+        metadata.put(destKey, rewriteRequest.target);
+
+        contents.put(destKey, Arrays.copyOf(data, data.length));
+        return new RewriteResponse(
+                rewriteRequest,
+                rewriteRequest.target,
+                data.length,
+                true,
+                "rewriteToken goes here",
+                data.length);
+    }
+
+    private static DateTime now() {
+        return DateTime.parseRfc3339(RFC_3339_FORMATTER.format(new Date()));
+    }
+
+    private String fullname(StorageObject so) {
+        return (so.getBucket() + "/" + so.getName());
+    }
+
+    private BigInteger size(StorageObject so) {
+        String key = fullname(so);
+
+        if (contents.containsKey(key)) {
+            return BigInteger.valueOf(contents.get(key).length);
+        }
+
+        return null;
+    }
+
+    private void potentiallyThrow(Map<Option, ?> options) throws UnsupportedOperationException {
+        if (throwIfOption && !options.isEmpty()) {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    /**
+     * Throw if we're asking for generation 0 and the file exists, or if the requested generation number doesn't match
+     * what is asked.
+     *
+     * @param key
+     * @param generationMatch
+     */
+    private void checkGeneration(String key, Long generationMatch) {
+        if (null == generationMatch) {
+            return;
+        }
+        if (generationMatch == 0 && metadata.containsKey(key)) {
+            throw new StorageException(new FileAlreadyExistsException(key));
+        }
+        if (generationMatch != 0) {
+            Long generation = metadata.get(key).getGeneration();
+            if (!generationMatch.equals(generation)) {
+                throw new StorageException(
+                        404, "Generation mismatch. Requested " + generationMatch + " but got " + generation);
+            }
+        }
+    }
+
+    // Returns true if this is a folder. Adds it to folders if it isn't already there.
+    private static boolean processedAsFolder(
+            StorageObject so,
+            String delimiter,
+            String prefix, /* inout */
+            Map<String, StorageObject> folders) {
+        if (delimiter == null) {
+            return false;
+        }
+        int nextSlash = so.getName().indexOf(delimiter, prefix.length());
+        if (nextSlash < 0) {
+            return false;
+        }
+        String folderName = so.getName().substring(0, nextSlash + 1);
+        if (folders.containsKey(folderName)) {
+            return true;
+        }
+        StorageObject fakeFolder = new StorageObject();
+        fakeFolder.setName(folderName);
+        fakeFolder.setBucket(so.getBucket());
+        fakeFolder.setGeneration(so.getGeneration());
+        fakeFolder.set("isDirectory", true);
+        fakeFolder.setSize(BigInteger.ZERO);
+        folders.put(folderName, fakeFolder);
+        return true;
+    }
+
+    @Override
+    public ServiceAccount getServiceAccount(String projectId) {
+        return null;
+    }
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
new file mode 100644
index 0000000..9d1e827
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
@@ -0,0 +1,84 @@
+package org.apache.camel.component.google.storage.localstorage;
+
+import com.google.cloud.spi.ServiceRpcFactory;
+import com.google.cloud.storage.StorageOptions;
+import com.google.cloud.storage.spi.v1.StorageRpc;
+
+/**
+ * Utility to create an in-memory storage configuration for testing. Storage options can be obtained via the
+ * {@link #getOptions()} method. Returned options will point to FakeStorageRpc.
+ *
+ * <p>
+ * Note, the created in-memory storage configuration supports limited set of operations and is <b>not</b> thread-safe:
+ *
+ * <ul>
+ * <li>Supported operations
+ * <ul>
+ * <li>object create
+ * <li>object get
+ * <li>object delete
+ * <li>list the contents of a bucket
+ * </ul>
+ * <li>Unsupported operations
+ * <ul>
+ * <li>bucket create
+ * <li>bucket get
+ * <li>bucket delete
+ * <li>list all buckets
+ * <li>generations
+ * <li>file attributes
+ * <li>patch
+ * <li>continueRewrite
+ * <li>createBatch
+ * <li>checksums, etags
+ * <li>IAM operations
+ * </ul>
+ * </ul>
+ *
+ * {@link FakeStorageRpc#list(String, java.util.Map)} lists all the objects that have been created rather than the
+ * objects in the provided bucket. Since this class does not support creating, listing and deleting buckets, the
+ * parameter bucket here is not actually used and on serves as a placeholder.
+ */
+public final class LocalStorageHelper {
+
+    // used for testing. Will throw if you pass it an option.
+    private static final FakeStorageRpc instance = new FakeStorageRpc(true);
+
+    private LocalStorageHelper() {
+    }
+
+    /**
+     * Returns a {@link StorageOptions} that use the static FakeStorageRpc instance, and resets it first so you start
+     * from a clean slate. That instance will throw if you pass it any option.
+     */
+    public static StorageOptions getOptions() {
+        instance.reset();
+        return StorageOptions.newBuilder()
+                .setProjectId("dummy-project-for-testing")
+                .setServiceRpcFactory(
+                        new ServiceRpcFactory<StorageOptions>() {
+                            @Override
+                            public StorageRpc create(StorageOptions options) {
+                                return instance;
+                            }
+                        })
+                .build();
+    }
+
+    /**
+     * Returns a {@link StorageOptions} that creates a new FakeStorageRpc instance with the given option.
+     */
+    public static StorageOptions customOptions(final boolean throwIfOptions) {
+        return StorageOptions.newBuilder()
+                .setProjectId("dummy-project-for-testing")
+                .setServiceRpcFactory(
+                        new ServiceRpcFactory<StorageOptions>() {
+                            @Override
+                            public StorageRpc create(StorageOptions options) {
+                                return new FakeStorageRpc(throwIfOptions);
+                            }
+                        })
+                .build();
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/resources/log4j2.properties b/components/camel-google-storage/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..328db35
--- /dev/null
+++ b/components/camel-google-storage/src/test/resources/log4j2.properties
@@ -0,0 +1,7 @@
+
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = [%30.30t] %-30.30c{1} %-5p %m%n
+rootLogger.level = INFO
+rootLogger.appenderRef.out.ref = out
diff --git a/core/camel-allcomponents/pom.xml b/core/camel-allcomponents/pom.xml
index 9c56dcb..17e3e60 100644
--- a/core/camel-allcomponents/pom.xml
+++ b/core/camel-allcomponents/pom.xml
@@ -599,6 +599,10 @@
 		</dependency>
 		<dependency>
 			<groupId>org.apache.camel</groupId>
+			<artifactId>camel-google-storage</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.camel</groupId>
 			<artifactId>camel-gora</artifactId>
 		</dependency>
 		<dependency>
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index 86c29c8..151a36d 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -1984,6 +1984,19 @@ public interface ComponentsBuilderFactory {
         return org.apache.camel.builder.component.dsl.GoogleSheetsStreamComponentBuilderFactory.googleSheetsStream();
     }
     /**
+     * Google Storage (camel-google-storage)
+     * GoogleCloudStorage component which does bla bla.
+     * 
+     * Category: cloud
+     * Since: 3.7
+     * Maven coordinates: org.apache.camel:camel-google-storage
+     * 
+     * @return the dsl builder
+     */
+    static org.apache.camel.builder.component.dsl.GoogleStorageComponentBuilderFactory.GoogleStorageComponentBuilder googleStorage() {
+        return org.apache.camel.builder.component.dsl.GoogleStorageComponentBuilderFactory.googleStorage();
+    }
+    /**
      * Gora (camel-gora)
      * Access NoSQL databases using the Apache Gora framework.
      * 
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
new file mode 100644
index 0000000..c69c643
--- /dev/null
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -0,0 +1,391 @@
+/*
+ * 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.builder.component.dsl;
+
+import javax.annotation.Generated;
+import org.apache.camel.Component;
+import org.apache.camel.builder.component.AbstractComponentBuilder;
+import org.apache.camel.builder.component.ComponentBuilder;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
+
+/**
+ * GoogleCloudStorage component which does bla bla.
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.ComponentDslMojo")
+public interface GoogleStorageComponentBuilderFactory {
+
+    /**
+     * Google Storage (camel-google-storage)
+     * GoogleCloudStorage component which does bla bla.
+     * 
+     * Category: cloud
+     * Since: 3.7
+     * Maven coordinates: org.apache.camel:camel-google-storage
+     * 
+     * @return the dsl builder
+     */
+    static GoogleStorageComponentBuilder googleStorage() {
+        return new GoogleStorageComponentBuilderImpl();
+    }
+
+    /**
+     * Builder for the Google Storage component.
+     */
+    interface GoogleStorageComponentBuilder
+            extends
+                ComponentBuilder<GoogleCloudStorageComponent> {
+        /**
+         * Setting the autocreation of the bucket bucketName.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: common
+         * 
+         * @param autoCreateBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder autoCreateBucket(
+                boolean autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * The component configuration.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param configuration the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder configuration(
+                org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration configuration) {
+            doSetProperty("configuration", configuration);
+            return this;
+        }
+        /**
+         * objectName.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param objectName the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder objectName(
+                java.lang.String objectName) {
+            doSetProperty("objectName", objectName);
+            return this;
+        }
+        /**
+         * Specify the service account credentials file (json).
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param serviceAccountCredentials the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder serviceAccountCredentials(
+                java.lang.String serviceAccountCredentials) {
+            doSetProperty("serviceAccountCredentials", serviceAccountCredentials);
+            return this;
+        }
+        /**
+         * Set strage client.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param storageClient the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder storageClient(
+                com.google.cloud.storage.Storage storageClient) {
+            doSetProperty("storageClient", storageClient);
+            return this;
+        }
+        /**
+         * 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
+         * message and handled by the routing Error Handler. 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.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param bridgeErrorHandler the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+            return this;
+        }
+        /**
+         * Delete objects from S3 after they have been retrieved. The delete is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the object is not deleted. If this option is false, then the same
+         * objects will be retrieve over and over again on the polls. Therefore
+         * you need to use the Idempotent Consumer EIP in the route to filter
+         * out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME
+         * and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY
+         * header.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param deleteAfterRead the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder deleteAfterRead(
+                boolean deleteAfterRead) {
+            doSetProperty("deleteAfterRead", deleteAfterRead);
+            return this;
+        }
+        /**
+         * Define the destination bucket where an object must be moved when
+         * moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder destinationBucket(
+                java.lang.String destinationBucket) {
+            doSetProperty("destinationBucket", destinationBucket);
+            return this;
+        }
+        /**
+         * Define the destination bucket prefix to use when an object must be
+         * moved and moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBucketPrefix the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder destinationBucketPrefix(
+                java.lang.String destinationBucketPrefix) {
+            doSetProperty("destinationBucketPrefix", destinationBucketPrefix);
+            return this;
+        }
+        /**
+         * Define the destination bucket suffix to use when an object must be
+         * moved and moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBucketSuffix the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder destinationBucketSuffix(
+                java.lang.String destinationBucketSuffix) {
+            doSetProperty("destinationBucketSuffix", destinationBucketSuffix);
+            return this;
+        }
+        /**
+         * If it is true, the S3Object exchange will be consumed and put into
+         * the body and closed. If false the S3Object stream will be put raw
+         * into the body and the headers will be set with the S3 object
+         * metadata. This option is strongly related to autocloseBody option. In
+         * case of setting includeBody to true because the S3Object stream will
+         * be consumed then it will also be closed in case of includeBody false
+         * then it will be up to the caller to close the S3Object stream.
+         * However setting autocloseBody to true when includeBody is false it
+         * will schedule to close the S3Object stream automatically on exchange
+         * completion.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeBody the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder includeBody(boolean includeBody) {
+            doSetProperty("includeBody", includeBody);
+            return this;
+        }
+        /**
+         * If it is true, the folders/directories will be consumed. If it is
+         * false, they will be ignored, and Exchanges will not be created for
+         * those.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeFolders the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder includeFolders(
+                boolean includeFolders) {
+            doSetProperty("includeFolders", includeFolders);
+            return this;
+        }
+        /**
+         * Move objects from S3 bucket to a different bucket after they have
+         * been retrieved. To accomplish the operation the destinationBucket
+         * option must be set. The copy bucket operation is only performed if
+         * the Exchange is committed. If a rollback occurs, the object is not
+         * moved.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param moveAfterRead the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder moveAfterRead(
+                boolean moveAfterRead) {
+            doSetProperty("moveAfterRead", moveAfterRead);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer
+         * 
+         * @param lazyStartProducer the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * set the operation for the producer.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param operation the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder operation(
+                org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations operation) {
+            doSetProperty("operation", operation);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: advanced
+         * 
+         * @param autowiredEnabled the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder autowiredEnabled(
+                boolean autowiredEnabled) {
+            doSetProperty("autowiredEnabled", autowiredEnabled);
+            return this;
+        }
+    }
+
+    class GoogleStorageComponentBuilderImpl
+            extends
+                AbstractComponentBuilder<GoogleCloudStorageComponent>
+            implements
+                GoogleStorageComponentBuilder {
+        @Override
+        protected GoogleCloudStorageComponent buildConcreteComponent() {
+            return new GoogleCloudStorageComponent();
+        }
+        private org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration getOrCreateConfiguration(
+                org.apache.camel.component.google.storage.GoogleCloudStorageComponent component) {
+            if (component.getConfiguration() == null) {
+                component.setConfiguration(new org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration());
+            }
+            return component.getConfiguration();
+        }
+        @Override
+        protected boolean setPropertyOnComponent(
+                Component component,
+                String name,
+                Object value) {
+            switch (name) {
+            case "autoCreateBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setAutoCreateBucket((boolean) value); return true;
+            case "configuration": ((GoogleCloudStorageComponent) component).setConfiguration((org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration) value); return true;
+            case "objectName": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setObjectName((java.lang.String) value); return true;
+            case "serviceAccountCredentials": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setServiceAccountCredentials((java.lang.String) value); return true;
+            case "storageClient": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageClient((com.google.cloud.storage.Storage) value); return true;
+            case "bridgeErrorHandler": ((GoogleCloudStorageComponent) component).setBridgeErrorHandler((boolean) value); return true;
+            case "deleteAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDeleteAfterRead((boolean) value); return true;
+            case "destinationBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDestinationBucket((java.lang.String) value); return true;
+            case "destinationBucketPrefix": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDestinationBucketPrefix((java.lang.String) value); return true;
+            case "destinationBucketSuffix": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDestinationBucketSuffix((java.lang.String) value); return true;
+            case "includeBody": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setIncludeBody((boolean) value); return true;
+            case "includeFolders": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setIncludeFolders((boolean) value); return true;
+            case "moveAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setMoveAfterRead((boolean) value); return true;
+            case "lazyStartProducer": ((GoogleCloudStorageComponent) component).setLazyStartProducer((boolean) value); return true;
+            case "operation": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setOperation((org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations) value); return true;
+            case "autowiredEnabled": ((GoogleCloudStorageComponent) component).setAutowiredEnabled((boolean) value); return true;
+            default: return false;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index 6dfeedf..f97dddd 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -3233,6 +3233,28 @@
     "producerOnly": false,
     "lenientProperties": false
   },
+  "GoogleStorageComponentBuilderFactory": {
+    "kind": "component",
+    "name": "google-storage",
+    "title": "Google Storage",
+    "description": "GoogleCloudStorage component which does bla bla.",
+    "deprecated": false,
+    "firstVersion": "3.7.0",
+    "label": "cloud",
+    "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponent",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-storage",
+    "version": "3.8.0-SNAPSHOT",
+    "scheme": "google-storage",
+    "extendsScheme": "",
+    "syntax": "google-storage:bucketName",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false
+  },
   "GoraComponentBuilderFactory": {
     "kind": "component",
     "name": "gora",
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
index bfc9d35..0f25de1 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
@@ -28,14 +28,12 @@ import javax.annotation.Generated;
 @Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
 public interface EndpointBuilderFactory
         extends
-            org.apache.camel.builder.endpoint.dsl.AMQPEndpointBuilderFactory.AMQPBuilders,
-            org.apache.camel.builder.endpoint.dsl.AS2EndpointBuilderFactory.AS2Builders,
-            org.apache.camel.builder.endpoint.dsl.AWS2EC2EndpointBuilderFactory.AWS2EC2Builders,
-            org.apache.camel.builder.endpoint.dsl.AWS2S3EndpointBuilderFactory.AWS2S3Builders,
             org.apache.camel.builder.endpoint.dsl.ActiveMQEndpointBuilderFactory.ActiveMQBuilders,
             org.apache.camel.builder.endpoint.dsl.AhcEndpointBuilderFactory.AhcBuilders,
+            org.apache.camel.builder.endpoint.dsl.AMQPEndpointBuilderFactory.AMQPBuilders,
             org.apache.camel.builder.endpoint.dsl.ApnsEndpointBuilderFactory.ApnsBuilders,
             org.apache.camel.builder.endpoint.dsl.ArangoDbEndpointBuilderFactory.ArangoDbBuilders,
+            org.apache.camel.builder.endpoint.dsl.AS2EndpointBuilderFactory.AS2Builders,
             org.apache.camel.builder.endpoint.dsl.AsteriskEndpointBuilderFactory.AsteriskBuilders,
             org.apache.camel.builder.endpoint.dsl.Athena2EndpointBuilderFactory.Athena2Builders,
             org.apache.camel.builder.endpoint.dsl.AtlasMapEndpointBuilderFactory.AtlasMapBuilders,
@@ -49,17 +47,17 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.AtomixSetEndpointBuilderFactory.AtomixSetBuilders,
             org.apache.camel.builder.endpoint.dsl.AtomixValueEndpointBuilderFactory.AtomixValueBuilders,
             org.apache.camel.builder.endpoint.dsl.AvroEndpointBuilderFactory.AvroBuilders,
+            org.apache.camel.builder.endpoint.dsl.AWS2EC2EndpointBuilderFactory.AWS2EC2Builders,
+            org.apache.camel.builder.endpoint.dsl.AWS2S3EndpointBuilderFactory.AWS2S3Builders,
             org.apache.camel.builder.endpoint.dsl.BeanEndpointBuilderFactory.BeanBuilders,
-            org.apache.camel.builder.endpoint.dsl.BeanValidatorEndpointBuilderFactory.BeanValidatorBuilders,
             org.apache.camel.builder.endpoint.dsl.BeanstalkEndpointBuilderFactory.BeanstalkBuilders,
+            org.apache.camel.builder.endpoint.dsl.BeanValidatorEndpointBuilderFactory.BeanValidatorBuilders,
             org.apache.camel.builder.endpoint.dsl.BlobEndpointBuilderFactory.BlobBuilders,
             org.apache.camel.builder.endpoint.dsl.BlobServiceEndpointBuilderFactory.BlobServiceBuilders,
             org.apache.camel.builder.endpoint.dsl.BonitaEndpointBuilderFactory.BonitaBuilders,
             org.apache.camel.builder.endpoint.dsl.BoxEndpointBuilderFactory.BoxBuilders,
             org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory.BraintreeBuilders,
             org.apache.camel.builder.endpoint.dsl.BrowseEndpointBuilderFactory.BrowseBuilders,
-            org.apache.camel.builder.endpoint.dsl.CMEndpointBuilderFactory.CMBuilders,
-            org.apache.camel.builder.endpoint.dsl.CMISEndpointBuilderFactory.CMISBuilders,
             org.apache.camel.builder.endpoint.dsl.CaffeineCacheEndpointBuilderFactory.CaffeineCacheBuilders,
             org.apache.camel.builder.endpoint.dsl.CaffeineLoadCacheEndpointBuilderFactory.CaffeineLoadCacheBuilders,
             org.apache.camel.builder.endpoint.dsl.CassandraEndpointBuilderFactory.CassandraBuilders,
@@ -68,20 +66,21 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.CinderEndpointBuilderFactory.CinderBuilders,
             org.apache.camel.builder.endpoint.dsl.ClassEndpointBuilderFactory.ClassBuilders,
             org.apache.camel.builder.endpoint.dsl.ClientEndpointBuilderFactory.ClientBuilders,
+            org.apache.camel.builder.endpoint.dsl.CMEndpointBuilderFactory.CMBuilders,
+            org.apache.camel.builder.endpoint.dsl.CMISEndpointBuilderFactory.CMISBuilders,
             org.apache.camel.builder.endpoint.dsl.CoAPEndpointBuilderFactory.CoAPBuilders,
             org.apache.camel.builder.endpoint.dsl.CometdEndpointBuilderFactory.CometdBuilders,
             org.apache.camel.builder.endpoint.dsl.ConsulEndpointBuilderFactory.ConsulBuilders,
             org.apache.camel.builder.endpoint.dsl.ControlBusEndpointBuilderFactory.ControlBusBuilders,
             org.apache.camel.builder.endpoint.dsl.CordaEndpointBuilderFactory.CordaBuilders,
-            org.apache.camel.builder.endpoint.dsl.CouchDbEndpointBuilderFactory.CouchDbBuilders,
             org.apache.camel.builder.endpoint.dsl.CouchbaseEndpointBuilderFactory.CouchbaseBuilders,
+            org.apache.camel.builder.endpoint.dsl.CouchDbEndpointBuilderFactory.CouchDbBuilders,
             org.apache.camel.builder.endpoint.dsl.CronEndpointBuilderFactory.CronBuilders,
             org.apache.camel.builder.endpoint.dsl.CryptoCmsEndpointBuilderFactory.CryptoCmsBuilders,
             org.apache.camel.builder.endpoint.dsl.Cw2EndpointBuilderFactory.Cw2Builders,
             org.apache.camel.builder.endpoint.dsl.CwEndpointBuilderFactory.CwBuilders,
             org.apache.camel.builder.endpoint.dsl.CxfEndpointBuilderFactory.CxfBuilders,
             org.apache.camel.builder.endpoint.dsl.CxfRsEndpointBuilderFactory.CxfRsBuilders,
-            org.apache.camel.builder.endpoint.dsl.DJLEndpointBuilderFactory.DJLBuilders,
             org.apache.camel.builder.endpoint.dsl.DataFormatEndpointBuilderFactory.DataFormatBuilders,
             org.apache.camel.builder.endpoint.dsl.DataLakeEndpointBuilderFactory.DataLakeBuilders,
             org.apache.camel.builder.endpoint.dsl.DataSetEndpointBuilderFactory.DataSetBuilders,
@@ -100,6 +99,7 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.DirectVmEndpointBuilderFactory.DirectVmBuilders,
             org.apache.camel.builder.endpoint.dsl.DisruptorEndpointBuilderFactory.DisruptorBuilders,
             org.apache.camel.builder.endpoint.dsl.DisruptorVmEndpointBuilderFactory.DisruptorVmBuilders,
+            org.apache.camel.builder.endpoint.dsl.DJLEndpointBuilderFactory.DJLBuilders,
             org.apache.camel.builder.endpoint.dsl.DnsEndpointBuilderFactory.DnsBuilders,
             org.apache.camel.builder.endpoint.dsl.DockerEndpointBuilderFactory.DockerBuilders,
             org.apache.camel.builder.endpoint.dsl.DozerEndpointBuilderFactory.DozerBuilders,
@@ -108,17 +108,17 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.EC2EndpointBuilderFactory.EC2Builders,
             org.apache.camel.builder.endpoint.dsl.ECS2EndpointBuilderFactory.ECS2Builders,
             org.apache.camel.builder.endpoint.dsl.ECSEndpointBuilderFactory.ECSBuilders,
+            org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory.EhcacheBuilders,
             org.apache.camel.builder.endpoint.dsl.EKS2EndpointBuilderFactory.EKS2Builders,
             org.apache.camel.builder.endpoint.dsl.EKSEndpointBuilderFactory.EKSBuilders,
-            org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory.EhcacheBuilders,
             org.apache.camel.builder.endpoint.dsl.ElasticsearchEndpointBuilderFactory.ElasticsearchBuilders,
             org.apache.camel.builder.endpoint.dsl.ElsqlEndpointBuilderFactory.ElsqlBuilders,
             org.apache.camel.builder.endpoint.dsl.EtcdKeysEndpointBuilderFactory.EtcdKeysBuilders,
             org.apache.camel.builder.endpoint.dsl.EtcdStatsEndpointBuilderFactory.EtcdStatsBuilders,
             org.apache.camel.builder.endpoint.dsl.EtcdWatchEndpointBuilderFactory.EtcdWatchBuilders,
+            org.apache.camel.builder.endpoint.dsl.EventbridgeEndpointBuilderFactory.EventbridgeBuilders,
             org.apache.camel.builder.endpoint.dsl.EventEndpointBuilderFactory.EventBuilders,
             org.apache.camel.builder.endpoint.dsl.EventHubsEndpointBuilderFactory.EventHubsBuilders,
-            org.apache.camel.builder.endpoint.dsl.EventbridgeEndpointBuilderFactory.EventbridgeBuilders,
             org.apache.camel.builder.endpoint.dsl.ExecEndpointBuilderFactory.ExecBuilders,
             org.apache.camel.builder.endpoint.dsl.FacebookEndpointBuilderFactory.FacebookBuilders,
             org.apache.camel.builder.endpoint.dsl.FhirEndpointBuilderFactory.FhirBuilders,
@@ -139,6 +139,7 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.GoogleBigQuerySQLEndpointBuilderFactory.GoogleBigQuerySQLBuilders,
             org.apache.camel.builder.endpoint.dsl.GoogleCalendarEndpointBuilderFactory.GoogleCalendarBuilders,
             org.apache.camel.builder.endpoint.dsl.GoogleCalendarStreamEndpointBuilderFactory.GoogleCalendarStreamBuilders,
+            org.apache.camel.builder.endpoint.dsl.GoogleCloudStorageEndpointBuilderFactory.GoogleCloudStorageBuilders,
             org.apache.camel.builder.endpoint.dsl.GoogleDriveEndpointBuilderFactory.GoogleDriveBuilders,
             org.apache.camel.builder.endpoint.dsl.GoogleMailEndpointBuilderFactory.GoogleMailBuilders,
             org.apache.camel.builder.endpoint.dsl.GoogleMailStreamEndpointBuilderFactory.GoogleMailStreamBuilders,
@@ -151,7 +152,6 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.GridFsEndpointBuilderFactory.GridFsBuilders,
             org.apache.camel.builder.endpoint.dsl.GrpcEndpointBuilderFactory.GrpcBuilders,
             org.apache.camel.builder.endpoint.dsl.GuavaEventBusEndpointBuilderFactory.GuavaEventBusBuilders,
-            org.apache.camel.builder.endpoint.dsl.HBaseEndpointBuilderFactory.HBaseBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastAtomicnumberEndpointBuilderFactory.HazelcastAtomicnumberBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastInstanceEndpointBuilderFactory.HazelcastInstanceBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastListEndpointBuilderFactory.HazelcastListBuilders,
@@ -163,12 +163,11 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.HazelcastSedaEndpointBuilderFactory.HazelcastSedaBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastSetEndpointBuilderFactory.HazelcastSetBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastTopicEndpointBuilderFactory.HazelcastTopicBuilders,
+            org.apache.camel.builder.endpoint.dsl.HBaseEndpointBuilderFactory.HBaseBuilders,
             org.apache.camel.builder.endpoint.dsl.HdfsEndpointBuilderFactory.HdfsBuilders,
             org.apache.camel.builder.endpoint.dsl.HttpEndpointBuilderFactory.HttpBuilders,
             org.apache.camel.builder.endpoint.dsl.IAM2EndpointBuilderFactory.IAM2Builders,
             org.apache.camel.builder.endpoint.dsl.IAMEndpointBuilderFactory.IAMBuilders,
-            org.apache.camel.builder.endpoint.dsl.IOTAEndpointBuilderFactory.IOTABuilders,
-            org.apache.camel.builder.endpoint.dsl.IPFSEndpointBuilderFactory.IPFSBuilders,
             org.apache.camel.builder.endpoint.dsl.IgniteCacheEndpointBuilderFactory.IgniteCacheBuilders,
             org.apache.camel.builder.endpoint.dsl.IgniteComputeEndpointBuilderFactory.IgniteComputeBuilders,
             org.apache.camel.builder.endpoint.dsl.IgniteEventsEndpointBuilderFactory.IgniteEventsBuilders,
@@ -179,30 +178,30 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.InfinispanEmbeddedEndpointBuilderFactory.InfinispanEmbeddedBuilders,
             org.apache.camel.builder.endpoint.dsl.InfinispanRemoteEndpointBuilderFactory.InfinispanRemoteBuilders,
             org.apache.camel.builder.endpoint.dsl.InfluxDbEndpointBuilderFactory.InfluxDbBuilders,
+            org.apache.camel.builder.endpoint.dsl.IOTAEndpointBuilderFactory.IOTABuilders,
+            org.apache.camel.builder.endpoint.dsl.IPFSEndpointBuilderFactory.IPFSBuilders,
             org.apache.camel.builder.endpoint.dsl.IrcEndpointBuilderFactory.IrcBuilders,
             org.apache.camel.builder.endpoint.dsl.IronMQEndpointBuilderFactory.IronMQBuilders,
             org.apache.camel.builder.endpoint.dsl.JBPMEndpointBuilderFactory.JBPMBuilders,
             org.apache.camel.builder.endpoint.dsl.JCacheEndpointBuilderFactory.JCacheBuilders,
-            org.apache.camel.builder.endpoint.dsl.JGroupsEndpointBuilderFactory.JGroupsBuilders,
-            org.apache.camel.builder.endpoint.dsl.JGroupsRaftEndpointBuilderFactory.JGroupsRaftBuilders,
-            org.apache.camel.builder.endpoint.dsl.JMXEndpointBuilderFactory.JMXBuilders,
-            org.apache.camel.builder.endpoint.dsl.JSR356WebSocketEndpointBuilderFactory.JSR356WebSocketBuilders,
             org.apache.camel.builder.endpoint.dsl.JcloudsEndpointBuilderFactory.JcloudsBuilders,
             org.apache.camel.builder.endpoint.dsl.JcrEndpointBuilderFactory.JcrBuilders,
             org.apache.camel.builder.endpoint.dsl.JdbcEndpointBuilderFactory.JdbcBuilders,
             org.apache.camel.builder.endpoint.dsl.JettyHttpEndpointBuilderFactory.JettyHttpBuilders,
+            org.apache.camel.builder.endpoint.dsl.JGroupsEndpointBuilderFactory.JGroupsBuilders,
+            org.apache.camel.builder.endpoint.dsl.JGroupsRaftEndpointBuilderFactory.JGroupsRaftBuilders,
             org.apache.camel.builder.endpoint.dsl.JingEndpointBuilderFactory.JingBuilders,
             org.apache.camel.builder.endpoint.dsl.JiraEndpointBuilderFactory.JiraBuilders,
             org.apache.camel.builder.endpoint.dsl.JmsEndpointBuilderFactory.JmsBuilders,
+            org.apache.camel.builder.endpoint.dsl.JMXEndpointBuilderFactory.JMXBuilders,
             org.apache.camel.builder.endpoint.dsl.JoltEndpointBuilderFactory.JoltBuilders,
             org.apache.camel.builder.endpoint.dsl.JooqEndpointBuilderFactory.JooqBuilders,
             org.apache.camel.builder.endpoint.dsl.JpaEndpointBuilderFactory.JpaBuilders,
             org.apache.camel.builder.endpoint.dsl.JsltEndpointBuilderFactory.JsltBuilders,
-            org.apache.camel.builder.endpoint.dsl.JsonValidatorEndpointBuilderFactory.JsonValidatorBuilders,
             org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory.JsonataBuilders,
+            org.apache.camel.builder.endpoint.dsl.JsonValidatorEndpointBuilderFactory.JsonValidatorBuilders,
+            org.apache.camel.builder.endpoint.dsl.JSR356WebSocketEndpointBuilderFactory.JSR356WebSocketBuilders,
             org.apache.camel.builder.endpoint.dsl.Jt400EndpointBuilderFactory.Jt400Builders,
-            org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory.KMS2Builders,
-            org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory.KMSBuilders,
             org.apache.camel.builder.endpoint.dsl.KafkaEndpointBuilderFactory.KafkaBuilders,
             org.apache.camel.builder.endpoint.dsl.KameletEndpointBuilderFactory.KameletBuilders,
             org.apache.camel.builder.endpoint.dsl.KeystoneEndpointBuilderFactory.KeystoneBuilders,
@@ -210,6 +209,8 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.KinesisEndpointBuilderFactory.KinesisBuilders,
             org.apache.camel.builder.endpoint.dsl.KinesisFirehose2EndpointBuilderFactory.KinesisFirehose2Builders,
             org.apache.camel.builder.endpoint.dsl.KinesisFirehoseEndpointBuilderFactory.KinesisFirehoseBuilders,
+            org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory.KMS2Builders,
+            org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory.KMSBuilders,
             org.apache.camel.builder.endpoint.dsl.KubernetesConfigMapsEndpointBuilderFactory.KubernetesConfigMapsBuilders,
             org.apache.camel.builder.endpoint.dsl.KubernetesCustomResourcesEndpointBuilderFactory.KubernetesCustomResourcesBuilders,
             org.apache.camel.builder.endpoint.dsl.KubernetesDeploymentsEndpointBuilderFactory.KubernetesDeploymentsBuilders,
@@ -234,15 +235,11 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.LogEndpointBuilderFactory.LogBuilders,
             org.apache.camel.builder.endpoint.dsl.LuceneEndpointBuilderFactory.LuceneBuilders,
             org.apache.camel.builder.endpoint.dsl.LumberjackEndpointBuilderFactory.LumberjackBuilders,
-            org.apache.camel.builder.endpoint.dsl.MQ2EndpointBuilderFactory.MQ2Builders,
-            org.apache.camel.builder.endpoint.dsl.MQEndpointBuilderFactory.MQBuilders,
-            org.apache.camel.builder.endpoint.dsl.MSK2EndpointBuilderFactory.MSK2Builders,
-            org.apache.camel.builder.endpoint.dsl.MSKEndpointBuilderFactory.MSKBuilders,
             org.apache.camel.builder.endpoint.dsl.MailEndpointBuilderFactory.MailBuilders,
             org.apache.camel.builder.endpoint.dsl.MasterEndpointBuilderFactory.MasterBuilders,
             org.apache.camel.builder.endpoint.dsl.MetricsEndpointBuilderFactory.MetricsBuilders,
-            org.apache.camel.builder.endpoint.dsl.MicroProfileMetricsEndpointBuilderFactory.MicroProfileMetricsBuilders,
             org.apache.camel.builder.endpoint.dsl.MicrometerEndpointBuilderFactory.MicrometerBuilders,
+            org.apache.camel.builder.endpoint.dsl.MicroProfileMetricsEndpointBuilderFactory.MicroProfileMetricsBuilders,
             org.apache.camel.builder.endpoint.dsl.MiloClientEndpointBuilderFactory.MiloClientBuilders,
             org.apache.camel.builder.endpoint.dsl.MiloServerEndpointBuilderFactory.MiloServerBuilders,
             org.apache.camel.builder.endpoint.dsl.MinaEndpointBuilderFactory.MinaBuilders,
@@ -250,6 +247,10 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.MllpEndpointBuilderFactory.MllpBuilders,
             org.apache.camel.builder.endpoint.dsl.MockEndpointBuilderFactory.MockBuilders,
             org.apache.camel.builder.endpoint.dsl.MongoDbEndpointBuilderFactory.MongoDbBuilders,
+            org.apache.camel.builder.endpoint.dsl.MQ2EndpointBuilderFactory.MQ2Builders,
+            org.apache.camel.builder.endpoint.dsl.MQEndpointBuilderFactory.MQBuilders,
+            org.apache.camel.builder.endpoint.dsl.MSK2EndpointBuilderFactory.MSK2Builders,
+            org.apache.camel.builder.endpoint.dsl.MSKEndpointBuilderFactory.MSKBuilders,
             org.apache.camel.builder.endpoint.dsl.MsvEndpointBuilderFactory.MsvBuilders,
             org.apache.camel.builder.endpoint.dsl.MustacheEndpointBuilderFactory.MustacheBuilders,
             org.apache.camel.builder.endpoint.dsl.MvelEndpointBuilderFactory.MvelBuilders,
@@ -257,9 +258,9 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.MyBatisEndpointBuilderFactory.MyBatisBuilders,
             org.apache.camel.builder.endpoint.dsl.NagiosEndpointBuilderFactory.NagiosBuilders,
             org.apache.camel.builder.endpoint.dsl.NatsEndpointBuilderFactory.NatsBuilders,
-            org.apache.camel.builder.endpoint.dsl.NetWeaverEndpointBuilderFactory.NetWeaverBuilders,
             org.apache.camel.builder.endpoint.dsl.NettyEndpointBuilderFactory.NettyBuilders,
             org.apache.camel.builder.endpoint.dsl.NettyHttpEndpointBuilderFactory.NettyHttpBuilders,
+            org.apache.camel.builder.endpoint.dsl.NetWeaverEndpointBuilderFactory.NetWeaverBuilders,
             org.apache.camel.builder.endpoint.dsl.NeutronEndpointBuilderFactory.NeutronBuilders,
             org.apache.camel.builder.endpoint.dsl.NitriteEndpointBuilderFactory.NitriteBuilders,
             org.apache.camel.builder.endpoint.dsl.NovaEndpointBuilderFactory.NovaBuilders,
@@ -288,15 +289,13 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.RedisEndpointBuilderFactory.RedisBuilders,
             org.apache.camel.builder.endpoint.dsl.RefEndpointBuilderFactory.RefBuilders,
             org.apache.camel.builder.endpoint.dsl.RestApiEndpointBuilderFactory.RestApiBuilders,
+            org.apache.camel.builder.endpoint.dsl.ResteasyEndpointBuilderFactory.ResteasyBuilders,
             org.apache.camel.builder.endpoint.dsl.RestEndpointBuilderFactory.RestBuilders,
             org.apache.camel.builder.endpoint.dsl.RestOpenApiEndpointBuilderFactory.RestOpenApiBuilders,
             org.apache.camel.builder.endpoint.dsl.RestSwaggerEndpointBuilderFactory.RestSwaggerBuilders,
-            org.apache.camel.builder.endpoint.dsl.ResteasyEndpointBuilderFactory.ResteasyBuilders,
             org.apache.camel.builder.endpoint.dsl.RobotFrameworkEndpointBuilderFactory.RobotFrameworkBuilders,
             org.apache.camel.builder.endpoint.dsl.RssEndpointBuilderFactory.RssBuilders,
             org.apache.camel.builder.endpoint.dsl.S3EndpointBuilderFactory.S3Builders,
-            org.apache.camel.builder.endpoint.dsl.STS2EndpointBuilderFactory.STS2Builders,
-            org.apache.camel.builder.endpoint.dsl.SWFEndpointBuilderFactory.SWFBuilders,
             org.apache.camel.builder.endpoint.dsl.SagaEndpointBuilderFactory.SagaBuilders,
             org.apache.camel.builder.endpoint.dsl.SalesforceEndpointBuilderFactory.SalesforceBuilders,
             org.apache.camel.builder.endpoint.dsl.SchedulerEndpointBuilderFactory.SchedulerBuilders,
@@ -339,7 +338,9 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.StompEndpointBuilderFactory.StompBuilders,
             org.apache.camel.builder.endpoint.dsl.StreamEndpointBuilderFactory.StreamBuilders,
             org.apache.camel.builder.endpoint.dsl.StringTemplateEndpointBuilderFactory.StringTemplateBuilders,
+            org.apache.camel.builder.endpoint.dsl.STS2EndpointBuilderFactory.STS2Builders,
             org.apache.camel.builder.endpoint.dsl.StubEndpointBuilderFactory.StubBuilders,
+            org.apache.camel.builder.endpoint.dsl.SWFEndpointBuilderFactory.SWFBuilders,
             org.apache.camel.builder.endpoint.dsl.SwiftEndpointBuilderFactory.SwiftBuilders,
             org.apache.camel.builder.endpoint.dsl.TelegramEndpointBuilderFactory.TelegramBuilders,
             org.apache.camel.builder.endpoint.dsl.ThriftEndpointBuilderFactory.ThriftBuilders,
@@ -368,10 +369,10 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.WsEndpointBuilderFactory.WsBuilders,
             org.apache.camel.builder.endpoint.dsl.XChangeEndpointBuilderFactory.XChangeBuilders,
             org.apache.camel.builder.endpoint.dsl.XJEndpointBuilderFactory.XJBuilders,
-            org.apache.camel.builder.endpoint.dsl.XQueryEndpointBuilderFactory.XQueryBuilders,
             org.apache.camel.builder.endpoint.dsl.XmlSignerEndpointBuilderFactory.XmlSignerBuilders,
             org.apache.camel.builder.endpoint.dsl.XmlVerifierEndpointBuilderFactory.XmlVerifierBuilders,
             org.apache.camel.builder.endpoint.dsl.XmppEndpointBuilderFactory.XmppBuilders,
+            org.apache.camel.builder.endpoint.dsl.XQueryEndpointBuilderFactory.XQueryBuilders,
             org.apache.camel.builder.endpoint.dsl.XsltEndpointBuilderFactory.XsltBuilders,
             org.apache.camel.builder.endpoint.dsl.XsltSaxonEndpointBuilderFactory.XsltSaxonBuilders,
             org.apache.camel.builder.endpoint.dsl.YammerEndpointBuilderFactory.YammerBuilders,
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
index 5280157..dc9e092 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
@@ -25,14 +25,12 @@ import javax.annotation.Generated;
 @Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
 public interface EndpointBuilders
         extends
-            org.apache.camel.builder.endpoint.dsl.AMQPEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.AS2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.AWS2EC2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.AWS2S3EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ActiveMQEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AhcEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.AMQPEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ApnsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ArangoDbEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.AS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AsteriskEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.Athena2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AtlasMapEndpointBuilderFactory,
@@ -46,17 +44,17 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.AtomixSetEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AtomixValueEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AvroEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.AWS2EC2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.AWS2S3EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BeanEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.BeanValidatorEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BeanstalkEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.BeanValidatorEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BlobEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BlobServiceEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BonitaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BoxEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BrowseEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.CMEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.CMISEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CaffeineCacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CaffeineLoadCacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CassandraEndpointBuilderFactory,
@@ -65,20 +63,21 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.CinderEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ClassEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ClientEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.CMEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.CMISEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CoAPEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CometdEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ConsulEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ControlBusEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CordaEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.CouchDbEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CouchbaseEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.CouchDbEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CronEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CryptoCmsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.Cw2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CwEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CxfEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CxfRsEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.DJLEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DataFormatEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DataLakeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DataSetEndpointBuilderFactory,
@@ -97,6 +96,7 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.DirectVmEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DisruptorEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DisruptorVmEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.DJLEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DnsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DockerEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DozerEndpointBuilderFactory,
@@ -105,17 +105,17 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.EC2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ECS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ECSEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EKS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EKSEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ElasticsearchEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ElsqlEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EtcdKeysEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EtcdStatsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EtcdWatchEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.EventbridgeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EventEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EventHubsEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.EventbridgeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ExecEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.FacebookEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.FhirEndpointBuilderFactory,
@@ -136,6 +136,7 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.GoogleBigQuerySQLEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GoogleCalendarEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GoogleCalendarStreamEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.GoogleCloudStorageEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GoogleDriveEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GoogleMailEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GoogleMailStreamEndpointBuilderFactory,
@@ -148,7 +149,6 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.GridFsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GrpcEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GuavaEventBusEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.HBaseEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastAtomicnumberEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastInstanceEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastListEndpointBuilderFactory,
@@ -160,12 +160,11 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.HazelcastSedaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastSetEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastTopicEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.HBaseEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HdfsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HttpEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IAM2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IAMEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.IOTAEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.IPFSEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IgniteCacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IgniteComputeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IgniteEventsEndpointBuilderFactory,
@@ -176,30 +175,30 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.InfinispanEmbeddedEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.InfinispanRemoteEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.InfluxDbEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.IOTAEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.IPFSEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IrcEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IronMQEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JBPMEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JCacheEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JGroupsEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JGroupsRaftEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JMXEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JSR356WebSocketEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JcloudsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JcrEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JdbcEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JettyHttpEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JGroupsEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JGroupsRaftEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JingEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JiraEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JmsEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JMXEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JoltEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JooqEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JpaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JsltEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JsonValidatorEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JsonValidatorEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JSR356WebSocketEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.Jt400EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KafkaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KameletEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KeystoneEndpointBuilderFactory,
@@ -207,6 +206,8 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.KinesisEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KinesisFirehose2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KinesisFirehoseEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KubernetesConfigMapsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KubernetesCustomResourcesEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KubernetesDeploymentsEndpointBuilderFactory,
@@ -231,15 +232,11 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.LogEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.LuceneEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.LumberjackEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MQ2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MQEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MSK2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MSKEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MailEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MasterEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MetricsEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MicroProfileMetricsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MicrometerEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MicroProfileMetricsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MiloClientEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MiloServerEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MinaEndpointBuilderFactory,
@@ -247,6 +244,10 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.MllpEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MockEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MongoDbEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MQ2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MQEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MSK2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MSKEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MsvEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MustacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MvelEndpointBuilderFactory,
@@ -254,9 +255,9 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.MyBatisEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NagiosEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NatsEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.NetWeaverEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NettyEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NettyHttpEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.NetWeaverEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NeutronEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NitriteEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NovaEndpointBuilderFactory,
@@ -285,15 +286,13 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.RedisEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RefEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RestApiEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.ResteasyEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RestEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RestOpenApiEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RestSwaggerEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.ResteasyEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RobotFrameworkEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RssEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.S3EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.STS2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.SWFEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SagaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SalesforceEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SchedulerEndpointBuilderFactory,
@@ -336,7 +335,9 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.StompEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.StreamEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.StringTemplateEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.STS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.StubEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.SWFEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SwiftEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.TelegramEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ThriftEndpointBuilderFactory,
@@ -365,10 +366,10 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.WsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XChangeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XJEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.XQueryEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XmlSignerEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XmlVerifierEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XmppEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.XQueryEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XsltEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XsltSaxonEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.YammerEndpointBuilderFactory,
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index fcc404e..882f610 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -6696,6 +6696,49 @@ public class StaticEndpointBuilders {
         return org.apache.camel.builder.endpoint.dsl.GoogleSheetsStreamEndpointBuilderFactory.endpointBuilder(componentName, path);
     }
     /**
+     * Google Storage (camel-google-storage)
+     * GoogleCloudStorage component which does bla bla.
+     * 
+     * Category: cloud
+     * Since: 3.7
+     * Maven coordinates: org.apache.camel:camel-google-storage
+     * 
+     * Syntax: <code>google-storage:bucketName</code>
+     * 
+     * Path parameter: bucketName (required)
+     * Bucket name or ARN
+     * 
+     * @param path bucketName
+     * @return the dsl builder
+     */
+    public static org.apache.camel.builder.endpoint.dsl.GoogleCloudStorageEndpointBuilderFactory.GoogleCloudStorageEndpointBuilder googleStorage(
+            String path) {
+        return org.apache.camel.builder.endpoint.dsl.GoogleCloudStorageEndpointBuilderFactory.endpointBuilder("google-storage", path);
+    }
+    /**
+     * Google Storage (camel-google-storage)
+     * GoogleCloudStorage component which does bla bla.
+     * 
+     * Category: cloud
+     * Since: 3.7
+     * Maven coordinates: org.apache.camel:camel-google-storage
+     * 
+     * Syntax: <code>google-storage:bucketName</code>
+     * 
+     * Path parameter: bucketName (required)
+     * Bucket name or ARN
+     * 
+     * @param componentName to use a custom component name for the endpoint
+     * instead of the default name
+     * @param path bucketName
+     * @return the dsl builder
+     */
+    public static org.apache.camel.builder.endpoint.dsl.GoogleCloudStorageEndpointBuilderFactory.GoogleCloudStorageEndpointBuilder googleStorage(
+            String componentName,
+            String path) {
+        return org.apache.camel.builder.endpoint.dsl.GoogleCloudStorageEndpointBuilderFactory.endpointBuilder(componentName, path);
+    }
+    /**
      * Gora (camel-gora)
      * Access NoSQL databases using the Apache Gora framework.
      * 
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
new file mode 100644
index 0000000..a574217
--- /dev/null
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -0,0 +1,1439 @@
+/*
+ * 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.builder.endpoint.dsl;
+
+import java.util.Map;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.LoggingLevel;
+import org.apache.camel.builder.EndpointConsumerBuilder;
+import org.apache.camel.builder.EndpointProducerBuilder;
+import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
+import org.apache.camel.spi.ExceptionHandler;
+import org.apache.camel.spi.PollingConsumerPollStrategy;
+
+/**
+ * GoogleCloudStorage component which does bla bla.
+ * 
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
+public interface GoogleCloudStorageEndpointBuilderFactory {
+
+
+    /**
+     * Builder for endpoint consumers for the Google Storage component.
+     */
+    public interface GoogleCloudStorageEndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default AdvancedGoogleCloudStorageEndpointConsumerBuilder advanced() {
+            return (AdvancedGoogleCloudStorageEndpointConsumerBuilder) this;
+        }
+        /**
+         * Setting the autocreation of the bucket bucketName.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: common
+         * 
+         * @param autoCreateBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder autoCreateBucket(
+                boolean autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket bucketName.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: common
+         * 
+         * @param autoCreateBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder autoCreateBucket(
+                String autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * objectName.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param objectName the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder objectName(
+                String objectName) {
+            doSetProperty("objectName", objectName);
+            return this;
+        }
+        /**
+         * Specify the service account credentials file (json).
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param serviceAccountCredentials the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder serviceAccountCredentials(
+                String serviceAccountCredentials) {
+            doSetProperty("serviceAccountCredentials", serviceAccountCredentials);
+            return this;
+        }
+        /**
+         * Set strage client.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param storageClient the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder storageClient(
+                Object storageClient) {
+            doSetProperty("storageClient", storageClient);
+            return this;
+        }
+        /**
+         * Set strage client.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param storageClient the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder storageClient(
+                String storageClient) {
+            doSetProperty("storageClient", storageClient);
+            return this;
+        }
+        /**
+         * 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
+         * message and handled by the routing Error Handler. 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.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param bridgeErrorHandler the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+            return this;
+        }
+        /**
+         * 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
+         * message and handled by the routing Error Handler. 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.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param bridgeErrorHandler the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder bridgeErrorHandler(
+                String bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+            return this;
+        }
+        /**
+         * Delete objects from S3 after they have been retrieved. The delete is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the object is not deleted. If this option is false, then the same
+         * objects will be retrieve over and over again on the polls. Therefore
+         * you need to use the Idempotent Consumer EIP in the route to filter
+         * out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME
+         * and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY
+         * header.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param deleteAfterRead the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder deleteAfterRead(
+                boolean deleteAfterRead) {
+            doSetProperty("deleteAfterRead", deleteAfterRead);
+            return this;
+        }
+        /**
+         * Delete objects from S3 after they have been retrieved. The delete is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the object is not deleted. If this option is false, then the same
+         * objects will be retrieve over and over again on the polls. Therefore
+         * you need to use the Idempotent Consumer EIP in the route to filter
+         * out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME
+         * and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY
+         * header.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param deleteAfterRead the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder deleteAfterRead(
+                String deleteAfterRead) {
+            doSetProperty("deleteAfterRead", deleteAfterRead);
+            return this;
+        }
+        /**
+         * Define the destination bucket where an object must be moved when
+         * moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder destinationBucket(
+                String destinationBucket) {
+            doSetProperty("destinationBucket", destinationBucket);
+            return this;
+        }
+        /**
+         * Define the destination bucket prefix to use when an object must be
+         * moved and moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBucketPrefix the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder destinationBucketPrefix(
+                String destinationBucketPrefix) {
+            doSetProperty("destinationBucketPrefix", destinationBucketPrefix);
+            return this;
+        }
+        /**
+         * Define the destination bucket suffix to use when an object must be
+         * moved and moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBucketSuffix the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder destinationBucketSuffix(
+                String destinationBucketSuffix) {
+            doSetProperty("destinationBucketSuffix", destinationBucketSuffix);
+            return this;
+        }
+        /**
+         * If it is true, the S3Object exchange will be consumed and put into
+         * the body and closed. If false the S3Object stream will be put raw
+         * into the body and the headers will be set with the S3 object
+         * metadata. This option is strongly related to autocloseBody option. In
+         * case of setting includeBody to true because the S3Object stream will
+         * be consumed then it will also be closed in case of includeBody false
+         * then it will be up to the caller to close the S3Object stream.
+         * However setting autocloseBody to true when includeBody is false it
+         * will schedule to close the S3Object stream automatically on exchange
+         * completion.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeBody the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder includeBody(
+                boolean includeBody) {
+            doSetProperty("includeBody", includeBody);
+            return this;
+        }
+        /**
+         * If it is true, the S3Object exchange will be consumed and put into
+         * the body and closed. If false the S3Object stream will be put raw
+         * into the body and the headers will be set with the S3 object
+         * metadata. This option is strongly related to autocloseBody option. In
+         * case of setting includeBody to true because the S3Object stream will
+         * be consumed then it will also be closed in case of includeBody false
+         * then it will be up to the caller to close the S3Object stream.
+         * However setting autocloseBody to true when includeBody is false it
+         * will schedule to close the S3Object stream automatically on exchange
+         * completion.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeBody the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder includeBody(
+                String includeBody) {
+            doSetProperty("includeBody", includeBody);
+            return this;
+        }
+        /**
+         * If it is true, the folders/directories will be consumed. If it is
+         * false, they will be ignored, and Exchanges will not be created for
+         * those.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeFolders the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder includeFolders(
+                boolean includeFolders) {
+            doSetProperty("includeFolders", includeFolders);
+            return this;
+        }
+        /**
+         * If it is true, the folders/directories will be consumed. If it is
+         * false, they will be ignored, and Exchanges will not be created for
+         * those.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeFolders the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder includeFolders(
+                String includeFolders) {
+            doSetProperty("includeFolders", includeFolders);
+            return this;
+        }
+        /**
+         * Move objects from S3 bucket to a different bucket after they have
+         * been retrieved. To accomplish the operation the destinationBucket
+         * option must be set. The copy bucket operation is only performed if
+         * the Exchange is committed. If a rollback occurs, the object is not
+         * moved.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param moveAfterRead the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder moveAfterRead(
+                boolean moveAfterRead) {
+            doSetProperty("moveAfterRead", moveAfterRead);
+            return this;
+        }
+        /**
+         * Move objects from S3 bucket to a different bucket after they have
+         * been retrieved. To accomplish the operation the destinationBucket
+         * option must be set. The copy bucket operation is only performed if
+         * the Exchange is committed. If a rollback occurs, the object is not
+         * moved.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param moveAfterRead the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder moveAfterRead(
+                String moveAfterRead) {
+            doSetProperty("moveAfterRead", moveAfterRead);
+            return this;
+        }
+        /**
+         * If the polling consumer did not poll any files, you can enable this
+         * option to send an empty message (no body) instead.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param sendEmptyMessageWhenIdle the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder sendEmptyMessageWhenIdle(
+                boolean sendEmptyMessageWhenIdle) {
+            doSetProperty("sendEmptyMessageWhenIdle", sendEmptyMessageWhenIdle);
+            return this;
+        }
+        /**
+         * If the polling consumer did not poll any files, you can enable this
+         * option to send an empty message (no body) instead.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param sendEmptyMessageWhenIdle the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder sendEmptyMessageWhenIdle(
+                String sendEmptyMessageWhenIdle) {
+            doSetProperty("sendEmptyMessageWhenIdle", sendEmptyMessageWhenIdle);
+            return this;
+        }
+        /**
+         * The number of subsequent error polls (failed due some error) that
+         * should happen before the backoffMultipler should kick-in.
+         * 
+         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Group: scheduler
+         * 
+         * @param backoffErrorThreshold the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder backoffErrorThreshold(
+                int backoffErrorThreshold) {
+            doSetProperty("backoffErrorThreshold", backoffErrorThreshold);
+            return this;
+        }
+        /**
+         * The number of subsequent error polls (failed due some error) that
+         * should happen before the backoffMultipler should kick-in.
+         * 
+         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Group: scheduler
+         * 
+         * @param backoffErrorThreshold the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder backoffErrorThreshold(
+                String backoffErrorThreshold) {
+            doSetProperty("backoffErrorThreshold", backoffErrorThreshold);
+            return this;
+        }
+        /**
+         * The number of subsequent idle polls that should happen before the
+         * backoffMultipler should kick-in.
+         * 
+         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Group: scheduler
+         * 
+         * @param backoffIdleThreshold the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder backoffIdleThreshold(
+                int backoffIdleThreshold) {
+            doSetProperty("backoffIdleThreshold", backoffIdleThreshold);
+            return this;
+        }
+        /**
+         * The number of subsequent idle polls that should happen before the
+         * backoffMultipler should kick-in.
+         * 
+         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Group: scheduler
+         * 
+         * @param backoffIdleThreshold the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder backoffIdleThreshold(
+                String backoffIdleThreshold) {
+            doSetProperty("backoffIdleThreshold", backoffIdleThreshold);
+            return this;
+        }
+        /**
+         * To let the scheduled polling consumer backoff if there has been a
+         * number of subsequent idles/errors in a row. The multiplier is then
+         * the number of polls that will be skipped before the next actual
+         * attempt is happening again. When this option is in use then
+         * backoffIdleThreshold and/or backoffErrorThreshold must also be
+         * configured.
+         * 
+         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Group: scheduler
+         * 
+         * @param backoffMultiplier the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder backoffMultiplier(
+                int backoffMultiplier) {
+            doSetProperty("backoffMultiplier", backoffMultiplier);
+            return this;
+        }
+        /**
+         * To let the scheduled polling consumer backoff if there has been a
+         * number of subsequent idles/errors in a row. The multiplier is then
+         * the number of polls that will be skipped before the next actual
+         * attempt is happening again. When this option is in use then
+         * backoffIdleThreshold and/or backoffErrorThreshold must also be
+         * configured.
+         * 
+         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Group: scheduler
+         * 
+         * @param backoffMultiplier the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder backoffMultiplier(
+                String backoffMultiplier) {
+            doSetProperty("backoffMultiplier", backoffMultiplier);
+            return this;
+        }
+        /**
+         * Milliseconds before the next poll.
+         * 
+         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
+         * 
+         * Default: 500
+         * Group: scheduler
+         * 
+         * @param delay the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder delay(long delay) {
+            doSetProperty("delay", delay);
+            return this;
+        }
+        /**
+         * Milliseconds before the next poll.
+         * 
+         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
+         * 
+         * Default: 500
+         * Group: scheduler
+         * 
+         * @param delay the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder delay(String delay) {
+            doSetProperty("delay", delay);
+            return this;
+        }
+        /**
+         * If greedy is enabled, then the ScheduledPollConsumer will run
+         * immediately again, if the previous run polled 1 or more messages.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: scheduler
+         * 
+         * @param greedy the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder greedy(boolean greedy) {
+            doSetProperty("greedy", greedy);
+            return this;
+        }
+        /**
+         * If greedy is enabled, then the ScheduledPollConsumer will run
+         * immediately again, if the previous run polled 1 or more messages.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: false
+         * Group: scheduler
+         * 
+         * @param greedy the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder greedy(String greedy) {
+            doSetProperty("greedy", greedy);
+            return this;
+        }
+        /**
+         * Milliseconds before the first poll starts.
+         * 
+         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
+         * 
+         * Default: 1000
+         * Group: scheduler
+         * 
+         * @param initialDelay the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder initialDelay(
+                long initialDelay) {
+            doSetProperty("initialDelay", initialDelay);
+            return this;
+        }
+        /**
+         * Milliseconds before the first poll starts.
+         * 
+         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
+         * 
+         * Default: 1000
+         * Group: scheduler
+         * 
+         * @param initialDelay the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder initialDelay(
+                String initialDelay) {
+            doSetProperty("initialDelay", initialDelay);
+            return this;
+        }
+        /**
+         * Specifies a maximum limit of number of fires. So if you set it to 1,
+         * the scheduler will only fire once. If you set it to 5, it will only
+         * fire five times. A value of zero or negative means fire forever.
+         * 
+         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
+         * 
+         * Default: 0
+         * Group: scheduler
+         * 
+         * @param repeatCount the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder repeatCount(
+                long repeatCount) {
+            doSetProperty("repeatCount", repeatCount);
+            return this;
+        }
+        /**
+         * Specifies a maximum limit of number of fires. So if you set it to 1,
+         * the scheduler will only fire once. If you set it to 5, it will only
+         * fire five times. A value of zero or negative means fire forever.
+         * 
+         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
+         * 
+         * Default: 0
+         * Group: scheduler
+         * 
+         * @param repeatCount the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder repeatCount(
+                String repeatCount) {
+            doSetProperty("repeatCount", repeatCount);
+            return this;
+        }
+        /**
+         * The consumer logs a start/complete log line when it polls. This
+         * option allows you to configure the logging level for that.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.LoggingLevel&lt;/code&gt; type.
+         * 
+         * Default: TRACE
+         * Group: scheduler
+         * 
+         * @param runLoggingLevel the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder runLoggingLevel(
+                LoggingLevel runLoggingLevel) {
+            doSetProperty("runLoggingLevel", runLoggingLevel);
+            return this;
+        }
+        /**
+         * The consumer logs a start/complete log line when it polls. This
+         * option allows you to configure the logging level for that.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.LoggingLevel&lt;/code&gt; type.
+         * 
+         * Default: TRACE
+         * Group: scheduler
+         * 
+         * @param runLoggingLevel the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder runLoggingLevel(
+                String runLoggingLevel) {
+            doSetProperty("runLoggingLevel", runLoggingLevel);
+            return this;
+        }
+        /**
+         * Allows for configuring a custom/shared thread pool to use for the
+         * consumer. By default each consumer has its own single threaded thread
+         * pool.
+         * 
+         * The option is a:
+         * &lt;code&gt;java.util.concurrent.ScheduledExecutorService&lt;/code&gt; type.
+         * 
+         * Group: scheduler
+         * 
+         * @param scheduledExecutorService the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder scheduledExecutorService(
+                ScheduledExecutorService scheduledExecutorService) {
+            doSetProperty("scheduledExecutorService", scheduledExecutorService);
+            return this;
+        }
+        /**
+         * Allows for configuring a custom/shared thread pool to use for the
+         * consumer. By default each consumer has its own single threaded thread
+         * pool.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;java.util.concurrent.ScheduledExecutorService&lt;/code&gt; type.
+         * 
+         * Group: scheduler
+         * 
+         * @param scheduledExecutorService the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder scheduledExecutorService(
+                String scheduledExecutorService) {
+            doSetProperty("scheduledExecutorService", scheduledExecutorService);
+            return this;
+        }
+        /**
+         * To use a cron scheduler from either camel-spring or camel-quartz
+         * component. Use value spring or quartz for built in scheduler.
+         * 
+         * The option is a: &lt;code&gt;java.lang.Object&lt;/code&gt; type.
+         * 
+         * Default: none
+         * Group: scheduler
+         * 
+         * @param scheduler the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder scheduler(
+                Object scheduler) {
+            doSetProperty("scheduler", scheduler);
+            return this;
+        }
+        /**
+         * To use a cron scheduler from either camel-spring or camel-quartz
+         * component. Use value spring or quartz for built in scheduler.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;java.lang.Object&lt;/code&gt; type.
+         * 
+         * Default: none
+         * Group: scheduler
+         * 
+         * @param scheduler the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder scheduler(
+                String scheduler) {
+            doSetProperty("scheduler", scheduler);
+            return this;
+        }
+        /**
+         * To configure additional properties when using a custom scheduler or
+         * any of the Quartz, Spring based scheduler.
+         * 
+         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
+         * java.lang.Object&amp;gt;&lt;/code&gt; type.
+         * The option is multivalued, and you can use the
+         * schedulerProperties(String, Object) method to add a value (call the
+         * method multiple times to set more values).
+         * 
+         * Group: scheduler
+         * 
+         * @param key the option key
+         * @param value the option value
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder schedulerProperties(
+                String key,
+                Object value) {
+            doSetMultiValueProperty("schedulerProperties", "scheduler." + key, value);
+            return this;
+        }
+        /**
+         * To configure additional properties when using a custom scheduler or
+         * any of the Quartz, Spring based scheduler.
+         * 
+         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
+         * java.lang.Object&amp;gt;&lt;/code&gt; type.
+         * The option is multivalued, and you can use the
+         * schedulerProperties(String, Object) method to add a value (call the
+         * method multiple times to set more values).
+         * 
+         * Group: scheduler
+         * 
+         * @param values the values
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder schedulerProperties(
+                Map values) {
+            doSetMultiValueProperties("schedulerProperties", "scheduler.", values);
+            return this;
+        }
+        /**
+         * Whether the scheduler should be auto started.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: scheduler
+         * 
+         * @param startScheduler the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder startScheduler(
+                boolean startScheduler) {
+            doSetProperty("startScheduler", startScheduler);
+            return this;
+        }
+        /**
+         * Whether the scheduler should be auto started.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: scheduler
+         * 
+         * @param startScheduler the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder startScheduler(
+                String startScheduler) {
+            doSetProperty("startScheduler", startScheduler);
+            return this;
+        }
+        /**
+         * Time unit for initialDelay and delay options.
+         * 
+         * The option is a:
+         * &lt;code&gt;java.util.concurrent.TimeUnit&lt;/code&gt; type.
+         * 
+         * Default: MILLISECONDS
+         * Group: scheduler
+         * 
+         * @param timeUnit the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder timeUnit(
+                TimeUnit timeUnit) {
+            doSetProperty("timeUnit", timeUnit);
+            return this;
+        }
+        /**
+         * Time unit for initialDelay and delay options.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;java.util.concurrent.TimeUnit&lt;/code&gt; type.
+         * 
+         * Default: MILLISECONDS
+         * Group: scheduler
+         * 
+         * @param timeUnit the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder timeUnit(
+                String timeUnit) {
+            doSetProperty("timeUnit", timeUnit);
+            return this;
+        }
+        /**
+         * Controls if fixed delay or fixed rate is used. See
+         * ScheduledExecutorService in JDK for details.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: scheduler
+         * 
+         * @param useFixedDelay the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder useFixedDelay(
+                boolean useFixedDelay) {
+            doSetProperty("useFixedDelay", useFixedDelay);
+            return this;
+        }
+        /**
+         * Controls if fixed delay or fixed rate is used. See
+         * ScheduledExecutorService in JDK for details.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: scheduler
+         * 
+         * @param useFixedDelay the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder useFixedDelay(
+                String useFixedDelay) {
+            doSetProperty("useFixedDelay", useFixedDelay);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint consumers for the Google Storage component.
+     */
+    public interface AdvancedGoogleCloudStorageEndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default GoogleCloudStorageEndpointConsumerBuilder basic() {
+            return (GoogleCloudStorageEndpointConsumerBuilder) this;
+        }
+        /**
+         * 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.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.spi.ExceptionHandler&lt;/code&gt; type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param exceptionHandler the value to set
+         * @return the dsl builder
+         */
+        default AdvancedGoogleCloudStorageEndpointConsumerBuilder exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            doSetProperty("exceptionHandler", exceptionHandler);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.spi.ExceptionHandler&lt;/code&gt; type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param exceptionHandler the value to set
+         * @return the dsl builder
+         */
+        default AdvancedGoogleCloudStorageEndpointConsumerBuilder exceptionHandler(
+                String exceptionHandler) {
+            doSetProperty("exceptionHandler", exceptionHandler);
+            return this;
+        }
+        /**
+         * Sets the exchange pattern when the consumer creates an exchange.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.ExchangePattern&lt;/code&gt; type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param exchangePattern the value to set
+         * @return the dsl builder
+         */
+        default AdvancedGoogleCloudStorageEndpointConsumerBuilder exchangePattern(
+                ExchangePattern exchangePattern) {
+            doSetProperty("exchangePattern", exchangePattern);
+            return this;
+        }
+        /**
+         * Sets the exchange pattern when the consumer creates an exchange.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.ExchangePattern&lt;/code&gt; type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param exchangePattern the value to set
+         * @return the dsl builder
+         */
+        default AdvancedGoogleCloudStorageEndpointConsumerBuilder exchangePattern(
+                String exchangePattern) {
+            doSetProperty("exchangePattern", exchangePattern);
+            return this;
+        }
+        /**
+         * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
+         * you to provide your custom implementation to control error handling
+         * usually occurred during the poll operation before an Exchange have
+         * been created and being routed in Camel.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.spi.PollingConsumerPollStrategy&lt;/code&gt; type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param pollStrategy the value to set
+         * @return the dsl builder
+         */
+        default AdvancedGoogleCloudStorageEndpointConsumerBuilder pollStrategy(
+                PollingConsumerPollStrategy pollStrategy) {
+            doSetProperty("pollStrategy", pollStrategy);
+            return this;
+        }
+        /**
+         * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
+         * you to provide your custom implementation to control error handling
+         * usually occurred during the poll operation before an Exchange have
+         * been created and being routed in Camel.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.spi.PollingConsumerPollStrategy&lt;/code&gt; type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param pollStrategy the value to set
+         * @return the dsl builder
+         */
+        default AdvancedGoogleCloudStorageEndpointConsumerBuilder pollStrategy(
+                String pollStrategy) {
+            doSetProperty("pollStrategy", pollStrategy);
+            return this;
+        }
+    }
+
+    /**
+     * Builder for endpoint producers for the Google Storage component.
+     */
+    public interface GoogleCloudStorageEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default AdvancedGoogleCloudStorageEndpointProducerBuilder advanced() {
+            return (AdvancedGoogleCloudStorageEndpointProducerBuilder) this;
+        }
+        /**
+         * Setting the autocreation of the bucket bucketName.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: common
+         * 
+         * @param autoCreateBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder autoCreateBucket(
+                boolean autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket bucketName.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: common
+         * 
+         * @param autoCreateBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder autoCreateBucket(
+                String autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * objectName.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param objectName the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder objectName(
+                String objectName) {
+            doSetProperty("objectName", objectName);
+            return this;
+        }
+        /**
+         * Specify the service account credentials file (json).
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param serviceAccountCredentials the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder serviceAccountCredentials(
+                String serviceAccountCredentials) {
+            doSetProperty("serviceAccountCredentials", serviceAccountCredentials);
+            return this;
+        }
+        /**
+         * Set strage client.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param storageClient the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder storageClient(
+                Object storageClient) {
+            doSetProperty("storageClient", storageClient);
+            return this;
+        }
+        /**
+         * Set strage client.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param storageClient the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder storageClient(
+                String storageClient) {
+            doSetProperty("storageClient", storageClient);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer
+         * 
+         * @param lazyStartProducer the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: false
+         * Group: producer
+         * 
+         * @param lazyStartProducer the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder lazyStartProducer(
+                String lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * set the operation for the producer.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param operation the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder operation(
+                GoogleCloudStorageComponentOperations operation) {
+            doSetProperty("operation", operation);
+            return this;
+        }
+        /**
+         * set the operation for the producer.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param operation the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder operation(
+                String operation) {
+            doSetProperty("operation", operation);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint producers for the Google Storage component.
+     */
+    public interface AdvancedGoogleCloudStorageEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default GoogleCloudStorageEndpointProducerBuilder basic() {
+            return (GoogleCloudStorageEndpointProducerBuilder) this;
+        }
+    }
+
+    /**
+     * Builder for endpoint for the Google Storage component.
+     */
+    public interface GoogleCloudStorageEndpointBuilder
+            extends
+                GoogleCloudStorageEndpointConsumerBuilder,
+                GoogleCloudStorageEndpointProducerBuilder {
+        default AdvancedGoogleCloudStorageEndpointBuilder advanced() {
+            return (AdvancedGoogleCloudStorageEndpointBuilder) this;
+        }
+        /**
+         * Setting the autocreation of the bucket bucketName.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: common
+         * 
+         * @param autoCreateBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder autoCreateBucket(
+                boolean autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket bucketName.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: common
+         * 
+         * @param autoCreateBucket the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder autoCreateBucket(
+                String autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * objectName.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param objectName the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder objectName(String objectName) {
+            doSetProperty("objectName", objectName);
+            return this;
+        }
+        /**
+         * Specify the service account credentials file (json).
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param serviceAccountCredentials the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder serviceAccountCredentials(
+                String serviceAccountCredentials) {
+            doSetProperty("serviceAccountCredentials", serviceAccountCredentials);
+            return this;
+        }
+        /**
+         * Set strage client.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param storageClient the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder storageClient(
+                Object storageClient) {
+            doSetProperty("storageClient", storageClient);
+            return this;
+        }
+        /**
+         * Set strage client.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param storageClient the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder storageClient(
+                String storageClient) {
+            doSetProperty("storageClient", storageClient);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint for the Google Storage component.
+     */
+    public interface AdvancedGoogleCloudStorageEndpointBuilder
+            extends
+                AdvancedGoogleCloudStorageEndpointConsumerBuilder,
+                AdvancedGoogleCloudStorageEndpointProducerBuilder {
+        default GoogleCloudStorageEndpointBuilder basic() {
+            return (GoogleCloudStorageEndpointBuilder) this;
+        }
+    }
+
+    /**
+     * Proxy enum for
+     * <code>org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations</code> enum.
+     */
+    enum GoogleCloudStorageComponentOperations {
+        copyObject,
+        listObjects,
+        deleteObject,
+        deleteBucket,
+        listBuckets,
+        getObject,
+        createDownloadLink;
+    }
+
+    public interface GoogleCloudStorageBuilders {
+        /**
+         * Google Storage (camel-google-storage)
+         * GoogleCloudStorage component which does bla bla.
+         * 
+         * Category: cloud
+         * Since: 3.7
+         * Maven coordinates: org.apache.camel:camel-google-storage
+         * 
+         * Syntax: <code>google-storage:bucketName</code>
+         * 
+         * Path parameter: bucketName (required)
+         * Bucket name or ARN
+         * 
+         * @param path bucketName
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder googleStorage(String path) {
+            return GoogleCloudStorageEndpointBuilderFactory.endpointBuilder("google-storage", path);
+        }
+        /**
+         * Google Storage (camel-google-storage)
+         * GoogleCloudStorage component which does bla bla.
+         * 
+         * Category: cloud
+         * Since: 3.7
+         * Maven coordinates: org.apache.camel:camel-google-storage
+         * 
+         * Syntax: <code>google-storage:bucketName</code>
+         * 
+         * Path parameter: bucketName (required)
+         * Bucket name or ARN
+         * 
+         * @param componentName to use a custom component name for the endpoint
+         * instead of the default name
+         * @param path bucketName
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder googleStorage(
+                String componentName,
+                String path) {
+            return GoogleCloudStorageEndpointBuilderFactory.endpointBuilder(componentName, path);
+        }
+    }
+    static GoogleCloudStorageEndpointBuilder endpointBuilder(
+            String componentName,
+            String path) {
+        class GoogleCloudStorageEndpointBuilderImpl extends AbstractEndpointBuilder implements GoogleCloudStorageEndpointBuilder, AdvancedGoogleCloudStorageEndpointBuilder {
+            public GoogleCloudStorageEndpointBuilderImpl(String path) {
+                super(componentName, path);
+            }
+        }
+        return new GoogleCloudStorageEndpointBuilderImpl(path);
+    }
+}
\ No newline at end of file
diff --git a/parent/pom.xml b/parent/pom.xml
index 5a6e76b..a9b7ef4 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -1489,6 +1489,11 @@
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
+				<artifactId>camel-google-storage</artifactId>
+				<version>${project.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.camel</groupId>
 				<artifactId>camel-gora</artifactId>
 				<version>${project.version}</version>
 			</dependency>


[camel] 13/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 813e65578de0f92ee45f31ee08ba92b47e06ee12
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sat Feb 13 19:21:20 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../catalog/docs/google-storage-component.adoc     |  41 +++---
 .../GoogleCloudStorageComponentConfigurer.java     |   6 +
 .../GoogleCloudStorageEndpointConfigurer.java      |   6 +
 .../GoogleCloudStorageEndpointUriFactory.java      |   3 +-
 .../component/google/storage/google-storage.json   |  20 +--
 .../src/main/docs/google-storage-component.adoc    |  37 +++---
 .../GoogleCloudStorageComponentConfiguration.java  |  40 ++++--
 .../google/storage/GoogleCloudStorageEndpoint.java |   9 +-
 .../dsl/GoogleStorageComponentBuilderFactory.java  |  29 ++++-
 .../builder/endpoint/StaticEndpointBuilders.java   |   4 +-
 .../GoogleCloudStorageEndpointBuilderFactory.java  | 137 ++++++++++++++++++---
 .../ROOT/pages/google-storage-component.adoc       |  41 +++---
 12 files changed, 259 insertions(+), 114 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index 7e9d166..8e5250c 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -47,16 +47,11 @@ String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/D
 
 Or by providing the path to the GCP credentials file location:
 
-[source,text]
---------------------------------------------------------
-export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
---------------------------------------------------------
-
-or for windows:
+Provide authentication credentials to your application code by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS` :
 
 [source,text]
 --------------------------------------------------------
-$Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
+export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
 
@@ -67,15 +62,15 @@ $Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 google-storage://bucketNameOrArn?[options]
 --------------------------------------------------------
 
-The bucket will be created if it don't already exists. +
- You can append query options to the URI in the following format,
+By default the bucket will be created if it don't already exists. +
+You can append query options to the URI in the following format,
 ?options=value&option2=value&...
 
-For example in order to read file `hello.txt` from bucket `helloBucket`, use the following snippet:
+For example in order to read file `hello.txt` from bucket `myCamelBucket`, use the following snippet:
 
 [source,java]
 --------------------------------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&prefix=hello.txt")
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&objectName=hello.txt")
   .to("file:/var/downloaded");
 --------------------------------------------------------------------------------
 
@@ -83,7 +78,7 @@ from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-k
 == URI Options
 
 // component options: START
-The Google Storage component supports 15 options, which are listed below.
+The Google Storage component supports 16 options, which are listed below.
 
 
 
@@ -92,17 +87,18 @@ The Google Storage component supports 15 options, which are listed below.
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
-| *serviceAccountKey* (common) | Service account key |  | String
-| *storageClient* (common) | Set strage client |  | Storage
+| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
+| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
+| *storageClient* (common) | The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
 | *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | Object name |  | String
+| *objectName* (producer) | The Object name inside the bucket |  | String
 | *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
@@ -123,24 +119,25 @@ with the following path and query parameters:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *bucketName* | *Required* Bucket name |  | String
+| *bucketName* | *Required* Bucket name or ARN |  | String
 |===
 
 
-=== Query Parameters (31 parameters):
+=== Query Parameters (32 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *serviceAccountKey* (common) | Service account key |  | String
-| *storageClient* (common) | Set strage client |  | Storage
+| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
+| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
+| *storageClient* (common) | The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
 | *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
@@ -148,7 +145,7 @@ with the following path and query parameters:
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | Object name |  | String
+| *objectName* (producer) | The Object name inside the bucket |  | String
 | *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
index 649f85b..951b4cf 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
@@ -52,6 +52,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "operation": getOrCreateConfiguration(target).setOperation(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class, value)); return true;
         case "serviceaccountkey":
         case "serviceAccountKey": getOrCreateConfiguration(target).setServiceAccountKey(property(camelContext, java.lang.String.class, value)); return true;
+        case "storageclass":
+        case "storageClass": getOrCreateConfiguration(target).setStorageClass(property(camelContext, com.google.cloud.storage.StorageClass.class, value)); return true;
         case "storageclient":
         case "storageClient": getOrCreateConfiguration(target).setStorageClient(property(camelContext, com.google.cloud.storage.Storage.class, value)); return true;
         case "storagelocation":
@@ -87,6 +89,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "operation": return org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class;
         case "serviceaccountkey":
         case "serviceAccountKey": return java.lang.String.class;
+        case "storageclass":
+        case "storageClass": return com.google.cloud.storage.StorageClass.class;
         case "storageclient":
         case "storageClient": return com.google.cloud.storage.Storage.class;
         case "storagelocation":
@@ -123,6 +127,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "operation": return getOrCreateConfiguration(target).getOperation();
         case "serviceaccountkey":
         case "serviceAccountKey": return getOrCreateConfiguration(target).getServiceAccountKey();
+        case "storageclass":
+        case "storageClass": return getOrCreateConfiguration(target).getStorageClass();
         case "storageclient":
         case "storageClient": return getOrCreateConfiguration(target).getStorageClient();
         case "storagelocation":
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
index edb8a63..105ba9a 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
@@ -71,6 +71,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "serviceAccountKey": target.getConfiguration().setServiceAccountKey(property(camelContext, java.lang.String.class, value)); return true;
         case "startscheduler":
         case "startScheduler": target.setStartScheduler(property(camelContext, boolean.class, value)); return true;
+        case "storageclass":
+        case "storageClass": target.getConfiguration().setStorageClass(property(camelContext, com.google.cloud.storage.StorageClass.class, value)); return true;
         case "storageclient":
         case "storageClient": target.getConfiguration().setStorageClient(property(camelContext, com.google.cloud.storage.Storage.class, value)); return true;
         case "storagelocation":
@@ -136,6 +138,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "serviceAccountKey": return java.lang.String.class;
         case "startscheduler":
         case "startScheduler": return boolean.class;
+        case "storageclass":
+        case "storageClass": return com.google.cloud.storage.StorageClass.class;
         case "storageclient":
         case "storageClient": return com.google.cloud.storage.Storage.class;
         case "storagelocation":
@@ -202,6 +206,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "serviceAccountKey": return target.getConfiguration().getServiceAccountKey();
         case "startscheduler":
         case "startScheduler": return target.isStartScheduler();
+        case "storageclass":
+        case "storageClass": return target.getConfiguration().getStorageClass();
         case "storageclient":
         case "storageClient": return target.getConfiguration().getStorageClient();
         case "storagelocation":
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
index a243bfb..31332e9 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
@@ -20,13 +20,14 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(32);
+        Set<String> props = new HashSet<>(33);
         props.add("backoffMultiplier");
         props.add("bucketName");
         props.add("destinationBucket");
         props.add("storageLocation");
         props.add("initialDelay");
         props.add("scheduler");
+        props.add("storageClass");
         props.add("bridgeErrorHandler");
         props.add("useFixedDelay");
         props.add("runLoggingLevel");
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index f8578d8..9f6761f 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -24,30 +24,32 @@
   "componentProperties": {
     "autoCreateBucket": { "kind": "property", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
-    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key" },
-    "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
+    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
+    "storageClass": { "kind": "property", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when creat [...]
+    "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The storage client" },
     "storageLocation": { "kind": "property", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new  [...]
     "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 [...]
     "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. Th [...]
     "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRe [...]
-    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body  [...]
+    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body. [...]
     "includeFolders": { "kind": "property", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is f [...]
     "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after they [...]
     "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 [...]
-    "objectName": { "kind": "property", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Object name" },
+    "objectName": { "kind": "property", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Object name inside the bucket" },
     "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Googl [...]
     "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 [...]
   },
   "properties": {
-    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Bucket name" },
+    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Bucket name or ARN" },
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
-    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key" },
-    "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
+    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
+    "storageClass": { "kind": "parameter", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when crea [...]
+    "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The storage client" },
     "storageLocation": { "kind": "parameter", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new [...]
     "bridgeErrorHandler": { "kind": "parameter", "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 m [...]
     "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. T [...]
     "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterR [...]
-    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body [...]
+    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body [...]
     "includeFolders": { "kind": "parameter", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is  [...]
     "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after the [...]
     "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
@@ -55,7 +57,7 @@
     "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." },
     "pollStrategy": { "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation  [...]
     "lazyStartProducer": { "kind": "parameter", "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 sta [...]
-    "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Object name" },
+    "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Object name inside the bucket" },
     "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Goog [...]
     "backoffErrorThreshold": { "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
     "backoffIdleThreshold": { "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index b40cd70..8e5250c 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -47,16 +47,11 @@ String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/D
 
 Or by providing the path to the GCP credentials file location:
 
-[source,text]
---------------------------------------------------------
-export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
---------------------------------------------------------
-
-or for windows:
+Provide authentication credentials to your application code by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS` :
 
 [source,text]
 --------------------------------------------------------
-$Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
+export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
 
@@ -67,8 +62,8 @@ $Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 google-storage://bucketNameOrArn?[options]
 --------------------------------------------------------
 
-The bucket will be created if it don't already exists. +
- You can append query options to the URI in the following format,
+By default the bucket will be created if it don't already exists. +
+You can append query options to the URI in the following format,
 ?options=value&option2=value&...
 
 For example in order to read file `hello.txt` from bucket `myCamelBucket`, use the following snippet:
@@ -83,7 +78,7 @@ from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-k
 == URI Options
 
 // component options: START
-The Google Storage component supports 15 options, which are listed below.
+The Google Storage component supports 16 options, which are listed below.
 
 
 
@@ -92,17 +87,18 @@ The Google Storage component supports 15 options, which are listed below.
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
-| *serviceAccountKey* (common) | Service account key |  | String
-| *storageClient* (common) | Set strage client |  | Storage
+| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
+| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
+| *storageClient* (common) | The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
 | *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | Object name |  | String
+| *objectName* (producer) | The Object name inside the bucket |  | String
 | *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
@@ -123,24 +119,25 @@ with the following path and query parameters:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *bucketName* | *Required* Bucket name |  | String
+| *bucketName* | *Required* Bucket name or ARN |  | String
 |===
 
 
-=== Query Parameters (31 parameters):
+=== Query Parameters (32 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *serviceAccountKey* (common) | Service account key |  | String
-| *storageClient* (common) | Set strage client |  | Storage
+| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
+| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
+| *storageClient* (common) | The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
 | *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
@@ -148,7 +145,7 @@ with the following path and query parameters:
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | Object name |  | String
+| *objectName* (producer) | The Object name inside the bucket |  | String
 | *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
index e058a5a..737aeab 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.google.storage;
 
 import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageClass;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
@@ -26,24 +27,28 @@ import org.apache.camel.spi.UriPath;
 @UriParams
 public class GoogleCloudStorageComponentConfiguration implements Cloneable {
 
-    @UriPath(label = "common", description = "Bucket name")
+    @UriPath(label = "common", description = "Bucket name or ARN")
     @Metadata(required = true)
     private String bucketName;
 
-    @UriParam(label = "common", description = "Service account key")
+    @UriParam(label = "common", description = "Service account key to authenticate an application as a service account")
     private String serviceAccountKey;
 
     @UriParam(label = "producer",
               enums = "copyObject,listObjects,deleteObject,deleteBucket,listBuckets,getObject,createDownloadLink")
     private GoogleCloudStorageComponentOperations operation;
 
-    @UriParam(label = "producer", description = "Object name")
+    @UriParam(label = "producer", description = "The Object name inside the bucket")
     private String objectName;
 
     @UriParam(label = "common", defaultValue = "US-EAST1",
               description = "The Cloud Storage location to use when creating the new buckets")
     private String storageLocation;
 
+    @UriParam(label = "common", defaultValue = "STANDARD",
+              description = "The Cloud Storage class to use when creating the new buckets")
+    private StorageClass storageClass = StorageClass.STANDARD;
+
     @UriParam(label = "common", defaultValue = "true")
     private boolean autoCreateBucket = true;
 
@@ -94,16 +99,12 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     }
 
     /**
-     * The bjectName (the file insisde the bucket)
+     * The ObjectName (the file insisde the bucket)
      */
     public void setObjectName(String objectName) {
         this.objectName = objectName;
     }
 
-    public Storage getStorageClient() {
-        return storageClient;
-    }
-
     public String getStorageLocation() {
         return storageLocation;
     }
@@ -116,8 +117,25 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
         this.storageLocation = storageLocation;
     }
 
+    public StorageClass getStorageClass() {
+        return storageClass;
+    }
+
+    /**
+     * The Cloud Storage class to use when creating the new buckets
+     * 
+     * @param storageClass
+     */
+    public void setStorageClass(StorageClass storageClass) {
+        this.storageClass = storageClass;
+    }
+
+    public Storage getStorageClient() {
+        return storageClient;
+    }
+
     /**
-     * Set strage client
+     * The storage client
      * 
      * @param storageClient
      */
@@ -200,8 +218,8 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     }
 
     /**
-     * If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream
-     * will be put raw into the body and the headers will be set with the object metadata.
+     * If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put
+     * raw into the body and the headers will be set with the object metadata.
      */
     public void setIncludeBody(boolean includeBody) {
         this.includeBody = includeBody;
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 011430d..677cd75 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -53,9 +53,6 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
 
     private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageEndpoint.class);
 
-    private static final String DEFAULT_LOCATION = "US-EAST1";
-    private static final StorageClass DEFAULT_STORAGE_CLASS = StorageClass.STANDARD;
-
     @UriParam
     private GoogleCloudStorageComponentConfiguration configuration;
 
@@ -98,11 +95,11 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
                     return;
                 } else {
                     // creates the new bucket because it doesn't exist yet
-                    final String location = configuration.getStorageLocation() != null
-                            ? configuration.getStorageLocation() : DEFAULT_LOCATION;
+                    final String location = configuration.getStorageLocation();
+                    final StorageClass storageClass = configuration.getStorageClass();
 
                     Builder bucketBuilder = BucketInfo.newBuilder(configuration.getBucketName())
-                            .setStorageClass(DEFAULT_STORAGE_CLASS)
+                            .setStorageClass(storageClass)
                             .setLocation(location);
                     BucketInfo bucketInfo = bucketBuilder.build();
                     bucket = storageClient.create(bucketInfo);
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index 51b4ad9..afcec5a 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -85,7 +85,8 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * Service account key.
+         * Service account key to authenticate an application as a service
+         * account.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
@@ -100,7 +101,24 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * Set strage client.
+         * The Cloud Storage class to use when creating the new buckets.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.google.cloud.storage.StorageClass&lt;/code&gt; type.
+         * 
+         * Default: STANDARD
+         * Group: common
+         * 
+         * @param storageClass the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder storageClass(
+                com.google.cloud.storage.StorageClass storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * The storage client.
          * 
          * The option is a:
          * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
@@ -190,8 +208,8 @@ public interface GoogleStorageComponentBuilderFactory {
         }
         /**
          * If it is true, the Object exchange will be consumed and put into the
-         * body and closed. If false the Object stream will be put raw into the
-         * body and the headers will be set with the object metadata.
+         * body. If false the Object stream will be put raw into the body and
+         * the headers will be set with the object metadata.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
@@ -268,7 +286,7 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * Object name.
+         * The Object name inside the bucket.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
@@ -346,6 +364,7 @@ public interface GoogleStorageComponentBuilderFactory {
             case "autoCreateBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setAutoCreateBucket((boolean) value); return true;
             case "configuration": ((GoogleCloudStorageComponent) component).setConfiguration((org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration) value); return true;
             case "serviceAccountKey": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setServiceAccountKey((java.lang.String) value); return true;
+            case "storageClass": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageClass((com.google.cloud.storage.StorageClass) value); return true;
             case "storageClient": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageClient((com.google.cloud.storage.Storage) value); return true;
             case "storageLocation": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageLocation((java.lang.String) value); return true;
             case "bridgeErrorHandler": ((GoogleCloudStorageComponent) component).setBridgeErrorHandler((boolean) value); return true;
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index 24f0a94..72fbb64 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -6707,7 +6707,7 @@ public class StaticEndpointBuilders {
      * Syntax: <code>google-storage:bucketName</code>
      * 
      * Path parameter: bucketName (required)
-     * Bucket name
+     * Bucket name or ARN
      * 
      * @param path bucketName
      * @return the dsl builder
@@ -6728,7 +6728,7 @@ public class StaticEndpointBuilders {
      * Syntax: <code>google-storage:bucketName</code>
      * 
      * Path parameter: bucketName (required)
-     * Bucket name
+     * Bucket name or ARN
      * 
      * @param componentName to use a custom component name for the endpoint
      * instead of the default name
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index 104f697..f1eac32 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -81,7 +81,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Service account key.
+         * Service account key to authenticate an application as a service
+         * account.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
@@ -96,7 +97,41 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Set strage client.
+         * The Cloud Storage class to use when creating the new buckets.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.google.cloud.storage.StorageClass&lt;/code&gt; type.
+         * 
+         * Default: STANDARD
+         * Group: common
+         * 
+         * @param storageClass the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder storageClass(
+                Object storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * The Cloud Storage class to use when creating the new buckets.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;com.google.cloud.storage.StorageClass&lt;/code&gt; type.
+         * 
+         * Default: STANDARD
+         * Group: common
+         * 
+         * @param storageClass the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder storageClass(
+                String storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * The storage client.
          * 
          * The option is a:
          * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
@@ -112,7 +147,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Set strage client.
+         * The storage client.
          * 
          * The option will be converted to a
          * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
@@ -245,8 +280,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
         }
         /**
          * If it is true, the Object exchange will be consumed and put into the
-         * body and closed. If false the Object stream will be put raw into the
-         * body and the headers will be set with the object metadata.
+         * body. If false the Object stream will be put raw into the body and
+         * the headers will be set with the object metadata.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
@@ -263,8 +298,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
         }
         /**
          * If it is true, the Object exchange will be consumed and put into the
-         * body and closed. If false the Object stream will be put raw into the
-         * body and the headers will be set with the object metadata.
+         * body. If false the Object stream will be put raw into the body and
+         * the headers will be set with the object metadata.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -1043,7 +1078,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Service account key.
+         * Service account key to authenticate an application as a service
+         * account.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
@@ -1058,7 +1094,41 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Set strage client.
+         * The Cloud Storage class to use when creating the new buckets.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.google.cloud.storage.StorageClass&lt;/code&gt; type.
+         * 
+         * Default: STANDARD
+         * Group: common
+         * 
+         * @param storageClass the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder storageClass(
+                Object storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * The Cloud Storage class to use when creating the new buckets.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;com.google.cloud.storage.StorageClass&lt;/code&gt; type.
+         * 
+         * Default: STANDARD
+         * Group: common
+         * 
+         * @param storageClass the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder storageClass(
+                String storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * The storage client.
          * 
          * The option is a:
          * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
@@ -1074,7 +1144,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Set strage client.
+         * The storage client.
          * 
          * The option will be converted to a
          * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
@@ -1155,7 +1225,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Object name.
+         * The Object name inside the bucket.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
@@ -1258,7 +1328,8 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Service account key.
+         * Service account key to authenticate an application as a service
+         * account.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
@@ -1273,7 +1344,41 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Set strage client.
+         * The Cloud Storage class to use when creating the new buckets.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.google.cloud.storage.StorageClass&lt;/code&gt; type.
+         * 
+         * Default: STANDARD
+         * Group: common
+         * 
+         * @param storageClass the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder storageClass(
+                Object storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * The Cloud Storage class to use when creating the new buckets.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;com.google.cloud.storage.StorageClass&lt;/code&gt; type.
+         * 
+         * Default: STANDARD
+         * Group: common
+         * 
+         * @param storageClass the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder storageClass(
+                String storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * The storage client.
          * 
          * The option is a:
          * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
@@ -1289,7 +1394,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Set strage client.
+         * The storage client.
          * 
          * The option will be converted to a
          * &lt;code&gt;com.google.cloud.storage.Storage&lt;/code&gt; type.
@@ -1361,7 +1466,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * Syntax: <code>google-storage:bucketName</code>
          * 
          * Path parameter: bucketName (required)
-         * Bucket name
+         * Bucket name or ARN
          * 
          * @param path bucketName
          * @return the dsl builder
@@ -1381,7 +1486,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * Syntax: <code>google-storage:bucketName</code>
          * 
          * Path parameter: bucketName (required)
-         * Bucket name
+         * Bucket name or ARN
          * 
          * @param componentName to use a custom component name for the endpoint
          * instead of the default name
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index bcc8d78..9b83c19 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -49,16 +49,11 @@ String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/D
 
 Or by providing the path to the GCP credentials file location:
 
-[source,text]
---------------------------------------------------------
-export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
---------------------------------------------------------
-
-or for windows:
+Provide authentication credentials to your application code by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS` :
 
 [source,text]
 --------------------------------------------------------
-$Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
+export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
 
@@ -69,15 +64,15 @@ $Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 google-storage://bucketNameOrArn?[options]
 --------------------------------------------------------
 
-The bucket will be created if it don't already exists. +
- You can append query options to the URI in the following format,
+By default the bucket will be created if it don't already exists. +
+You can append query options to the URI in the following format,
 ?options=value&option2=value&...
 
-For example in order to read file `hello.txt` from bucket `helloBucket`, use the following snippet:
+For example in order to read file `hello.txt` from bucket `myCamelBucket`, use the following snippet:
 
 [source,java]
 --------------------------------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&prefix=hello.txt")
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&objectName=hello.txt")
   .to("file:/var/downloaded");
 --------------------------------------------------------------------------------
 
@@ -85,7 +80,7 @@ from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-k
 == URI Options
 
 // component options: START
-The Google Storage component supports 15 options, which are listed below.
+The Google Storage component supports 16 options, which are listed below.
 
 
 
@@ -94,17 +89,18 @@ The Google Storage component supports 15 options, which are listed below.
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
-| *serviceAccountKey* (common) | Service account key |  | String
-| *storageClient* (common) | Set strage client |  | Storage
+| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
+| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
+| *storageClient* (common) | The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
 | *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | Object name |  | String
+| *objectName* (producer) | The Object name inside the bucket |  | String
 | *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
@@ -125,24 +121,25 @@ with the following path and query parameters:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *bucketName* | *Required* Bucket name |  | String
+| *bucketName* | *Required* Bucket name or ARN |  | String
 |===
 
 
-=== Query Parameters (31 parameters):
+=== Query Parameters (32 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *serviceAccountKey* (common) | Service account key |  | String
-| *storageClient* (common) | Set strage client |  | Storage
+| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
+| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
+| *storageClient* (common) | The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
 | *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
@@ -150,7 +147,7 @@ with the following path and query parameters:
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | Object name |  | String
+| *objectName* (producer) | The Object name inside the bucket |  | String
 | *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int


[camel] 12/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8978ecb382523588512810abf16ae8c81366df70
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sat Feb 13 18:57:39 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../camel/catalog/docs/google-storage-component.adoc  | 15 ++++++++-------
 .../component/google/storage/google-storage.json      |  2 +-
 .../src/main/docs/google-storage-component.adoc       | 19 ++++++++++---------
 .../google/storage/GoogleCloudStorageEndpoint.java    |  2 +-
 .../builder/component/ComponentsBuilderFactory.java   |  2 +-
 .../dsl/GoogleStorageComponentBuilderFactory.java     |  2 +-
 .../src/generated/resources/metadata.json             |  2 +-
 .../builder/endpoint/StaticEndpointBuilders.java      |  4 ++--
 .../dsl/GoogleCloudStorageEndpointBuilderFactory.java |  4 ++--
 .../modules/ROOT/pages/google-storage-component.adoc  | 15 ++++++++-------
 10 files changed, 35 insertions(+), 32 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index aafb49a..7e9d166 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -3,7 +3,7 @@
 :docTitle: Google Storage
 :artifactId: camel-google-storage
 :description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
-:since: 3.7
+:since: 3.8
 :supportLevel: Preview
 :component-header: Both producer and consumer are supported
 include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
@@ -39,7 +39,13 @@ Google Storage component authentication is targeted for use with the GCP Service
 For more information please refer to https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication[Google Storage Auth Guide].
 
 When you have the **service account key** you can provide authentication credentials to your application code.
-Google security credentials can be set explicitly by providing the path to the GCP credentials file location.
+Google security credentials can be set through the component endpoint:
+[source,text]
+--------------------------------------------------------
+String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
+--------------------------------------------------------
+
+Or by providing the path to the GCP credentials file location:
 
 [source,text]
 --------------------------------------------------------
@@ -53,11 +59,6 @@ or for windows:
 $Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-or directly through the component endpoint
-[source,text]
---------------------------------------------------------
-String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
---------------------------------------------------------
 
 == URI Format
 
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index 4f4f89e..f8578d8 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -5,7 +5,7 @@
     "title": "Google Storage",
     "description": "Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.",
     "deprecated": false,
-    "firstVersion": "3.7.0",
+    "firstVersion": "3.8.0",
     "label": "cloud",
     "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponent",
     "supportLevel": "Preview",
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index aafb49a..b40cd70 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -3,7 +3,7 @@
 :docTitle: Google Storage
 :artifactId: camel-google-storage
 :description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
-:since: 3.7
+:since: 3.8
 :supportLevel: Preview
 :component-header: Both producer and consumer are supported
 include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
@@ -39,7 +39,13 @@ Google Storage component authentication is targeted for use with the GCP Service
 For more information please refer to https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication[Google Storage Auth Guide].
 
 When you have the **service account key** you can provide authentication credentials to your application code.
-Google security credentials can be set explicitly by providing the path to the GCP credentials file location.
+Google security credentials can be set through the component endpoint:
+[source,text]
+--------------------------------------------------------
+String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
+--------------------------------------------------------
+
+Or by providing the path to the GCP credentials file location:
 
 [source,text]
 --------------------------------------------------------
@@ -53,11 +59,6 @@ or for windows:
 $Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-or directly through the component endpoint
-[source,text]
---------------------------------------------------------
-String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
---------------------------------------------------------
 
 == URI Format
 
@@ -70,11 +71,11 @@ The bucket will be created if it don't already exists. +
  You can append query options to the URI in the following format,
 ?options=value&option2=value&...
 
-For example in order to read file `hello.txt` from bucket `helloBucket`, use the following snippet:
+For example in order to read file `hello.txt` from bucket `myCamelBucket`, use the following snippet:
 
 [source,java]
 --------------------------------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&prefix=hello.txt")
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&objectName=hello.txt")
   .to("file:/var/downloaded");
 --------------------------------------------------------------------------------
 
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 43e0d95..011430d 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -46,7 +46,7 @@ import org.slf4j.LoggerFactory;
  * behavior of Consumer and Producer.
  * 
  */
-@UriEndpoint(firstVersion = "3.7.0", scheme = "google-storage", title = "Google Storage", syntax = "google-storage:bucketName",
+@UriEndpoint(firstVersion = "3.8.0", scheme = "google-storage", title = "Google Storage", syntax = "google-storage:bucketName",
              category = {
                      Category.CLOUD })
 public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index 5f529a4..44cfc6f 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -1989,7 +1989,7 @@ public interface ComponentsBuilderFactory {
      * google-cloud-storage library.
      * 
      * Category: cloud
-     * Since: 3.7
+     * Since: 3.8
      * Maven coordinates: org.apache.camel:camel-google-storage
      * 
      * @return the dsl builder
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index 4150c6e..51b4ad9 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -37,7 +37,7 @@ public interface GoogleStorageComponentBuilderFactory {
      * google-cloud-storage library.
      * 
      * Category: cloud
-     * Since: 3.7
+     * Since: 3.8
      * Maven coordinates: org.apache.camel:camel-google-storage
      * 
      * @return the dsl builder
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index 7406e1a..7f7b939 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -3239,7 +3239,7 @@
     "title": "Google Storage",
     "description": "Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.",
     "deprecated": false,
-    "firstVersion": "3.7.0",
+    "firstVersion": "3.8.0",
     "label": "cloud",
     "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponent",
     "supportLevel": "Preview",
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index 2c54d0a..24f0a94 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -6701,7 +6701,7 @@ public class StaticEndpointBuilders {
      * google-cloud-storage library.
      * 
      * Category: cloud
-     * Since: 3.7
+     * Since: 3.8
      * Maven coordinates: org.apache.camel:camel-google-storage
      * 
      * Syntax: <code>google-storage:bucketName</code>
@@ -6722,7 +6722,7 @@ public class StaticEndpointBuilders {
      * google-cloud-storage library.
      * 
      * Category: cloud
-     * Since: 3.7
+     * Since: 3.8
      * Maven coordinates: org.apache.camel:camel-google-storage
      * 
      * Syntax: <code>google-storage:bucketName</code>
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index 5fb83a7..104f697 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -1355,7 +1355,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * the google-cloud-storage library.
          * 
          * Category: cloud
-         * Since: 3.7
+         * Since: 3.8
          * Maven coordinates: org.apache.camel:camel-google-storage
          * 
          * Syntax: <code>google-storage:bucketName</code>
@@ -1375,7 +1375,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * the google-cloud-storage library.
          * 
          * Category: cloud
-         * Since: 3.7
+         * Since: 3.8
          * Maven coordinates: org.apache.camel:camel-google-storage
          * 
          * Syntax: <code>google-storage:bucketName</code>
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index 51c49ff..bcc8d78 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -5,7 +5,7 @@
 :docTitle: Google Storage
 :artifactId: camel-google-storage
 :description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
-:since: 3.7
+:since: 3.8
 :supportLevel: Preview
 :component-header: Both producer and consumer are supported
 include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
@@ -41,7 +41,13 @@ Google Storage component authentication is targeted for use with the GCP Service
 For more information please refer to https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication[Google Storage Auth Guide].
 
 When you have the **service account key** you can provide authentication credentials to your application code.
-Google security credentials can be set explicitly by providing the path to the GCP credentials file location.
+Google security credentials can be set through the component endpoint:
+[source,text]
+--------------------------------------------------------
+String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
+--------------------------------------------------------
+
+Or by providing the path to the GCP credentials file location:
 
 [source,text]
 --------------------------------------------------------
@@ -55,11 +61,6 @@ or for windows:
 $Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-or directly through the component endpoint
-[source,text]
---------------------------------------------------------
-String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
---------------------------------------------------------
 
 == URI Format
 


[camel] 17/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1dbbacf68cc2afec15d06bb51e007c828aa18d87
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sun Feb 14 20:20:54 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../storage/integration/ComplexIntegrationTest.java  | 16 ++++++++++++++++
 .../google/storage/localstorage/FakeStorageRpc.java  |  2 +-
 .../google/storage/unit/ConsumerLocalTest.java       | 20 ++++++++++++++++----
 .../storage/unit/GoogleCloudStorageBaseTest.java     | 16 ++++++++++++++++
 ...GoogleCloudStorageComponentConfigurationTest.java | 16 ++++++++++++++++
 .../google/storage/unit/ProducerLocalTest.java       | 16 ++++++++++++++++
 6 files changed, 81 insertions(+), 5 deletions(-)

diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
index 9470afc..c28e040 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage.integration;
 
 import java.io.ByteArrayInputStream;
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
index b2908e1..70153fd 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
@@ -113,7 +113,7 @@ class FakeStorageRpc extends StorageRpcTestBase {
         } catch (IOException e) {
             throw new StorageException(e);
         }
-        // TODO: crc, etc
+        //  crc, etc
         return object;
     }
 
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
index 184fedd..e728081 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage.unit;
 
 import org.apache.camel.EndpointInject;
@@ -6,13 +22,9 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class ConsumerLocalTest extends GoogleCloudStorageBaseTest {
 
-    private static final Logger LOG = LoggerFactory.getLogger(ConsumerLocalTest.class);
-
     @EndpointInject
     private ProducerTemplate template;
 
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
index 0bdf863..20fc4dc 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage.unit;
 
 import com.google.cloud.storage.Storage;
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
index 6bcee9c..d133208 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage.unit;
 
 import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
index 1c0d731..37aebc2 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage.unit;
 
 import java.io.ByteArrayInputStream;


[camel] 27/31: CAMEL-15964 - Added component to catalog and regen

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 528c8bad354789466e207870dd217961b09bdc9f
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 17 07:05:45 2021 +0100

    CAMEL-15964 - Added component to catalog and regen
---
 .../org/apache/camel/catalog/components.properties |  1 +
 .../camel/catalog/components/google-storage.json   | 77 ++++++++++++++++++++++
 .../org/apache/camel/catalog/docs.properties       |  1 +
 .../org/apache/camel/catalog/others.properties     |  1 +
 .../camel/catalog/others/google-storage.json       | 14 ++++
 .../services/org/apache/camel/component.properties |  7 ++
 .../org/apache/camel/component/google-storage      |  2 +
 .../builder/endpoint/EndpointBuilderFactory.java   | 62 ++++++++---------
 .../camel/builder/endpoint/EndpointBuilders.java   | 62 ++++++++---------
 docs/components/modules/ROOT/nav.adoc              |  1 +
 .../ROOT/pages/google-storage-component.adoc       |  2 +-
 11 files changed, 167 insertions(+), 63 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties
index 0a7eaab..66e4934 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties
@@ -143,6 +143,7 @@ google-mail-stream
 google-pubsub
 google-sheets
 google-sheets-stream
+google-storage
 gora
 grape
 graphql
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-storage.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-storage.json
new file mode 100644
index 0000000..e34e885
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-storage.json
@@ -0,0 +1,77 @@
+{
+  "component": {
+    "kind": "component",
+    "name": "google-storage",
+    "title": "Google Storage",
+    "description": "Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.",
+    "deprecated": false,
+    "firstVersion": "3.9.0",
+    "label": "cloud",
+    "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponent",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-storage",
+    "version": "3.9.0-SNAPSHOT",
+    "scheme": "google-storage",
+    "extendsScheme": "",
+    "syntax": "google-storage:bucketName",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false
+  },
+  "componentProperties": {
+    "autoCreateBucket": { "kind": "property", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
+    "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
+    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
+    "storageClass": { "kind": "property", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when creating the n [...]
+    "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The storage client" },
+    "storageLocation": { "kind": "property", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new buckets" },
+    "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 [...]
+    "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. The delete  [...]
+    "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRead is set [...]
+    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body. If false [...]
+    "includeFolders": { "kind": "property", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is false, the [...]
+    "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after they have bee [...]
+    "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 [...]
+    "objectName": { "kind": "property", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Object name inside the bucket" },
+    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudSto [...]
+    "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 [...]
+  },
+  "properties": {
+    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Bucket name or ARN" },
+    "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
+    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
+    "storageClass": { "kind": "parameter", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when creating the  [...]
+    "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The storage client" },
+    "storageLocation": { "kind": "parameter", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new buckets" },
+    "bridgeErrorHandler": { "kind": "parameter", "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 m [...]
+    "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. The delete [...]
+    "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRead is se [...]
+    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body. If fals [...]
+    "includeFolders": { "kind": "parameter", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is false, th [...]
+    "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after they have be [...]
+    "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
+    "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." },
+    "pollStrategy": { "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation  [...]
+    "lazyStartProducer": { "kind": "parameter", "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 sta [...]
+    "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Object name inside the bucket" },
+    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudSt [...]
+    "backoffErrorThreshold": { "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening agai [...]
+    "delay": { "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." },
+    "greedy": { "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." },
+    "initialDelay": { "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." },
+    "repeatCount": { "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." },
+    "runLoggingLevel": { "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the logging level  [...]
+    "scheduledExecutorService": { "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." },
+    "scheduler": { "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler." },
+    "startScheduler": { "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." },
+    "useFixedDelay": { "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
index 1ce8c2d..d260d11 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
@@ -196,6 +196,7 @@ google-mail-stream-component
 google-pubsub-component
 google-sheets-component
 google-sheets-stream-component
+google-storage-component
 google-summary
 gora-component
 grape-component
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
index aa9f1a3..243d7ec 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
@@ -6,6 +6,7 @@ csimple-joor
 cxf-transport
 elytron
 etcd3
+google-storage
 headersmap
 hystrix
 jasypt
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/google-storage.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/google-storage.json
new file mode 100644
index 0000000..596edc1
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/google-storage.json
@@ -0,0 +1,14 @@
+{
+  "other": {
+    "kind": "other",
+    "name": "google-storage",
+    "title": "Google Storage",
+    "description": "Camel Component for Google Cloud Platform Storage",
+    "deprecated": false,
+    "firstVersion": "3.9.0",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-storage",
+    "version": "3.9.0-SNAPSHOT"
+  }
+}
diff --git a/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/component.properties b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/component.properties
new file mode 100644
index 0000000..6c6e2a0
--- /dev/null
+++ b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/component.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+components=google-storage
+groupId=org.apache.camel
+artifactId=camel-google-storage
+version=3.9.0-SNAPSHOT
+projectName=Camel :: Google Storage
+projectDescription=Camel Component for Google Cloud Platform Storage
diff --git a/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/component/google-storage b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/component/google-storage
new file mode 100644
index 0000000..c3b7738
--- /dev/null
+++ b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/component/google-storage
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.google.storage.GoogleCloudStorageComponent
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
index 0f25de1..17b0fe0 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
@@ -28,12 +28,14 @@ import javax.annotation.Generated;
 @Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
 public interface EndpointBuilderFactory
         extends
+            org.apache.camel.builder.endpoint.dsl.AMQPEndpointBuilderFactory.AMQPBuilders,
+            org.apache.camel.builder.endpoint.dsl.AS2EndpointBuilderFactory.AS2Builders,
+            org.apache.camel.builder.endpoint.dsl.AWS2EC2EndpointBuilderFactory.AWS2EC2Builders,
+            org.apache.camel.builder.endpoint.dsl.AWS2S3EndpointBuilderFactory.AWS2S3Builders,
             org.apache.camel.builder.endpoint.dsl.ActiveMQEndpointBuilderFactory.ActiveMQBuilders,
             org.apache.camel.builder.endpoint.dsl.AhcEndpointBuilderFactory.AhcBuilders,
-            org.apache.camel.builder.endpoint.dsl.AMQPEndpointBuilderFactory.AMQPBuilders,
             org.apache.camel.builder.endpoint.dsl.ApnsEndpointBuilderFactory.ApnsBuilders,
             org.apache.camel.builder.endpoint.dsl.ArangoDbEndpointBuilderFactory.ArangoDbBuilders,
-            org.apache.camel.builder.endpoint.dsl.AS2EndpointBuilderFactory.AS2Builders,
             org.apache.camel.builder.endpoint.dsl.AsteriskEndpointBuilderFactory.AsteriskBuilders,
             org.apache.camel.builder.endpoint.dsl.Athena2EndpointBuilderFactory.Athena2Builders,
             org.apache.camel.builder.endpoint.dsl.AtlasMapEndpointBuilderFactory.AtlasMapBuilders,
@@ -47,17 +49,17 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.AtomixSetEndpointBuilderFactory.AtomixSetBuilders,
             org.apache.camel.builder.endpoint.dsl.AtomixValueEndpointBuilderFactory.AtomixValueBuilders,
             org.apache.camel.builder.endpoint.dsl.AvroEndpointBuilderFactory.AvroBuilders,
-            org.apache.camel.builder.endpoint.dsl.AWS2EC2EndpointBuilderFactory.AWS2EC2Builders,
-            org.apache.camel.builder.endpoint.dsl.AWS2S3EndpointBuilderFactory.AWS2S3Builders,
             org.apache.camel.builder.endpoint.dsl.BeanEndpointBuilderFactory.BeanBuilders,
-            org.apache.camel.builder.endpoint.dsl.BeanstalkEndpointBuilderFactory.BeanstalkBuilders,
             org.apache.camel.builder.endpoint.dsl.BeanValidatorEndpointBuilderFactory.BeanValidatorBuilders,
+            org.apache.camel.builder.endpoint.dsl.BeanstalkEndpointBuilderFactory.BeanstalkBuilders,
             org.apache.camel.builder.endpoint.dsl.BlobEndpointBuilderFactory.BlobBuilders,
             org.apache.camel.builder.endpoint.dsl.BlobServiceEndpointBuilderFactory.BlobServiceBuilders,
             org.apache.camel.builder.endpoint.dsl.BonitaEndpointBuilderFactory.BonitaBuilders,
             org.apache.camel.builder.endpoint.dsl.BoxEndpointBuilderFactory.BoxBuilders,
             org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory.BraintreeBuilders,
             org.apache.camel.builder.endpoint.dsl.BrowseEndpointBuilderFactory.BrowseBuilders,
+            org.apache.camel.builder.endpoint.dsl.CMEndpointBuilderFactory.CMBuilders,
+            org.apache.camel.builder.endpoint.dsl.CMISEndpointBuilderFactory.CMISBuilders,
             org.apache.camel.builder.endpoint.dsl.CaffeineCacheEndpointBuilderFactory.CaffeineCacheBuilders,
             org.apache.camel.builder.endpoint.dsl.CaffeineLoadCacheEndpointBuilderFactory.CaffeineLoadCacheBuilders,
             org.apache.camel.builder.endpoint.dsl.CassandraEndpointBuilderFactory.CassandraBuilders,
@@ -66,21 +68,20 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.CinderEndpointBuilderFactory.CinderBuilders,
             org.apache.camel.builder.endpoint.dsl.ClassEndpointBuilderFactory.ClassBuilders,
             org.apache.camel.builder.endpoint.dsl.ClientEndpointBuilderFactory.ClientBuilders,
-            org.apache.camel.builder.endpoint.dsl.CMEndpointBuilderFactory.CMBuilders,
-            org.apache.camel.builder.endpoint.dsl.CMISEndpointBuilderFactory.CMISBuilders,
             org.apache.camel.builder.endpoint.dsl.CoAPEndpointBuilderFactory.CoAPBuilders,
             org.apache.camel.builder.endpoint.dsl.CometdEndpointBuilderFactory.CometdBuilders,
             org.apache.camel.builder.endpoint.dsl.ConsulEndpointBuilderFactory.ConsulBuilders,
             org.apache.camel.builder.endpoint.dsl.ControlBusEndpointBuilderFactory.ControlBusBuilders,
             org.apache.camel.builder.endpoint.dsl.CordaEndpointBuilderFactory.CordaBuilders,
-            org.apache.camel.builder.endpoint.dsl.CouchbaseEndpointBuilderFactory.CouchbaseBuilders,
             org.apache.camel.builder.endpoint.dsl.CouchDbEndpointBuilderFactory.CouchDbBuilders,
+            org.apache.camel.builder.endpoint.dsl.CouchbaseEndpointBuilderFactory.CouchbaseBuilders,
             org.apache.camel.builder.endpoint.dsl.CronEndpointBuilderFactory.CronBuilders,
             org.apache.camel.builder.endpoint.dsl.CryptoCmsEndpointBuilderFactory.CryptoCmsBuilders,
             org.apache.camel.builder.endpoint.dsl.Cw2EndpointBuilderFactory.Cw2Builders,
             org.apache.camel.builder.endpoint.dsl.CwEndpointBuilderFactory.CwBuilders,
             org.apache.camel.builder.endpoint.dsl.CxfEndpointBuilderFactory.CxfBuilders,
             org.apache.camel.builder.endpoint.dsl.CxfRsEndpointBuilderFactory.CxfRsBuilders,
+            org.apache.camel.builder.endpoint.dsl.DJLEndpointBuilderFactory.DJLBuilders,
             org.apache.camel.builder.endpoint.dsl.DataFormatEndpointBuilderFactory.DataFormatBuilders,
             org.apache.camel.builder.endpoint.dsl.DataLakeEndpointBuilderFactory.DataLakeBuilders,
             org.apache.camel.builder.endpoint.dsl.DataSetEndpointBuilderFactory.DataSetBuilders,
@@ -99,7 +100,6 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.DirectVmEndpointBuilderFactory.DirectVmBuilders,
             org.apache.camel.builder.endpoint.dsl.DisruptorEndpointBuilderFactory.DisruptorBuilders,
             org.apache.camel.builder.endpoint.dsl.DisruptorVmEndpointBuilderFactory.DisruptorVmBuilders,
-            org.apache.camel.builder.endpoint.dsl.DJLEndpointBuilderFactory.DJLBuilders,
             org.apache.camel.builder.endpoint.dsl.DnsEndpointBuilderFactory.DnsBuilders,
             org.apache.camel.builder.endpoint.dsl.DockerEndpointBuilderFactory.DockerBuilders,
             org.apache.camel.builder.endpoint.dsl.DozerEndpointBuilderFactory.DozerBuilders,
@@ -108,17 +108,17 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.EC2EndpointBuilderFactory.EC2Builders,
             org.apache.camel.builder.endpoint.dsl.ECS2EndpointBuilderFactory.ECS2Builders,
             org.apache.camel.builder.endpoint.dsl.ECSEndpointBuilderFactory.ECSBuilders,
-            org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory.EhcacheBuilders,
             org.apache.camel.builder.endpoint.dsl.EKS2EndpointBuilderFactory.EKS2Builders,
             org.apache.camel.builder.endpoint.dsl.EKSEndpointBuilderFactory.EKSBuilders,
+            org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory.EhcacheBuilders,
             org.apache.camel.builder.endpoint.dsl.ElasticsearchEndpointBuilderFactory.ElasticsearchBuilders,
             org.apache.camel.builder.endpoint.dsl.ElsqlEndpointBuilderFactory.ElsqlBuilders,
             org.apache.camel.builder.endpoint.dsl.EtcdKeysEndpointBuilderFactory.EtcdKeysBuilders,
             org.apache.camel.builder.endpoint.dsl.EtcdStatsEndpointBuilderFactory.EtcdStatsBuilders,
             org.apache.camel.builder.endpoint.dsl.EtcdWatchEndpointBuilderFactory.EtcdWatchBuilders,
-            org.apache.camel.builder.endpoint.dsl.EventbridgeEndpointBuilderFactory.EventbridgeBuilders,
             org.apache.camel.builder.endpoint.dsl.EventEndpointBuilderFactory.EventBuilders,
             org.apache.camel.builder.endpoint.dsl.EventHubsEndpointBuilderFactory.EventHubsBuilders,
+            org.apache.camel.builder.endpoint.dsl.EventbridgeEndpointBuilderFactory.EventbridgeBuilders,
             org.apache.camel.builder.endpoint.dsl.ExecEndpointBuilderFactory.ExecBuilders,
             org.apache.camel.builder.endpoint.dsl.FacebookEndpointBuilderFactory.FacebookBuilders,
             org.apache.camel.builder.endpoint.dsl.FhirEndpointBuilderFactory.FhirBuilders,
@@ -152,6 +152,7 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.GridFsEndpointBuilderFactory.GridFsBuilders,
             org.apache.camel.builder.endpoint.dsl.GrpcEndpointBuilderFactory.GrpcBuilders,
             org.apache.camel.builder.endpoint.dsl.GuavaEventBusEndpointBuilderFactory.GuavaEventBusBuilders,
+            org.apache.camel.builder.endpoint.dsl.HBaseEndpointBuilderFactory.HBaseBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastAtomicnumberEndpointBuilderFactory.HazelcastAtomicnumberBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastInstanceEndpointBuilderFactory.HazelcastInstanceBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastListEndpointBuilderFactory.HazelcastListBuilders,
@@ -163,11 +164,12 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.HazelcastSedaEndpointBuilderFactory.HazelcastSedaBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastSetEndpointBuilderFactory.HazelcastSetBuilders,
             org.apache.camel.builder.endpoint.dsl.HazelcastTopicEndpointBuilderFactory.HazelcastTopicBuilders,
-            org.apache.camel.builder.endpoint.dsl.HBaseEndpointBuilderFactory.HBaseBuilders,
             org.apache.camel.builder.endpoint.dsl.HdfsEndpointBuilderFactory.HdfsBuilders,
             org.apache.camel.builder.endpoint.dsl.HttpEndpointBuilderFactory.HttpBuilders,
             org.apache.camel.builder.endpoint.dsl.IAM2EndpointBuilderFactory.IAM2Builders,
             org.apache.camel.builder.endpoint.dsl.IAMEndpointBuilderFactory.IAMBuilders,
+            org.apache.camel.builder.endpoint.dsl.IOTAEndpointBuilderFactory.IOTABuilders,
+            org.apache.camel.builder.endpoint.dsl.IPFSEndpointBuilderFactory.IPFSBuilders,
             org.apache.camel.builder.endpoint.dsl.IgniteCacheEndpointBuilderFactory.IgniteCacheBuilders,
             org.apache.camel.builder.endpoint.dsl.IgniteComputeEndpointBuilderFactory.IgniteComputeBuilders,
             org.apache.camel.builder.endpoint.dsl.IgniteEventsEndpointBuilderFactory.IgniteEventsBuilders,
@@ -178,30 +180,30 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.InfinispanEmbeddedEndpointBuilderFactory.InfinispanEmbeddedBuilders,
             org.apache.camel.builder.endpoint.dsl.InfinispanRemoteEndpointBuilderFactory.InfinispanRemoteBuilders,
             org.apache.camel.builder.endpoint.dsl.InfluxDbEndpointBuilderFactory.InfluxDbBuilders,
-            org.apache.camel.builder.endpoint.dsl.IOTAEndpointBuilderFactory.IOTABuilders,
-            org.apache.camel.builder.endpoint.dsl.IPFSEndpointBuilderFactory.IPFSBuilders,
             org.apache.camel.builder.endpoint.dsl.IrcEndpointBuilderFactory.IrcBuilders,
             org.apache.camel.builder.endpoint.dsl.IronMQEndpointBuilderFactory.IronMQBuilders,
             org.apache.camel.builder.endpoint.dsl.JBPMEndpointBuilderFactory.JBPMBuilders,
             org.apache.camel.builder.endpoint.dsl.JCacheEndpointBuilderFactory.JCacheBuilders,
+            org.apache.camel.builder.endpoint.dsl.JGroupsEndpointBuilderFactory.JGroupsBuilders,
+            org.apache.camel.builder.endpoint.dsl.JGroupsRaftEndpointBuilderFactory.JGroupsRaftBuilders,
+            org.apache.camel.builder.endpoint.dsl.JMXEndpointBuilderFactory.JMXBuilders,
+            org.apache.camel.builder.endpoint.dsl.JSR356WebSocketEndpointBuilderFactory.JSR356WebSocketBuilders,
             org.apache.camel.builder.endpoint.dsl.JcloudsEndpointBuilderFactory.JcloudsBuilders,
             org.apache.camel.builder.endpoint.dsl.JcrEndpointBuilderFactory.JcrBuilders,
             org.apache.camel.builder.endpoint.dsl.JdbcEndpointBuilderFactory.JdbcBuilders,
             org.apache.camel.builder.endpoint.dsl.JettyHttpEndpointBuilderFactory.JettyHttpBuilders,
-            org.apache.camel.builder.endpoint.dsl.JGroupsEndpointBuilderFactory.JGroupsBuilders,
-            org.apache.camel.builder.endpoint.dsl.JGroupsRaftEndpointBuilderFactory.JGroupsRaftBuilders,
             org.apache.camel.builder.endpoint.dsl.JingEndpointBuilderFactory.JingBuilders,
             org.apache.camel.builder.endpoint.dsl.JiraEndpointBuilderFactory.JiraBuilders,
             org.apache.camel.builder.endpoint.dsl.JmsEndpointBuilderFactory.JmsBuilders,
-            org.apache.camel.builder.endpoint.dsl.JMXEndpointBuilderFactory.JMXBuilders,
             org.apache.camel.builder.endpoint.dsl.JoltEndpointBuilderFactory.JoltBuilders,
             org.apache.camel.builder.endpoint.dsl.JooqEndpointBuilderFactory.JooqBuilders,
             org.apache.camel.builder.endpoint.dsl.JpaEndpointBuilderFactory.JpaBuilders,
             org.apache.camel.builder.endpoint.dsl.JsltEndpointBuilderFactory.JsltBuilders,
-            org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory.JsonataBuilders,
             org.apache.camel.builder.endpoint.dsl.JsonValidatorEndpointBuilderFactory.JsonValidatorBuilders,
-            org.apache.camel.builder.endpoint.dsl.JSR356WebSocketEndpointBuilderFactory.JSR356WebSocketBuilders,
+            org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory.JsonataBuilders,
             org.apache.camel.builder.endpoint.dsl.Jt400EndpointBuilderFactory.Jt400Builders,
+            org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory.KMS2Builders,
+            org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory.KMSBuilders,
             org.apache.camel.builder.endpoint.dsl.KafkaEndpointBuilderFactory.KafkaBuilders,
             org.apache.camel.builder.endpoint.dsl.KameletEndpointBuilderFactory.KameletBuilders,
             org.apache.camel.builder.endpoint.dsl.KeystoneEndpointBuilderFactory.KeystoneBuilders,
@@ -209,8 +211,6 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.KinesisEndpointBuilderFactory.KinesisBuilders,
             org.apache.camel.builder.endpoint.dsl.KinesisFirehose2EndpointBuilderFactory.KinesisFirehose2Builders,
             org.apache.camel.builder.endpoint.dsl.KinesisFirehoseEndpointBuilderFactory.KinesisFirehoseBuilders,
-            org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory.KMS2Builders,
-            org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory.KMSBuilders,
             org.apache.camel.builder.endpoint.dsl.KubernetesConfigMapsEndpointBuilderFactory.KubernetesConfigMapsBuilders,
             org.apache.camel.builder.endpoint.dsl.KubernetesCustomResourcesEndpointBuilderFactory.KubernetesCustomResourcesBuilders,
             org.apache.camel.builder.endpoint.dsl.KubernetesDeploymentsEndpointBuilderFactory.KubernetesDeploymentsBuilders,
@@ -235,11 +235,15 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.LogEndpointBuilderFactory.LogBuilders,
             org.apache.camel.builder.endpoint.dsl.LuceneEndpointBuilderFactory.LuceneBuilders,
             org.apache.camel.builder.endpoint.dsl.LumberjackEndpointBuilderFactory.LumberjackBuilders,
+            org.apache.camel.builder.endpoint.dsl.MQ2EndpointBuilderFactory.MQ2Builders,
+            org.apache.camel.builder.endpoint.dsl.MQEndpointBuilderFactory.MQBuilders,
+            org.apache.camel.builder.endpoint.dsl.MSK2EndpointBuilderFactory.MSK2Builders,
+            org.apache.camel.builder.endpoint.dsl.MSKEndpointBuilderFactory.MSKBuilders,
             org.apache.camel.builder.endpoint.dsl.MailEndpointBuilderFactory.MailBuilders,
             org.apache.camel.builder.endpoint.dsl.MasterEndpointBuilderFactory.MasterBuilders,
             org.apache.camel.builder.endpoint.dsl.MetricsEndpointBuilderFactory.MetricsBuilders,
-            org.apache.camel.builder.endpoint.dsl.MicrometerEndpointBuilderFactory.MicrometerBuilders,
             org.apache.camel.builder.endpoint.dsl.MicroProfileMetricsEndpointBuilderFactory.MicroProfileMetricsBuilders,
+            org.apache.camel.builder.endpoint.dsl.MicrometerEndpointBuilderFactory.MicrometerBuilders,
             org.apache.camel.builder.endpoint.dsl.MiloClientEndpointBuilderFactory.MiloClientBuilders,
             org.apache.camel.builder.endpoint.dsl.MiloServerEndpointBuilderFactory.MiloServerBuilders,
             org.apache.camel.builder.endpoint.dsl.MinaEndpointBuilderFactory.MinaBuilders,
@@ -247,10 +251,6 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.MllpEndpointBuilderFactory.MllpBuilders,
             org.apache.camel.builder.endpoint.dsl.MockEndpointBuilderFactory.MockBuilders,
             org.apache.camel.builder.endpoint.dsl.MongoDbEndpointBuilderFactory.MongoDbBuilders,
-            org.apache.camel.builder.endpoint.dsl.MQ2EndpointBuilderFactory.MQ2Builders,
-            org.apache.camel.builder.endpoint.dsl.MQEndpointBuilderFactory.MQBuilders,
-            org.apache.camel.builder.endpoint.dsl.MSK2EndpointBuilderFactory.MSK2Builders,
-            org.apache.camel.builder.endpoint.dsl.MSKEndpointBuilderFactory.MSKBuilders,
             org.apache.camel.builder.endpoint.dsl.MsvEndpointBuilderFactory.MsvBuilders,
             org.apache.camel.builder.endpoint.dsl.MustacheEndpointBuilderFactory.MustacheBuilders,
             org.apache.camel.builder.endpoint.dsl.MvelEndpointBuilderFactory.MvelBuilders,
@@ -258,9 +258,9 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.MyBatisEndpointBuilderFactory.MyBatisBuilders,
             org.apache.camel.builder.endpoint.dsl.NagiosEndpointBuilderFactory.NagiosBuilders,
             org.apache.camel.builder.endpoint.dsl.NatsEndpointBuilderFactory.NatsBuilders,
+            org.apache.camel.builder.endpoint.dsl.NetWeaverEndpointBuilderFactory.NetWeaverBuilders,
             org.apache.camel.builder.endpoint.dsl.NettyEndpointBuilderFactory.NettyBuilders,
             org.apache.camel.builder.endpoint.dsl.NettyHttpEndpointBuilderFactory.NettyHttpBuilders,
-            org.apache.camel.builder.endpoint.dsl.NetWeaverEndpointBuilderFactory.NetWeaverBuilders,
             org.apache.camel.builder.endpoint.dsl.NeutronEndpointBuilderFactory.NeutronBuilders,
             org.apache.camel.builder.endpoint.dsl.NitriteEndpointBuilderFactory.NitriteBuilders,
             org.apache.camel.builder.endpoint.dsl.NovaEndpointBuilderFactory.NovaBuilders,
@@ -289,13 +289,15 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.RedisEndpointBuilderFactory.RedisBuilders,
             org.apache.camel.builder.endpoint.dsl.RefEndpointBuilderFactory.RefBuilders,
             org.apache.camel.builder.endpoint.dsl.RestApiEndpointBuilderFactory.RestApiBuilders,
-            org.apache.camel.builder.endpoint.dsl.ResteasyEndpointBuilderFactory.ResteasyBuilders,
             org.apache.camel.builder.endpoint.dsl.RestEndpointBuilderFactory.RestBuilders,
             org.apache.camel.builder.endpoint.dsl.RestOpenApiEndpointBuilderFactory.RestOpenApiBuilders,
             org.apache.camel.builder.endpoint.dsl.RestSwaggerEndpointBuilderFactory.RestSwaggerBuilders,
+            org.apache.camel.builder.endpoint.dsl.ResteasyEndpointBuilderFactory.ResteasyBuilders,
             org.apache.camel.builder.endpoint.dsl.RobotFrameworkEndpointBuilderFactory.RobotFrameworkBuilders,
             org.apache.camel.builder.endpoint.dsl.RssEndpointBuilderFactory.RssBuilders,
             org.apache.camel.builder.endpoint.dsl.S3EndpointBuilderFactory.S3Builders,
+            org.apache.camel.builder.endpoint.dsl.STS2EndpointBuilderFactory.STS2Builders,
+            org.apache.camel.builder.endpoint.dsl.SWFEndpointBuilderFactory.SWFBuilders,
             org.apache.camel.builder.endpoint.dsl.SagaEndpointBuilderFactory.SagaBuilders,
             org.apache.camel.builder.endpoint.dsl.SalesforceEndpointBuilderFactory.SalesforceBuilders,
             org.apache.camel.builder.endpoint.dsl.SchedulerEndpointBuilderFactory.SchedulerBuilders,
@@ -338,9 +340,7 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.StompEndpointBuilderFactory.StompBuilders,
             org.apache.camel.builder.endpoint.dsl.StreamEndpointBuilderFactory.StreamBuilders,
             org.apache.camel.builder.endpoint.dsl.StringTemplateEndpointBuilderFactory.StringTemplateBuilders,
-            org.apache.camel.builder.endpoint.dsl.STS2EndpointBuilderFactory.STS2Builders,
             org.apache.camel.builder.endpoint.dsl.StubEndpointBuilderFactory.StubBuilders,
-            org.apache.camel.builder.endpoint.dsl.SWFEndpointBuilderFactory.SWFBuilders,
             org.apache.camel.builder.endpoint.dsl.SwiftEndpointBuilderFactory.SwiftBuilders,
             org.apache.camel.builder.endpoint.dsl.TelegramEndpointBuilderFactory.TelegramBuilders,
             org.apache.camel.builder.endpoint.dsl.ThriftEndpointBuilderFactory.ThriftBuilders,
@@ -369,10 +369,10 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.WsEndpointBuilderFactory.WsBuilders,
             org.apache.camel.builder.endpoint.dsl.XChangeEndpointBuilderFactory.XChangeBuilders,
             org.apache.camel.builder.endpoint.dsl.XJEndpointBuilderFactory.XJBuilders,
+            org.apache.camel.builder.endpoint.dsl.XQueryEndpointBuilderFactory.XQueryBuilders,
             org.apache.camel.builder.endpoint.dsl.XmlSignerEndpointBuilderFactory.XmlSignerBuilders,
             org.apache.camel.builder.endpoint.dsl.XmlVerifierEndpointBuilderFactory.XmlVerifierBuilders,
             org.apache.camel.builder.endpoint.dsl.XmppEndpointBuilderFactory.XmppBuilders,
-            org.apache.camel.builder.endpoint.dsl.XQueryEndpointBuilderFactory.XQueryBuilders,
             org.apache.camel.builder.endpoint.dsl.XsltEndpointBuilderFactory.XsltBuilders,
             org.apache.camel.builder.endpoint.dsl.XsltSaxonEndpointBuilderFactory.XsltSaxonBuilders,
             org.apache.camel.builder.endpoint.dsl.YammerEndpointBuilderFactory.YammerBuilders,
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
index dc9e092..daef6a3 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
@@ -25,12 +25,14 @@ import javax.annotation.Generated;
 @Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
 public interface EndpointBuilders
         extends
+            org.apache.camel.builder.endpoint.dsl.AMQPEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.AS2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.AWS2EC2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.AWS2S3EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ActiveMQEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AhcEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.AMQPEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ApnsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ArangoDbEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.AS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AsteriskEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.Athena2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AtlasMapEndpointBuilderFactory,
@@ -44,17 +46,17 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.AtomixSetEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AtomixValueEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.AvroEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.AWS2EC2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.AWS2S3EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BeanEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.BeanstalkEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BeanValidatorEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.BeanstalkEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BlobEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BlobServiceEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BonitaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BoxEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.BrowseEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.CMEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.CMISEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CaffeineCacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CaffeineLoadCacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CassandraEndpointBuilderFactory,
@@ -63,21 +65,20 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.CinderEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ClassEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ClientEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.CMEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.CMISEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CoAPEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CometdEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ConsulEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ControlBusEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CordaEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.CouchbaseEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CouchDbEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.CouchbaseEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CronEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CryptoCmsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.Cw2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CwEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CxfEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.CxfRsEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.DJLEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DataFormatEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DataLakeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DataSetEndpointBuilderFactory,
@@ -96,7 +97,6 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.DirectVmEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DisruptorEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DisruptorVmEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.DJLEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DnsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DockerEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.DozerEndpointBuilderFactory,
@@ -105,17 +105,17 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.EC2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ECS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ECSEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EKS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EKSEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ElasticsearchEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ElsqlEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EtcdKeysEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EtcdStatsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EtcdWatchEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.EventbridgeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EventEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EventHubsEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.EventbridgeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ExecEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.FacebookEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.FhirEndpointBuilderFactory,
@@ -149,6 +149,7 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.GridFsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GrpcEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.GuavaEventBusEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.HBaseEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastAtomicnumberEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastInstanceEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastListEndpointBuilderFactory,
@@ -160,11 +161,12 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.HazelcastSedaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastSetEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HazelcastTopicEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.HBaseEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HdfsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.HttpEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IAM2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IAMEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.IOTAEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.IPFSEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IgniteCacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IgniteComputeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IgniteEventsEndpointBuilderFactory,
@@ -175,30 +177,30 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.InfinispanEmbeddedEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.InfinispanRemoteEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.InfluxDbEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.IOTAEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.IPFSEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IrcEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.IronMQEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JBPMEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JCacheEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JGroupsEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JGroupsRaftEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JMXEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JSR356WebSocketEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JcloudsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JcrEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JdbcEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JettyHttpEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JGroupsEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JGroupsRaftEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JingEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JiraEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JmsEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JMXEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JoltEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JooqEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JpaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JsltEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JsonValidatorEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.JSR356WebSocketEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.Jt400EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KafkaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KameletEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KeystoneEndpointBuilderFactory,
@@ -206,8 +208,6 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.KinesisEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KinesisFirehose2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KinesisFirehoseEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KubernetesConfigMapsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KubernetesCustomResourcesEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KubernetesDeploymentsEndpointBuilderFactory,
@@ -232,11 +232,15 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.LogEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.LuceneEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.LumberjackEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MQ2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MQEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MSK2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MSKEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MailEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MasterEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MetricsEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MicrometerEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MicroProfileMetricsEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.MicrometerEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MiloClientEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MiloServerEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MinaEndpointBuilderFactory,
@@ -244,10 +248,6 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.MllpEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MockEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MongoDbEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MQ2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MQEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MSK2EndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.MSKEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MsvEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MustacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.MvelEndpointBuilderFactory,
@@ -255,9 +255,9 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.MyBatisEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NagiosEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NatsEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.NetWeaverEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NettyEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NettyHttpEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.NetWeaverEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NeutronEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NitriteEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.NovaEndpointBuilderFactory,
@@ -286,13 +286,15 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.RedisEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RefEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RestApiEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.ResteasyEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RestEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RestOpenApiEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RestSwaggerEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.ResteasyEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RobotFrameworkEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.RssEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.S3EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.STS2EndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.SWFEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SagaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SalesforceEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SchedulerEndpointBuilderFactory,
@@ -335,9 +337,7 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.StompEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.StreamEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.StringTemplateEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.STS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.StubEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.SWFEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SwiftEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.TelegramEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ThriftEndpointBuilderFactory,
@@ -366,10 +366,10 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.WsEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XChangeEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XJEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.XQueryEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XmlSignerEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XmlVerifierEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XmppEndpointBuilderFactory,
-            org.apache.camel.builder.endpoint.dsl.XQueryEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XsltEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.XsltSaxonEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.YammerEndpointBuilderFactory,
diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index 0b396c2..a2e7087 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -145,6 +145,7 @@
 *** xref:google-pubsub-component.adoc[Google Pubsub]
 *** xref:google-sheets-component.adoc[Google Sheets]
 *** xref:google-sheets-stream-component.adoc[Google Sheets Stream]
+*** xref:google-storage-component.adoc[Google Storage]
 ** xref:gora-component.adoc[Gora]
 ** xref:grape-component.adoc[Grape]
 ** xref:graphql-component.adoc[GraphQL]
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index 9ee40df..af10d7e 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -1,7 +1,7 @@
 [[google-storage-component]]
 = Google Storage Component
 //THIS FILE IS COPIED: EDIT THE SOURCE FILE:
-:page-source: componentscamel-google-storagesrcmaindocsgoogle-storage-component.adoc
+:page-source: components/camel-google-storage/src/main/docs/google-storage-component.adoc
 :docTitle: Google Storage
 :artifactId: camel-google-storage
 :description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.


[camel] 21/31: CAMEL-15964 camel-google-storage - check style

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit be9a64b96133339a950cd1a1b389ed59e0fedd51
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Mon Feb 15 12:46:39 2021 +0100

    CAMEL-15964 camel-google-storage - check style
---
 .../GoogleCloudStorageConnectionFactory.java       |  8 +++++++-
 .../storage/GoogleCloudStorageConstants.java       |  9 +++++++--
 .../google/storage/GoogleCloudStorageEndpoint.java |  2 +-
 .../integration/ComplexIntegrationTest.java        |  1 -
 .../storage/localstorage/FakeStorageRpc.java       | 18 +++++++++++++++++-
 .../storage/localstorage/LocalStorageHelper.java   | 22 +++++++++++++++++++---
 .../google/storage/unit/ConsumerLocalTest.java     |  8 ++++----
 .../google/storage/unit/ProducerLocalTest.java     | 14 +++++++-------
 .../src/test/resources/log4j2.properties           | 19 +++++++++++++++++++
 9 files changed, 81 insertions(+), 20 deletions(-)

diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
index dd301de..60f8899 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
@@ -23,7 +23,13 @@ import com.google.auth.oauth2.ServiceAccountCredentials;
 import com.google.cloud.storage.Storage;
 import com.google.cloud.storage.StorageOptions;
 
-public class GoogleCloudStorageConnectionFactory {
+public final class GoogleCloudStorageConnectionFactory {
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleCloudStorageConnectionFactory() {
+    }
 
     public static Storage create(GoogleCloudStorageComponentConfiguration configuration) throws Exception {
         if (!Strings.isNullOrEmpty(configuration.getServiceAccountKey())) {
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
index b16fc9d..1a9b316 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.component.google.storage;
 
-public class GoogleCloudStorageConstants {
+public final class GoogleCloudStorageConstants {
 
     public static final String OPERATION = "CamelGoogleCloudStorageOperation";
     public static final String BUCKET_NAME = "CamelGoogleCloudStorageBucketName";
@@ -34,7 +34,7 @@ public class GoogleCloudStorageConstants {
     public static final String METADATA_COMPONENT_COUNT = "CamelGoogleCloudStorageComponentCount";
     public static final String METADATA_CONTENT_LANGUAGE = "CamelGoogleCloudStorageContentLanguage";
     public static final String METADATA_CUSTOM_TIME = "CamelGoogleCloudStorageCustomTime";
-    public static final String METADATA_CRC32C_hex = "CamelGoogleCloudStorageCrc32cHex";
+    public static final String METADATA_CRC32C_HEX = "CamelGoogleCloudStorageCrc32cHex";
     public static final String METADATA_ETAG = "CamelGoogleCloudStorageETag";
     public static final String METADATA_GENERATION = "CamelGoogleCloudStorageGeneration";
     public static final String METADATA_BLOB_ID = "CamelGoogleCloudStorageBlobId";
@@ -45,4 +45,9 @@ public class GoogleCloudStorageConstants {
     public static final String METADATA_CREATE_TIME = "CamelGoogleCloudStorageCreateTime";
     public static final String METADATA_LAST_UPDATE = "CamelGoogleCloudStorageLastUpdate";
 
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleCloudStorageConstants() {
+    }
 }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index e4000d6..0e8043b 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -168,7 +168,7 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
         message.setHeader(GoogleCloudStorageConstants.METADATA_CONTENT_LANGUAGE, blob.getContentLanguage());
         message.setHeader(GoogleCloudStorageConstants.CONTENT_TYPE, blob.getContentType());
         message.setHeader(GoogleCloudStorageConstants.METADATA_CUSTOM_TIME, blob.getCustomTime());
-        message.setHeader(GoogleCloudStorageConstants.METADATA_CRC32C_hex, blob.getCrc32cToHexString());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_CRC32C_HEX, blob.getCrc32cToHexString());
         message.setHeader(GoogleCloudStorageConstants.METADATA_ETAG, blob.getEtag());
         message.setHeader(GoogleCloudStorageConstants.METADATA_GENERATION, blob.getGeneration());
         message.setHeader(GoogleCloudStorageConstants.METADATA_BLOB_ID, blob.getBlobId());
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
index c28e040..30b7aa4 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
@@ -90,7 +90,6 @@ public class ComplexIntegrationTest extends CamelTestSupport {
                             + "&operation=createDownloadLink")
                         .log("URL for ${header.CamelGoogleCloudStorageBucketName}/${header.CamelGoogleCloudStorageObjectName} =${body}")
                         .to("mock:bucket2");
-                ;
 
                 //list all buckets
                 from("timer:timer1?repeatCount=1&fixedRate=true&period=10000")
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
index 70153fd..712ee51 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage.localstorage;
 
 import java.io.IOException;
@@ -491,7 +507,7 @@ class FakeStorageRpc extends StorageRpcTestBase {
     }
 
     private String fullname(StorageObject so) {
-        return (so.getBucket() + "/" + so.getName());
+        return so.getBucket() + "/" + so.getName();
     }
 
     private BigInteger size(StorageObject so) {
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
index fb28518..2591932 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage.localstorage;
 
 import com.google.cloud.spi.ServiceRpcFactory;
@@ -44,7 +60,7 @@ import com.google.cloud.storage.spi.v1.StorageRpc;
 public final class LocalStorageHelper {
 
     // used for testing. Will throw if you pass it an option.
-    private static final FakeStorageRpc instance = new FakeStorageRpc(true);
+    private static final FakeStorageRpc INSTANCE = new FakeStorageRpc(true);
 
     private LocalStorageHelper() {
     }
@@ -54,14 +70,14 @@ public final class LocalStorageHelper {
      * from a clean slate. That instance will throw if you pass it any option.
      */
     public static StorageOptions getOptions() {
-        instance.reset();
+        INSTANCE.reset();
         return StorageOptions.newBuilder()
                 .setProjectId("dummy-project-for-testing")
                 .setServiceRpcFactory(
                         new ServiceRpcFactory<StorageOptions>() {
                             @Override
                             public StorageRpc create(StorageOptions options) {
-                                return instance;
+                                return INSTANCE;
                             }
                         })
                 .build();
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
index e728081..419bbe1 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
@@ -64,12 +64,12 @@ public class ConsumerLocalTest extends GoogleCloudStorageBaseTest {
     @Test
     public void sendIn() throws Exception {
 
-        final int NUMBER_OF_FILES = 3;
+        final int numberOfFiles = 3;
 
-        result.expectedMessageCount(NUMBER_OF_FILES);
-        consumedObjects.expectedMessageCount(NUMBER_OF_FILES);
+        result.expectedMessageCount(numberOfFiles);
+        consumedObjects.expectedMessageCount(numberOfFiles);
 
-        for (int i = 0; i < NUMBER_OF_FILES; i++) {
+        for (int i = 0; i < numberOfFiles; i++) {
             final String filename = String.format("file_%s.txt", i);
             final String body = String.format("body_%s", i);
             //upload a file
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
index 37aebc2..41bb2fe 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
@@ -69,20 +69,20 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
     public void sendIn() throws Exception {
         result.expectedMessageCount(1);
 
-        final String FILENAME_1 = "just_a_file.txt";
+        final String fileName = "just_a_file.txt";
 
         //upload a file
         byte[] payload = "Hi, How are you ?".getBytes();
         ByteArrayInputStream bais = new ByteArrayInputStream(payload);
         Exchange addObjectExchange = template.request("direct:addObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, fileName);
             exchange.getIn().setHeader(GoogleCloudStorageConstants.CONTENT_ENCODING, "text/plain");
             exchange.getIn().setBody(bais);
         });
         Blob addObject = addObjectExchange.getMessage().getBody(Blob.class);
         LOG.info("addObject {}", addObject);
         assertNotNull(addObject);
-        assertEquals(FILENAME_1, addObject.getName());
+        assertEquals(fileName, addObject.getName());
 
         Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
@@ -99,17 +99,17 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
         LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
         List<Blob> resp = listObjectsExchange.getMessage().getBody(List.class);
         assertEquals(1, resp.size());
-        assertEquals(FILENAME_1, resp.get(0).getName());
+        assertEquals(fileName, resp.get(0).getName());
 
         Exchange getObjectExchange = template.request("direct:getObject", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
                     GoogleCloudStorageComponentOperations.getObject);
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, fileName);
         });
         Blob getObject = getObjectExchange.getMessage().getBody(Blob.class);
         LOG.info("getObject: {}", getObject);
         assertNotNull(getObject);
-        assertEquals(FILENAME_1, getObject.getName());
+        assertEquals(fileName, getObject.getName());
 
         /*
         //sign url
@@ -126,7 +126,7 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
         Exchange deleteObjectExchange = template.send("direct:deleteObject", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
                     GoogleCloudStorageComponentOperations.deleteObject);
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, fileName);
         });
 
         boolean deleteObject = deleteObjectExchange.getMessage().getBody(Boolean.class).booleanValue();
diff --git a/components/camel-google-storage/src/test/resources/log4j2.properties b/components/camel-google-storage/src/test/resources/log4j2.properties
index 328db35..aa9bb86 100644
--- a/components/camel-google-storage/src/test/resources/log4j2.properties
+++ b/components/camel-google-storage/src/test/resources/log4j2.properties
@@ -1,4 +1,23 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
 
+#
+# The logging properties used during tests..
+#
 appender.out.type = Console
 appender.out.name = out
 appender.out.layout.type = PatternLayout


[camel] 28/31: CAMEL-15964 - Fixed test logs configuration

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ab56327042d6a298dc48c98613249f755d418240
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 17 07:12:09 2021 +0100

    CAMEL-15964 - Fixed test logs configuration
---
 .../camel-google-storage/src/test/resources/log4j2.properties    | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/components/camel-google-storage/src/test/resources/log4j2.properties b/components/camel-google-storage/src/test/resources/log4j2.properties
index aa9bb86..1541092 100644
--- a/components/camel-google-storage/src/test/resources/log4j2.properties
+++ b/components/camel-google-storage/src/test/resources/log4j2.properties
@@ -18,9 +18,14 @@
 #
 # The logging properties used during tests..
 #
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-google-storage-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
 appender.out.type = Console
 appender.out.name = out
 appender.out.layout.type = PatternLayout
-appender.out.layout.pattern = [%30.30t] %-30.30c{1} %-5p %m%n
+appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
 rootLogger.level = INFO
-rootLogger.appenderRef.out.ref = out
+rootLogger.appenderRef.file.ref = file


[camel] 02/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 7cae141011c6524d43abd7fac174963bb2f49f17
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Thu Feb 11 09:37:59 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/camel-google-storage/ReadMe.txt         | 34 ++++++++++----
 components/camel-google-storage/pom.xml            |  5 +-
 .../GoogleCloudStorageEndpointUriFactory.java      |  4 +-
 .../component/google/storage/google-storage.json   |  1 -
 .../google/storage/GoogleCloudStorageEndpoint.java | 26 ++---------
 ...ogleCloudStorageComponentConfigurationTest.java | 19 --------
 .../storage/{ => unit}/ConsumerLocalTest.java      |  3 +-
 .../{ => unit}/GoogleCloudStorageBaseTest.java     |  3 +-
 ...ogleCloudStorageComponentConfigurationTest.java | 54 ++++++++++++++++++++++
 .../storage/{ => unit}/ProducerLocalTest.java      |  4 +-
 10 files changed, 94 insertions(+), 59 deletions(-)

diff --git a/components/camel-google-storage/ReadMe.txt b/components/camel-google-storage/ReadMe.txt
index f327e1e..4b5dcf0 100644
--- a/components/camel-google-storage/ReadMe.txt
+++ b/components/camel-google-storage/ReadMe.txt
@@ -1,13 +1,31 @@
-Camel Component Project
-=======================
+## Camel Google Storage Component
+This component is based on the https://github.com/googleapis/java-storage[google java storage library] that works as a client for the Google Cloud Storage.
 
-This project is a template of a Camel component.
 
-To build this project use
+## Camel Google Storage Component testing
 
-    mvn install
+The unit tests provided are somewhat limited.
+Due to the nature of the component, it needs to be tested against a google Storage instance because although there are some emulators
+they doesn't cover all the functionalities.
+
+The tests are organized into two packages:
+* Unit : <br>
+  Standalone tests that can be conducted on their own
+* Integration : <br>
+  Tests against a Google Storage instance
+
+For the Unit tests has been extended the emulator https://github.com/googleapis/java-storage-nio/blob/master/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java[FakeStorageRpc]
+adding some functionalities (bucket creation and deletion). However there are still some unsupported operations.
+
+
+### Execution of integration tests
+
+A Google Cloud account with a project...
+
+Running tests against Storage instance:
+
+```
+mvn -Pgoogle-storage-test verify
+```
 
-For more help see the Apache Camel documentation:
 
-    http://camel.apache.org/writing-components.html
-    
diff --git a/components/camel-google-storage/pom.xml b/components/camel-google-storage/pom.xml
index 26d3519..832fa11 100644
--- a/components/camel-google-storage/pom.xml
+++ b/components/camel-google-storage/pom.xml
@@ -92,10 +92,9 @@
               <forkCount>1</forkCount>
               <reuseForks>true</reuseForks>
               <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
-              <!--<includes>
-                     
+              <includes>
                   <include>**/unit/**/*.java</include>
-              </includes>-->
+              </includes>
           </configuration>
       </plugin>
     </plugins>
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
index 35339d8..e421f25 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
@@ -20,9 +20,8 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(33);
+        Set<String> props = new HashSet<>(32);
         props.add("backoffMultiplier");
-        props.add("bucketName");
         props.add("destinationBucket");
         props.add("initialDelay");
         props.add("serviceAccountCredentials");
@@ -70,7 +69,6 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
 
         Map<String, Object> copy = new HashMap<>(properties);
 
-        uri = buildPathParameter(syntax, uri, "bucketName", null, true, copy);
         uri = buildQueryParameters(uri, copy, encode);
         return uri;
     }
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index e75a20d7..d06cb07 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -40,7 +40,6 @@
     "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 [...]
   },
   "properties": {
-    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Bucket name or ARN" },
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
     "serviceAccountCredentials": { "kind": "parameter", "displayName": "Service Account Credentials", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Specify the service account credentials file (json)" },
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index a82eab2..31ed2dc 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -15,18 +15,17 @@ import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.storage.client.StorageInternalClientFactory;
-import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
-import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.ScheduledPollEndpoint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * GoogleCloudStorage component which does bla bla.
- *
- * TODO: Update one line description above what the component does.
+ * Google Cloud Storage is an Object Storage to store any amount of data and retrieve it as often you like.
+ * 
+ * Google Storage Endpoint definition represents a bucket within the storage and contains configuration 
+ * to customize the behavior of Consumer and Producer.
  */
 @UriEndpoint(firstVersion = "3.7.0", scheme = "google-storage", title = "Google Storage",
              syntax = "google-storage:bucketName",
@@ -35,10 +34,6 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
 
     private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageEndpoint.class);
 
-    @UriPath(description = "Bucket name or ARN")
-    @Metadata(required = true)
-    private String bucketName; // to support component docs
-
     @UriParam
     private GoogleCloudStorageComponentConfiguration configuration;
 
@@ -167,17 +162,4 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
         return exchange;
     }
 
-    public String getBucketName() {
-        return bucketName;
-    }
-
-    /**
-     * Bucket name
-     * 
-     * @param bucketName
-     */
-    public void setBucketName(String bucketName) {
-        this.bucketName = bucketName;
-    }
-
 }
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java
deleted file mode 100644
index e6977a2..0000000
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurationTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.camel.component.google.storage;
-
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-public class GoogleCloudStorageComponentConfigurationTest extends CamelTestSupport {
-
-    @Test
-    public void createEndpointWithMinimalConfiguration() throws Exception {
-        GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
-        GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
-                "google-storage://rafa_test_bucket?serviceAccountCredentials=somefile.json");
-
-        assertEquals(endpoint.getConfiguration().getServiceAccountCredentials(), "somefile.json");
-    }
-
-}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
similarity index 96%
rename from components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java
rename to components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
index 22c3a49..b6b3c4f 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ConsumerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
@@ -1,8 +1,9 @@
-package org.apache.camel.component.google.storage;
+package org.apache.camel.component.google.storage.unit;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
similarity index 87%
rename from components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java
rename to components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
index 83d01f2..0bdf863 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/GoogleCloudStorageBaseTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageBaseTest.java
@@ -1,7 +1,8 @@
-package org.apache.camel.component.google.storage;
+package org.apache.camel.component.google.storage.unit;
 
 import com.google.cloud.storage.Storage;
 import org.apache.camel.CamelContext;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
 import org.apache.camel.component.google.storage.localstorage.LocalStorageHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
new file mode 100644
index 0000000..73e5c89
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
@@ -0,0 +1,54 @@
+package org.apache.camel.component.google.storage.unit;
+
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration;
+import org.apache.camel.component.google.storage.GoogleCloudStorageEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class GoogleCloudStorageComponentConfigurationTest extends CamelTestSupport {
+
+    @Test
+    public void createEndpointWithMinimalConfiguration() throws Exception {
+        final String bucketName = "myCamelBucket";
+        final String serviceAccountCredentialsFile = "somefile.json";
+
+        GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
+        GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
+                String.format("google-storage://%s?serviceAccountCredentials=%s", bucketName, serviceAccountCredentialsFile));
+
+        assertEquals(endpoint.getConfiguration().getBucketName(), bucketName);
+        assertEquals(endpoint.getConfiguration().getServiceAccountCredentials(), serviceAccountCredentialsFile);
+    }
+
+    public void createEndpointForComplexConsumer() throws Exception {
+
+        final String bucketName = "sourceCamelBucket";
+        final String serviceAccountCredentialsFile = "somefile.json";
+        final boolean moveAfterRead = false;
+        final String destinationBucket = "destinationCamelBucket";
+        final boolean autoCreateBucket = true;
+        final boolean deleteAfterRead = false;
+        final boolean includeBody = true;
+
+        GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
+        GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
+                String.format(
+                        "google-storage://%s?serviceAccountCredentials=%s&moveAfterRead=%s&destinationBucket=%s&autoCreateBucket=%s&deleteAfterRead=%s&includeBody=%s",
+                        bucketName, serviceAccountCredentialsFile, moveAfterRead, destinationBucket, autoCreateBucket,
+                        deleteAfterRead, includeBody));
+
+        GoogleCloudStorageComponentConfiguration configuration = endpoint.getConfiguration();
+        assertEquals(configuration.getBucketName(), bucketName);
+        assertEquals(configuration.getServiceAccountCredentials(), serviceAccountCredentialsFile);
+        assertEquals(configuration.isMoveAfterRead(), moveAfterRead);
+        assertEquals(configuration.getDestinationBucket(), destinationBucket);
+        assertEquals(configuration.isAutoCreateBucket(), autoCreateBucket);
+        assertEquals(configuration.isDeleteAfterRead(), deleteAfterRead);
+        assertEquals(configuration.isIncludeBody(), includeBody);
+
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
similarity index 96%
rename from components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java
rename to components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
index 71b2419..591c633 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/ProducerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
@@ -1,4 +1,4 @@
-package org.apache.camel.component.google.storage;
+package org.apache.camel.component.google.storage.unit;
 
 import java.io.ByteArrayInputStream;
 import java.util.List;
@@ -9,6 +9,8 @@ import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations;
+import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;


[camel] 25/31: CAMEL-15964 camel-google-storage comp. - class name collision with springboot

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 079cdc01946f8d8ebf2ece3b0931dbbe57e41325
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Wed Feb 17 00:10:52 2021 +0100

    CAMEL-15964 camel-google-storage comp. - class name collision with springboot
---
 .../catalog/docs/google-storage-component.adoc     | 10 ++---
 .../GoogleCloudStorageComponentConfigurer.java     | 12 ++---
 .../GoogleCloudStorageEndpointConfigurer.java      |  4 +-
 .../component/google/storage/google-storage.json   | 52 +++++++++++-----------
 .../src/main/docs/google-storage-component.adoc    | 10 ++---
 .../storage/GoogleCloudStorageComponent.java       | 10 ++---
 ...n.java => GoogleCloudStorageConfiguration.java} | 12 ++---
 .../GoogleCloudStorageConnectionFactory.java       |  2 +-
 .../google/storage/GoogleCloudStorageConsumer.java |  2 +-
 .../google/storage/GoogleCloudStorageEndpoint.java | 10 ++---
 ...ions.java => GoogleCloudStorageOperations.java} |  2 +-
 .../google/storage/GoogleCloudStorageProducer.java | 10 ++---
 ...ogleCloudStorageComponentConfigurationTest.java |  4 +-
 .../google/storage/unit/ProducerLocalTest.java     | 14 +++---
 .../dsl/GoogleStorageComponentBuilderFactory.java  | 16 +++----
 .../GoogleCloudStorageEndpointBuilderFactory.java  | 10 ++---
 .../ROOT/pages/google-storage-component.adoc       | 10 ++---
 17 files changed, 95 insertions(+), 95 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index e63875f..ee5dec8 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -86,7 +86,7 @@ The Google Storage component supports 16 options, which are listed below.
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
+| *configuration* (common) | The component configuration |  | GoogleCloudStorageConfiguration
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
 | *storageClient* (common) | *Autowired* The storage client |  | Storage
@@ -99,7 +99,7 @@ The Google Storage component supports 16 options, which are listed below.
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -146,7 +146,7 @@ with the following path and query parameters:
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
@@ -285,7 +285,7 @@ This operation will upload the file camel.txt with the content "Camel rocks!" in
 [source,java]
 --------------------------------------------------------------------------------
   from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.copyObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.copyObject);
     exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
     exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, "myCamelBucket_dest");
     exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, "camel_copy.txt");
@@ -301,7 +301,7 @@ This operation will copy the object with the name expressed in the header DESTIN
 [source,java]
 --------------------------------------------------------------------------------
   from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.deleteObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.deleteObject);
     exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
   })
   .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
index 0cba237..7eb4300 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
@@ -17,9 +17,9 @@ import org.apache.camel.support.component.PropertyConfigurerSupport;
 @SuppressWarnings("unchecked")
 public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
-    private org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration getOrCreateConfiguration(GoogleCloudStorageComponent target) {
+    private org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration getOrCreateConfiguration(GoogleCloudStorageComponent target) {
         if (target.getConfiguration() == null) {
-            target.setConfiguration(new org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration());
+            target.setConfiguration(new org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration());
         }
         return target.getConfiguration();
     }
@@ -34,7 +34,7 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "autowiredEnabled": target.setAutowiredEnabled(property(camelContext, boolean.class, value)); return true;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
-        case "configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration.class, value)); return true;
+        case "configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration.class, value)); return true;
         case "deleteafterread":
         case "deleteAfterRead": getOrCreateConfiguration(target).setDeleteAfterRead(property(camelContext, boolean.class, value)); return true;
         case "destinationbucket":
@@ -49,7 +49,7 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "moveAfterRead": getOrCreateConfiguration(target).setMoveAfterRead(property(camelContext, boolean.class, value)); return true;
         case "objectname":
         case "objectName": getOrCreateConfiguration(target).setObjectName(property(camelContext, java.lang.String.class, value)); return true;
-        case "operation": getOrCreateConfiguration(target).setOperation(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class, value)); return true;
+        case "operation": getOrCreateConfiguration(target).setOperation(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageOperations.class, value)); return true;
         case "serviceaccountkey":
         case "serviceAccountKey": getOrCreateConfiguration(target).setServiceAccountKey(property(camelContext, java.lang.String.class, value)); return true;
         case "storageclass":
@@ -76,7 +76,7 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "autowiredEnabled": return boolean.class;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
-        case "configuration": return org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration.class;
+        case "configuration": return org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration.class;
         case "deleteafterread":
         case "deleteAfterRead": return boolean.class;
         case "destinationbucket":
@@ -91,7 +91,7 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "moveAfterRead": return boolean.class;
         case "objectname":
         case "objectName": return java.lang.String.class;
-        case "operation": return org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class;
+        case "operation": return org.apache.camel.component.google.storage.GoogleCloudStorageOperations.class;
         case "serviceaccountkey":
         case "serviceAccountKey": return java.lang.String.class;
         case "storageclass":
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
index 53d4c0f..7fe7f5d 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
@@ -53,7 +53,7 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "moveAfterRead": target.getConfiguration().setMoveAfterRead(property(camelContext, boolean.class, value)); return true;
         case "objectname":
         case "objectName": target.getConfiguration().setObjectName(property(camelContext, java.lang.String.class, value)); return true;
-        case "operation": target.getConfiguration().setOperation(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class, value)); return true;
+        case "operation": target.getConfiguration().setOperation(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageOperations.class, value)); return true;
         case "pollstrategy":
         case "pollStrategy": target.setPollStrategy(property(camelContext, org.apache.camel.spi.PollingConsumerPollStrategy.class, value)); return true;
         case "repeatcount":
@@ -125,7 +125,7 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "moveAfterRead": return boolean.class;
         case "objectname":
         case "objectName": return java.lang.String.class;
-        case "operation": return org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class;
+        case "operation": return org.apache.camel.component.google.storage.GoogleCloudStorageOperations.class;
         case "pollstrategy":
         case "pollStrategy": return org.apache.camel.spi.PollingConsumerPollStrategy.class;
         case "repeatcount":
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index b5b787c..e34e885 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -22,43 +22,43 @@
     "lenientProperties": false
   },
   "componentProperties": {
-    "autoCreateBucket": { "kind": "property", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
-    "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
-    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
-    "storageClass": { "kind": "property", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when creat [...]
-    "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The storage client" },
-    "storageLocation": { "kind": "property", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new  [...]
+    "autoCreateBucket": { "kind": "property", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
+    "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
+    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
+    "storageClass": { "kind": "property", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when creating the n [...]
+    "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The storage client" },
+    "storageLocation": { "kind": "property", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new buckets" },
     "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 [...]
-    "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. Th [...]
-    "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRe [...]
-    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body. [...]
-    "includeFolders": { "kind": "property", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is f [...]
-    "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after they [...]
+    "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. The delete  [...]
+    "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRead is set [...]
+    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body. If false [...]
+    "includeFolders": { "kind": "property", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is false, the [...]
+    "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after they have bee [...]
     "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 [...]
-    "objectName": { "kind": "property", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Object name inside the bucket" },
-    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Googl [...]
+    "objectName": { "kind": "property", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Object name inside the bucket" },
+    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudSto [...]
     "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 [...]
   },
   "properties": {
-    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Bucket name or ARN" },
-    "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
-    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
-    "storageClass": { "kind": "parameter", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when crea [...]
-    "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The storage client" },
-    "storageLocation": { "kind": "parameter", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new [...]
+    "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Bucket name or ARN" },
+    "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
+    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
+    "storageClass": { "kind": "parameter", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when creating the  [...]
+    "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The storage client" },
+    "storageLocation": { "kind": "parameter", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new buckets" },
     "bridgeErrorHandler": { "kind": "parameter", "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 m [...]
-    "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. T [...]
-    "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterR [...]
-    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body [...]
-    "includeFolders": { "kind": "parameter", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is  [...]
-    "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after the [...]
+    "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. The delete [...]
+    "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRead is se [...]
+    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body. If fals [...]
+    "includeFolders": { "kind": "parameter", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is false, th [...]
+    "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after they have be [...]
     "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
     "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." },
     "pollStrategy": { "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation  [...]
     "lazyStartProducer": { "kind": "parameter", "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 sta [...]
-    "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Object name inside the bucket" },
-    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Goog [...]
+    "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", "configurationField": "configuration", "description": "The Object name inside the bucket" },
+    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudSt [...]
     "backoffErrorThreshold": { "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
     "backoffIdleThreshold": { "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
     "backoffMultiplier": { "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening agai [...]
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index e63875f..ee5dec8 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -86,7 +86,7 @@ The Google Storage component supports 16 options, which are listed below.
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
+| *configuration* (common) | The component configuration |  | GoogleCloudStorageConfiguration
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
 | *storageClient* (common) | *Autowired* The storage client |  | Storage
@@ -99,7 +99,7 @@ The Google Storage component supports 16 options, which are listed below.
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -146,7 +146,7 @@ with the following path and query parameters:
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
@@ -285,7 +285,7 @@ This operation will upload the file camel.txt with the content "Camel rocks!" in
 [source,java]
 --------------------------------------------------------------------------------
   from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.copyObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.copyObject);
     exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
     exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, "myCamelBucket_dest");
     exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, "camel_copy.txt");
@@ -301,7 +301,7 @@ This operation will copy the object with the name expressed in the header DESTIN
 [source,java]
 --------------------------------------------------------------------------------
   from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.deleteObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.deleteObject);
     exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
   })
   .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
index f53a171..c42e29d 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
@@ -28,7 +28,7 @@ import org.apache.camel.support.DefaultComponent;
 public class GoogleCloudStorageComponent extends DefaultComponent {
 
     @Metadata
-    private GoogleCloudStorageComponentConfiguration configuration = new GoogleCloudStorageComponentConfiguration();
+    private GoogleCloudStorageConfiguration configuration = new GoogleCloudStorageConfiguration();
 
     public GoogleCloudStorageComponent() {
         this(null);
@@ -46,8 +46,8 @@ public class GoogleCloudStorageComponent extends DefaultComponent {
         if (remaining.startsWith("arn:")) {
             remaining = remaining.substring(remaining.lastIndexOf(':') + 1, remaining.length());
         }
-        final GoogleCloudStorageComponentConfiguration configuration
-                = this.configuration != null ? this.configuration.copy() : new GoogleCloudStorageComponentConfiguration();
+        final GoogleCloudStorageConfiguration configuration
+                = this.configuration != null ? this.configuration.copy() : new GoogleCloudStorageConfiguration();
         setProperties(configuration, parameters);
         configuration.setBucketName(remaining);
         Endpoint endpoint = new GoogleCloudStorageEndpoint(uri, this, configuration);
@@ -55,14 +55,14 @@ public class GoogleCloudStorageComponent extends DefaultComponent {
         return endpoint;
     }
 
-    public GoogleCloudStorageComponentConfiguration getConfiguration() {
+    public GoogleCloudStorageConfiguration getConfiguration() {
         return configuration;
     }
 
     /**
      * The component configuration
      */
-    public void setConfiguration(GoogleCloudStorageComponentConfiguration configuration) {
+    public void setConfiguration(GoogleCloudStorageConfiguration configuration) {
         this.configuration = configuration;
     }
 
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConfiguration.java
similarity index 94%
rename from components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
rename to components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConfiguration.java
index 288dec4..035240e 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConfiguration.java
@@ -25,7 +25,7 @@ import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
 
 @UriParams
-public class GoogleCloudStorageComponentConfiguration implements Cloneable {
+public class GoogleCloudStorageConfiguration implements Cloneable {
 
     @UriPath(label = "common", description = "Bucket name or ARN")
     @Metadata(required = true)
@@ -36,7 +36,7 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
 
     @UriParam(label = "producer",
               enums = "copyObject,listObjects,deleteObject,deleteBucket,listBuckets,getObject,createDownloadLink")
-    private GoogleCloudStorageComponentOperations operation;
+    private GoogleCloudStorageOperations operation;
 
     @UriParam(label = "producer", description = "The Object name inside the bucket")
     private String objectName;
@@ -144,7 +144,7 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
         this.storageClient = storageClient;
     }
 
-    public GoogleCloudStorageComponentOperations getOperation() {
+    public GoogleCloudStorageOperations getOperation() {
         return operation;
     }
 
@@ -153,7 +153,7 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
      * 
      * @param operation
      */
-    public void setOperation(GoogleCloudStorageComponentOperations operation) {
+    public void setOperation(GoogleCloudStorageOperations operation) {
         this.operation = operation;
     }
 
@@ -230,9 +230,9 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
         return includeBody;
     }
 
-    public GoogleCloudStorageComponentConfiguration copy() {
+    public GoogleCloudStorageConfiguration copy() {
         try {
-            return (GoogleCloudStorageComponentConfiguration) super.clone();
+            return (GoogleCloudStorageConfiguration) super.clone();
         } catch (CloneNotSupportedException e) {
             throw new RuntimeCamelException(e);
         }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
index 60f8899..627f4d5 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
@@ -31,7 +31,7 @@ public final class GoogleCloudStorageConnectionFactory {
     private GoogleCloudStorageConnectionFactory() {
     }
 
-    public static Storage create(GoogleCloudStorageComponentConfiguration configuration) throws Exception {
+    public static Storage create(GoogleCloudStorageConfiguration configuration) throws Exception {
         if (!Strings.isNullOrEmpty(configuration.getServiceAccountKey())) {
             Storage storage = StorageOptions.newBuilder()
                     .setCredentials(
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
index bbe41b0..1a03c26 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
@@ -241,7 +241,7 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
         }
     }
 
-    protected GoogleCloudStorageComponentConfiguration getConfiguration() {
+    protected GoogleCloudStorageConfiguration getConfiguration() {
         return getEndpoint().getConfiguration();
     }
 
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index e0a4b17..ba4b69c 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -54,12 +54,12 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
     private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageEndpoint.class);
 
     @UriParam
-    private GoogleCloudStorageComponentConfiguration configuration;
+    private GoogleCloudStorageConfiguration configuration;
 
     private Storage storageClient;
 
     public GoogleCloudStorageEndpoint(String uri, GoogleCloudStorageComponent component,
-                                      GoogleCloudStorageComponentConfiguration configuration) {
+                                      GoogleCloudStorageConfiguration configuration) {
         super(uri, component);
         this.configuration = configuration;
     }
@@ -104,7 +104,7 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
         }
     }
 
-    public static Bucket createNewBucket(String bucketName, GoogleCloudStorageComponentConfiguration conf, Storage storage) {
+    public static Bucket createNewBucket(String bucketName, GoogleCloudStorageConfiguration conf, Storage storage) {
         final String location = conf.getStorageLocation();
         final StorageClass storageClass = conf.getStorageClass();
 
@@ -117,7 +117,7 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
         return bucket;
     }
 
-    public GoogleCloudStorageComponentConfiguration getConfiguration() {
+    public GoogleCloudStorageConfiguration getConfiguration() {
         return configuration;
     }
 
@@ -126,7 +126,7 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
      * 
      * @param configuration
      */
-    public void setConfiguration(GoogleCloudStorageComponentConfiguration configuration) {
+    public void setConfiguration(GoogleCloudStorageConfiguration configuration) {
         this.configuration = configuration;
     }
 
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageOperations.java
similarity index 94%
rename from components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java
rename to components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageOperations.java
index 2415b6b..4e87340 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageOperations.java
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.component.google.storage;
 
-public enum GoogleCloudStorageComponentOperations {
+public enum GoogleCloudStorageOperations {
     copyObject,
     listObjects,
     deleteObject,
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
index af4d477..fbce312 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
@@ -61,7 +61,7 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
 
     public void process(Exchange exchange) throws Exception {
 
-        GoogleCloudStorageComponentOperations operation = determineOperation(exchange);
+        GoogleCloudStorageOperations operation = determineOperation(exchange);
         if (ObjectHelper.isEmpty(operation)) {
             processFile(getEndpoint().getStorageClient(), exchange);
         } else {
@@ -344,10 +344,10 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
         return exchange.getMessage();
     }
 
-    private GoogleCloudStorageComponentOperations determineOperation(Exchange exchange) {
-        GoogleCloudStorageComponentOperations operation = exchange.getIn().getHeader(
+    private GoogleCloudStorageOperations determineOperation(Exchange exchange) {
+        GoogleCloudStorageOperations operation = exchange.getIn().getHeader(
                 GoogleCloudStorageConstants.OPERATION,
-                GoogleCloudStorageComponentOperations.class);
+                GoogleCloudStorageOperations.class);
         if (operation == null) {
             operation = getConfiguration().getOperation();
         }
@@ -359,7 +359,7 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
         return (GoogleCloudStorageEndpoint) super.getEndpoint();
     }
 
-    private GoogleCloudStorageComponentConfiguration getConfiguration() {
+    private GoogleCloudStorageConfiguration getConfiguration() {
         return this.endpoint.getConfiguration();
     }
 
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
index d133208..8fe7c1e 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
@@ -17,7 +17,7 @@
 package org.apache.camel.component.google.storage.unit;
 
 import org.apache.camel.component.google.storage.GoogleCloudStorageComponent;
-import org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration;
+import org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration;
 import org.apache.camel.component.google.storage.GoogleCloudStorageEndpoint;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
@@ -56,7 +56,7 @@ public class GoogleCloudStorageComponentConfigurationTest extends CamelTestSuppo
                         bucketName, serviceAccountKeyFile, moveAfterRead, destinationBucket, autoCreateBucket,
                         deleteAfterRead, includeBody));
 
-        GoogleCloudStorageComponentConfiguration configuration = endpoint.getConfiguration();
+        GoogleCloudStorageConfiguration configuration = endpoint.getConfiguration();
         assertEquals(configuration.getBucketName(), bucketName);
         assertEquals(configuration.getServiceAccountKey(), serviceAccountKeyFile);
         assertEquals(configuration.isMoveAfterRead(), moveAfterRead);
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
index 41bb2fe..5dc9b02 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
@@ -25,8 +25,8 @@ import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations;
 import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
+import org.apache.camel.component.google.storage.GoogleCloudStorageOperations;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
@@ -86,7 +86,7 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
 
         Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.listBuckets);
+                    GoogleCloudStorageOperations.listBuckets);
         });
         List<Bucket> bucketsList = listBucketsExchange.getMessage().getBody(List.class);
         LOG.info("bucketsList {}", bucketsList);
@@ -94,7 +94,7 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
 
         Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.listObjects);
+                    GoogleCloudStorageOperations.listObjects);
         });
         LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
         List<Blob> resp = listObjectsExchange.getMessage().getBody(List.class);
@@ -103,7 +103,7 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
 
         Exchange getObjectExchange = template.request("direct:getObject", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.getObject);
+                    GoogleCloudStorageOperations.getObject);
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, fileName);
         });
         Blob getObject = getObjectExchange.getMessage().getBody(Blob.class);
@@ -114,7 +114,7 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
         /*
         //sign url
         Exchange downloadLinkExchange = template.request( "direct:downloadLink", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.createDownloadLink);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.createDownloadLink);
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "readme.txt" );
             exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
         });
@@ -125,7 +125,7 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
 
         Exchange deleteObjectExchange = template.send("direct:deleteObject", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.deleteObject);
+                    GoogleCloudStorageOperations.deleteObject);
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, fileName);
         });
 
@@ -135,7 +135,7 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
 
         Exchange deleteBucketExchange = template.send("direct:deleteBucket", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.deleteBucket);
+                    GoogleCloudStorageOperations.deleteBucket);
         });
         boolean deleteBucket = deleteBucketExchange.getMessage().getBody(Boolean.class).booleanValue();
         LOG.info("deleteBucket {}", deleteBucket);
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index 47b4229..231abe2 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -72,7 +72,7 @@ public interface GoogleStorageComponentBuilderFactory {
          * The component configuration.
          * 
          * The option is a:
-         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration&lt;/code&gt; type.
+         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration&lt;/code&gt; type.
          * 
          * Group: common
          * 
@@ -80,7 +80,7 @@ public interface GoogleStorageComponentBuilderFactory {
          * @return the dsl builder
          */
         default GoogleStorageComponentBuilder configuration(
-                org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration configuration) {
+                org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration configuration) {
             doSetProperty("configuration", configuration);
             return this;
         }
@@ -304,7 +304,7 @@ public interface GoogleStorageComponentBuilderFactory {
          * Set the operation for the producer.
          * 
          * The option is a:
-         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
+         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageOperations&lt;/code&gt; type.
          * 
          * Group: producer
          * 
@@ -312,7 +312,7 @@ public interface GoogleStorageComponentBuilderFactory {
          * @return the dsl builder
          */
         default GoogleStorageComponentBuilder operation(
-                org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations operation) {
+                org.apache.camel.component.google.storage.GoogleCloudStorageOperations operation) {
             doSetProperty("operation", operation);
             return this;
         }
@@ -348,10 +348,10 @@ public interface GoogleStorageComponentBuilderFactory {
         protected GoogleCloudStorageComponent buildConcreteComponent() {
             return new GoogleCloudStorageComponent();
         }
-        private org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration getOrCreateConfiguration(
+        private org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration getOrCreateConfiguration(
                 org.apache.camel.component.google.storage.GoogleCloudStorageComponent component) {
             if (component.getConfiguration() == null) {
-                component.setConfiguration(new org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration());
+                component.setConfiguration(new org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration());
             }
             return component.getConfiguration();
         }
@@ -362,7 +362,7 @@ public interface GoogleStorageComponentBuilderFactory {
                 Object value) {
             switch (name) {
             case "autoCreateBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setAutoCreateBucket((boolean) value); return true;
-            case "configuration": ((GoogleCloudStorageComponent) component).setConfiguration((org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration) value); return true;
+            case "configuration": ((GoogleCloudStorageComponent) component).setConfiguration((org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration) value); return true;
             case "serviceAccountKey": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setServiceAccountKey((java.lang.String) value); return true;
             case "storageClass": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageClass((com.google.cloud.storage.StorageClass) value); return true;
             case "storageClient": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageClient((com.google.cloud.storage.Storage) value); return true;
@@ -375,7 +375,7 @@ public interface GoogleStorageComponentBuilderFactory {
             case "moveAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setMoveAfterRead((boolean) value); return true;
             case "lazyStartProducer": ((GoogleCloudStorageComponent) component).setLazyStartProducer((boolean) value); return true;
             case "objectName": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setObjectName((java.lang.String) value); return true;
-            case "operation": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setOperation((org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations) value); return true;
+            case "operation": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setOperation((org.apache.camel.component.google.storage.GoogleCloudStorageOperations) value); return true;
             case "autowiredEnabled": ((GoogleCloudStorageComponent) component).setAutowiredEnabled((boolean) value); return true;
             default: return false;
             }
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index 1520a1a..235c0e7 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -1243,7 +1243,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * Set the operation for the producer.
          * 
          * The option is a:
-         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
+         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageOperations&lt;/code&gt; type.
          * 
          * Group: producer
          * 
@@ -1251,7 +1251,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * @return the dsl builder
          */
         default GoogleCloudStorageEndpointProducerBuilder operation(
-                GoogleCloudStorageComponentOperations operation) {
+                GoogleCloudStorageOperations operation) {
             doSetProperty("operation", operation);
             return this;
         }
@@ -1259,7 +1259,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * Set the operation for the producer.
          * 
          * The option will be converted to a
-         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations&lt;/code&gt; type.
+         * &lt;code&gt;org.apache.camel.component.google.storage.GoogleCloudStorageOperations&lt;/code&gt; type.
          * 
          * Group: producer
          * 
@@ -1441,9 +1441,9 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
 
     /**
      * Proxy enum for
-     * <code>org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations</code> enum.
+     * <code>org.apache.camel.component.google.storage.GoogleCloudStorageOperations</code> enum.
      */
-    enum GoogleCloudStorageComponentOperations {
+    enum GoogleCloudStorageOperations {
         copyObject,
         listObjects,
         deleteObject,
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index f8348c6..9ee40df 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -88,7 +88,7 @@ The Google Storage component supports 16 options, which are listed below.
 |===
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
+| *configuration* (common) | The component configuration |  | GoogleCloudStorageConfiguration
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
 | *storageClient* (common) | *Autowired* The storage client |  | Storage
@@ -101,7 +101,7 @@ The Google Storage component supports 16 options, which are listed below.
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -148,7 +148,7 @@ with the following path and query parameters:
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
@@ -287,7 +287,7 @@ This operation will upload the file camel.txt with the content "Camel rocks!" in
 [source,java]
 --------------------------------------------------------------------------------
   from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.copyObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.copyObject);
     exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
     exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, "myCamelBucket_dest");
     exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, "camel_copy.txt");
@@ -303,7 +303,7 @@ This operation will copy the object with the name expressed in the header DESTIN
 [source,java]
 --------------------------------------------------------------------------------
   from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.deleteObject);
+    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.deleteObject);
     exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
   })
   .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")


[camel] 16/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f1f6b4653d2a45d2260cbafa3c445c59c4a2884a
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sun Feb 14 20:05:42 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../google/storage/GoogleCloudStorageProducer.java |   4 +-
 .../integration/ComplexIntegrationTest.java        | 132 +++++++++++++++++++
 .../integration/ConsumerIntegrationTest.java       |  93 --------------
 .../integration/ProducerIntegrationTest.java       | 141 ---------------------
 .../storage/localstorage/FakeStorageRpc.java       |   9 +-
 .../storage/localstorage/LocalStorageHelper.java   |  10 +-
 .../google/storage/unit/ConsumerLocalTest.java     |  54 +++-----
 .../google/storage/unit/ProducerLocalTest.java     |   3 -
 8 files changed, 164 insertions(+), 282 deletions(-)

diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
index b835aea..af4d477 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
@@ -98,7 +98,7 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
     private void processFile(Storage storage, Exchange exchange) throws IOException, InvalidPayloadException {
         final String bucketName = determineBucketName(exchange);
         final String objectName = determineObjectName(exchange);
-        //LOG.info("processFile, bucketName={}, objectName={}", bucketName, objectName);
+
         Map<String, String> objectMetadata = determineMetadata(exchange);
 
         File filePayload = null;
@@ -327,7 +327,7 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
             key = getConfiguration().getObjectName();
         }
         if (key == null) {
-            throw new IllegalArgumentException("Google Cloud Storage onject name header missing.");
+            throw new IllegalArgumentException("Google Cloud Storage object name header missing.");
         }
         return key;
     }
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
new file mode 100644
index 0000000..9470afc
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ComplexIntegrationTest.java
@@ -0,0 +1,132 @@
+package org.apache.camel.component.google.storage.integration;
+
+import java.io.ByteArrayInputStream;
+import java.util.List;
+
+import com.google.cloud.storage.Blob;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+public class ComplexIntegrationTest extends CamelTestSupport {
+
+    @EndpointInject
+    private ProducerTemplate template;
+
+    @EndpointInject("mock:bucket1")
+    private MockEndpoint mockBucket1;
+
+    @EndpointInject("mock:bucket2")
+    private MockEndpoint mockBucket2;
+
+    @EndpointInject("mock:processed")
+    private MockEndpoint mockProcessed;
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                final int numberOfObjects = 3;
+                //final String serviceAccountKeyFile = "somefile.json";
+                final String serviceAccountKeyFile = System.getenv("GOOGLE_APPLICATION_CREDENTIALS");
+                final String bucket1 = "camel_test_bucket1";
+                final String bucket2 = "camel_test_bucket2";
+                final String bucket3 = "camel_test_processed_bucket";
+                final String bucket4 = "camel_test_bucket4";
+
+                //upload 3 file into bucket1
+                byte[] payload = "Camel rocks!".getBytes();
+                ByteArrayInputStream bais = new ByteArrayInputStream(payload);
+                from("timer:timer1?repeatCount=" + numberOfObjects)
+                        .process(exchange -> {
+                            String filename = "file_" + ((int) (Math.random() * 10000)) + ".txt";
+                            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, filename);
+                            exchange.getIn().setBody(bais);
+                        })
+                        .to("google-storage://" + bucket1 + "?serviceAccountKey=" + serviceAccountKeyFile)
+                        .log("upload file object:${header.CamelGoogleCloudStorageObjectName}, body:${body}")
+                        .to("mock:bucket1");
+
+                //poll from bucket1, moving processed into bucket_processed and deleting original
+                from("google-storage://" + bucket1 + "?serviceAccountKey=" + serviceAccountKeyFile
+                     + "&moveAfterRead=true"
+                     + "&destinationBucket=" + bucket3
+                     + "&autoCreateBucket=true"
+                     + "&deleteAfterRead=true"
+                     + "&includeBody=true")
+                             .log("consuming: ${header.CamelGoogleCloudStorageBucketName}/${header.CamelGoogleCloudStorageObjectName}")
+                             .to("direct:processed")
+                             .to("mock:processed");
+
+                //upload these files to bucket2 
+                from("direct:processed")
+                        .to("google-storage://" + bucket2 + "?serviceAccountKey=" + serviceAccountKeyFile)
+                        .log("uploaded file object:${header.CamelGoogleCloudStorageObjectName}, body:${body}")
+                        .process(exchange -> {
+                            exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
+                        })
+                        .to("google-storage://" + bucket2 + "?serviceAccountKey=" + serviceAccountKeyFile
+                            + "&operation=createDownloadLink")
+                        .log("URL for ${header.CamelGoogleCloudStorageBucketName}/${header.CamelGoogleCloudStorageObjectName} =${body}")
+                        .to("mock:bucket2");
+                ;
+
+                //list all buckets
+                from("timer:timer1?repeatCount=1&fixedRate=true&period=10000")
+                        .to("google-storage://" + bucket2 + "?serviceAccountKey=" + serviceAccountKeyFile
+                            + "&operation=listBuckets")
+                        .log("list buckets:${body}");
+
+                //list all object of the bucket2 and send result to direct:moreinfo and direct:copy
+                from("timer:timer1?repeatCount=1&fixedRate=true&period=10000")
+                        .to("google-storage://" + bucket2 + "?serviceAccountKey=" + serviceAccountKeyFile
+                            + "&operation=listObjects")
+                        .log("list " + bucket2 + " objects body:${body}")
+                        .split(bodyAs(List.class))
+                        .log("splitted: ${body}")
+                        .multicast().to("direct:moreinfo", "direct:copy");
+
+                from("direct:moreinfo")
+                        .process(exchange -> {
+                            Blob blob = exchange.getIn().getBody(Blob.class);
+                            String fileName = blob.getName();
+                            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, fileName);
+                        })
+                        .to("google-storage://" + bucket2 + "?serviceAccountKey=" + serviceAccountKeyFile
+                            + "&operation=getObject")
+                        .log("get object bucket:${header.CamelGoogleCloudStorageBucketName} object:${header.CamelGoogleCloudStorageObjectName}, body:${body}");
+
+                //copy object
+                from("direct:copy")
+                        .process(exchange -> {
+                            Blob blob = exchange.getIn().getBody(Blob.class);
+                            String fileName = blob.getName();
+                            String copyFileName = "copy_" + fileName;
+                            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, fileName);
+                            exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, bucket4);
+                            exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, copyFileName);
+                        })
+                        .to("google-storage://" + bucket2 + "?serviceAccountKey=" + serviceAccountKeyFile
+                            + "&operation=copyObject")
+                        .log("${body}");
+
+            }
+        };
+    }
+
+    @Test
+    public void sendIn() throws Exception {
+        mockBucket1.expectedMessageCount(3);
+        mockBucket2.expectedMessageCount(3);
+        mockProcessed.expectedMessageCount(3);
+
+        Thread.sleep(10000);
+        assertMockEndpointsSatisfied();
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ConsumerIntegrationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ConsumerIntegrationTest.java
deleted file mode 100644
index 5d19daf..0000000
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ConsumerIntegrationTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.apache.camel.component.google.storage.integration;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-public class ConsumerIntegrationTest extends CamelTestSupport {
-
-    @EndpointInject
-    private ProducerTemplate template;
-
-    @EndpointInject("mock:result")
-    private MockEndpoint result;
-
-    @EndpointInject("mock:consumedObjects")
-    private MockEndpoint consumedObjects;
-
-    private final String bucketName = "rafa_test_bucket";
-    final String serviceAccountKey = "C:\\Users\\rmarc\\Desktop\\LABS\\GCP_Storage\\FunctionExampleProject-c59c4a999d8a.json";
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-
-                String endpoint = String.format("google-storage://%s?serviceAccountKey=%s&autoCreateBucket=true", bucketName,
-                        serviceAccountKey);
-                //String endpoint = String.format("google-storage://%s?autoCreateBucket=true", bucketName);
-
-                from("direct:putObject")
-                        .startupOrder(1)
-                        .to(endpoint)
-                        .to("mock:result");
-
-                from("google-storage://myCamelBucket?"
-                     + "moveAfterRead=true"
-                     + "&destinationBucket=camelDestinationBucket"
-                     + "&autoCreateBucket=true"
-                     + "&deleteAfterRead=true"
-                     + "&includeBody=true")
-                             .startupOrder(2)
-                             .log("consuming: ${header.CamelGoogleCloudStorageBucketName}/${header.CamelGoogleCloudStorageObjectName}, body=${body}")
-                             .to("mock:consumedObjects");
-
-            }
-        };
-    }
-
-    @Test
-    public void sendIn() throws Exception {
-        result.expectedMessageCount(3);
-        consumedObjects.expectedMessageCount(3);
-
-        //upload a files
-
-        template.send("direct:putObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test.txt");
-            exchange.getIn().setBody("Test");
-        });
-
-        template.send("direct:putObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test1.txt");
-            exchange.getIn().setBody("Test1");
-        });
-
-        template.send("direct:putObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test2.txt");
-            exchange.getIn().setBody("Test2");
-        });
-        /*
-        Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
-            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listBuckets);
-        });
-        List<Bucket> bucketsList = listBucketsExchange.getMessage().getBody(List.class);
-        LOG.info("bucketsList {}", bucketsList );
-        
-        
-        Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listObjects);
-        });
-        LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
-        */
-        Thread.sleep(10000);
-        assertMockEndpointsSatisfied();
-    }
-
-}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ProducerIntegrationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ProducerIntegrationTest.java
deleted file mode 100644
index 2c76f0b..0000000
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ProducerIntegrationTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.apache.camel.component.google.storage.integration;
-
-import java.io.ByteArrayInputStream;
-import java.util.List;
-
-import com.google.cloud.storage.Blob;
-import com.google.cloud.storage.Bucket;
-import org.apache.camel.EndpointInject;
-import org.apache.camel.Exchange;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations;
-import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-public class ProducerIntegrationTest extends CamelTestSupport {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ProducerIntegrationTest.class);
-
-    @EndpointInject
-    private ProducerTemplate template;
-
-    @EndpointInject("mock:result")
-    private MockEndpoint result;
-
-    private final String bucketName = "rafa_test_bucket";
-    final String serviceAccountKey = "C:\\Users\\rmarc\\Desktop\\LABS\\GCP_Storage\\FunctionExampleProject-c59c4a999d8a.json";
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            public void configure() {
-
-                String endpoint = String.format("google-storage://%s?serviceAccountKey=%s&autoCreateBucket=true", bucketName,
-                        serviceAccountKey);
-                //String endpoint = String.format("google-storage://%s?autoCreateBucket=true", bucketName);
-
-                from("direct:addObject").to(endpoint);
-                from("direct:getObject").to(endpoint);
-                from("direct:listBucket").log("-> ${body}").to(endpoint).log("--> ${body}");
-                from("direct:listObjects").to(endpoint).log("--> ${body}");
-                from("direct:downloadLink").to(endpoint);
-                from("direct:deleteObject").to(endpoint);
-                from("direct:deleteBucket").to(endpoint).to("mock:result");
-
-            }
-        };
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void sendIn() throws Exception {
-        LOG.info("start sending something");
-        result.expectedMessageCount(1);
-
-        final String FILENAME_1 = "just_a_file.txt";
-
-        //upload a file
-        byte[] payload = "Hi, How are you ?".getBytes();
-        ByteArrayInputStream bais = new ByteArrayInputStream(payload);
-        Exchange addObjectExchange = template.request("direct:addObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.CONTENT_ENCODING, "text/plain");
-            exchange.getIn().setBody(bais);
-        });
-        Blob addObject = addObjectExchange.getMessage().getBody(Blob.class);
-        LOG.info("addObject {}", addObject);
-        assertNotNull(addObject);
-        assertEquals(FILENAME_1, addObject.getName());
-
-        Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.listBuckets);
-        });
-        List<Bucket> bucketsList = listBucketsExchange.getMessage().getBody(List.class);
-        LOG.info("bucketsList {}", bucketsList);
-        assertEquals(1, bucketsList.size());
-
-        Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
-            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.listObjects);
-        });
-        LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
-        List<Blob> resp = listObjectsExchange.getMessage().getBody(List.class);
-        assertEquals(1, resp.size());
-        assertEquals(FILENAME_1, resp.get(0).getName());
-        /*
-        Exchange getObjectExchange = template.request("direct:getObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.getObject);
-            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
-        });
-        Blob getObject = getObjectExchange.getMessage().getBody(Blob.class);
-        LOG.info("getObject: {}", getObject);
-        assertNotNull(getObject);
-        assertEquals(FILENAME_1, getObject.getName());
-        
-        /*
-        //sign url
-        Exchange downloadLinkExchange = template.request( "direct:downloadLink", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.createDownloadLink);
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "readme.txt" );
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
-        });
-        URL downloadLink = downloadLinkExchange.getMessage().getBody(URL.class);
-        LOG.info("downloadLink {}", downloadLink );
-        assertNotNull( downloadLink );
-        */
-        /*
-        Exchange deleteObjectExchange = template.send("direct:deleteObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.deleteObject);
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
-        });
-        
-        boolean deleteObject = deleteObjectExchange.getMessage().getBody(Boolean.class).booleanValue();
-        LOG.info("deleteObject {}", deleteObject);
-        assertTrue(deleteObject);
-        
-        Exchange deleteBucketExchange = template.send("direct:deleteBucket", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
-                    GoogleCloudStorageComponentOperations.deleteBucket);
-        });
-        boolean deleteBucket = deleteBucketExchange.getMessage().getBody(Boolean.class).booleanValue();
-        LOG.info("deleteBucket {}", deleteBucket);
-        assertTrue(deleteBucket);
-        
-        assertMockEndpointsSatisfied();
-        */
-    }
-
-}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
index 9a7cda6..b2908e1 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
@@ -28,6 +28,7 @@ import com.google.cloud.storage.testing.StorageRpcTestBase;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+//this class has been extended from
 //https://github.com/googleapis/java-storage-nio/blob/master/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java
 /**
  * A bare-bones in-memory implementation of StorageRpc, meant for testing.
@@ -43,13 +44,13 @@ import org.slf4j.LoggerFactory;
  * <li>object delete
  * <li>list the contents of a bucket
  * <li>generations
+ * <li>NOW SUPPORTED bucket create
+ * <li>NOW SUPPORTED bucket get
+ * <li>NOW SUPPORTED bucket delete
+ * <li>NOW SUPPORTED list all buckets
  * </ul>
  * <li>Unsupported
  * <ul>
- * <li>bucket create
- * <li>bucket get
- * <li>bucket delete
- * <li>list all buckets
  * <li>file attributes
  * <li>patch
  * <li>continueRewrite
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
index 9d1e827..fb28518 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/LocalStorageHelper.java
@@ -4,6 +4,8 @@ import com.google.cloud.spi.ServiceRpcFactory;
 import com.google.cloud.storage.StorageOptions;
 import com.google.cloud.storage.spi.v1.StorageRpc;
 
+//this class has been extended from
+//https://github.com/googleapis/java-storage-nio/blob/master/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/LocalStorageHelper.java
 /**
  * Utility to create an in-memory storage configuration for testing. Storage options can be obtained via the
  * {@link #getOptions()} method. Returned options will point to FakeStorageRpc.
@@ -18,13 +20,13 @@ import com.google.cloud.storage.spi.v1.StorageRpc;
  * <li>object get
  * <li>object delete
  * <li>list the contents of a bucket
+ * <li>bucket create (now supported)
+ * <li>bucket get (now supported)
+ * <li>bucket delete (now supported)
+ * <li>list all buckets (now supported)
  * </ul>
  * <li>Unsupported operations
  * <ul>
- * <li>bucket create
- * <li>bucket get
- * <li>bucket delete
- * <li>list all buckets
  * <li>generations
  * <li>file attributes
  * <li>patch
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
index b6b3c4f..184fedd 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ConsumerLocalTest.java
@@ -42,7 +42,7 @@ public class ConsumerLocalTest extends GoogleCloudStorageBaseTest {
                      + "&deleteAfterRead=true"
                      + "&includeBody=true")
                              .startupOrder(2)
-                             .log("consuming: ${header.CamelGoogleCloudStorageBucketName}/${header.CamelGoogleCloudStorageObjectName}, body=${body}")
+                             //.log("consuming: ${header.CamelGoogleCloudStorageBucketName}/${header.CamelGoogleCloudStorageObjectName}, body=${body}")
                              .to("mock:consumedObjects");
 
             }
@@ -51,41 +51,25 @@ public class ConsumerLocalTest extends GoogleCloudStorageBaseTest {
 
     @Test
     public void sendIn() throws Exception {
-        result.expectedMessageCount(3);
-        consumedObjects.expectedMessageCount(3);
-
-        //upload a files
-
-        template.send("direct:putObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test.txt");
-            exchange.getIn().setBody("Test");
-        });
-
-        template.send("direct:putObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test1.txt");
-            exchange.getIn().setBody("Test1");
-        });
-
-        template.send("direct:putObject", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test2.txt");
-            exchange.getIn().setBody("Test2");
-        });
-        /*
-        Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
-            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listBuckets);
-        });
-        List<Bucket> bucketsList = listBucketsExchange.getMessage().getBody(List.class);
-        LOG.info("bucketsList {}", bucketsList );
-        
-        
-        Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
-            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listObjects);
-        });
-        LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
-        */
-        Thread.sleep(10000);
+
+        final int NUMBER_OF_FILES = 3;
+
+        result.expectedMessageCount(NUMBER_OF_FILES);
+        consumedObjects.expectedMessageCount(NUMBER_OF_FILES);
+
+        for (int i = 0; i < NUMBER_OF_FILES; i++) {
+            final String filename = String.format("file_%s.txt", i);
+            final String body = String.format("body_%s", i);
+            //upload a file
+            template.send("direct:putObject", exchange -> {
+                exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, filename);
+                exchange.getIn().setBody(body);
+            });
+        }
+
+        Thread.sleep(5000);
         assertMockEndpointsSatisfied();
+
     }
 
 }
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
index 591c633..1c0d731 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/ProducerLocalTest.java
@@ -69,7 +69,6 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
         assertEquals(FILENAME_1, addObject.getName());
 
         Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
-            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
                     GoogleCloudStorageComponentOperations.listBuckets);
         });
@@ -78,7 +77,6 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
         assertEquals(1, bucketsList.size());
 
         Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
-            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
                     GoogleCloudStorageComponentOperations.listObjects);
         });
@@ -90,7 +88,6 @@ public class ProducerLocalTest extends GoogleCloudStorageBaseTest {
         Exchange getObjectExchange = template.request("direct:getObject", exchange -> {
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
                     GoogleCloudStorageComponentOperations.getObject);
-            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
             exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
         });
         Blob getObject = getObjectExchange.getMessage().getBody(Blob.class);


[camel] 10/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 72777e50566e7ae6863c39f8e52f6ebd6f724998
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sat Feb 13 18:30:20 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../catalog/docs/google-storage-component.adoc     |  35 ++++--
 .../GoogleCloudStorageComponentConfigurer.java     |   6 +
 .../GoogleCloudStorageEndpointConfigurer.java      |   6 +
 .../GoogleCloudStorageEndpointUriFactory.java      |   3 +-
 .../component/google/storage/google-storage.json   |   2 +
 .../src/main/docs/google-storage-component.adoc    |  35 ++++--
 .../storage/GoogleCloudStorageComponent.java       |  16 +++
 .../GoogleCloudStorageComponentConfiguration.java  |  67 +++++-------
 .../GoogleCloudStorageComponentOperations.java     |  16 +++
 .../GoogleCloudStorageConnectionFactory.java       |  31 +++++-
 .../storage/GoogleCloudStorageConstants.java       |  55 +++++-----
 .../google/storage/GoogleCloudStorageConsumer.java | 121 +++++----------------
 .../google/storage/GoogleCloudStorageEndpoint.java |  74 ++++++-------
 .../google/storage/GoogleCloudStorageProducer.java |  32 +++---
 .../dsl/GoogleStorageComponentBuilderFactory.java  |  19 ++++
 .../GoogleCloudStorageEndpointBuilderFactory.java  |  37 +++++++
 .../ROOT/pages/google-storage-component.adoc       |  35 ++++--
 17 files changed, 349 insertions(+), 241 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index 7754e9a..a473b5e 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -14,7 +14,7 @@ include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-sto
 
 *{component-header}*
 
-The Google Storage component provides access to https://cloud.google.com/storage/[Cloud Storage] via
+The Google Storage component provides access to https://cloud.google.com/storage/[Google Cloud Storage] via
 the https://github.com/googleapis/java-storage[google java storage library].
 
 Maven users will need to add the following dependency to their pom.xml
@@ -46,26 +46,43 @@ Google security credentials can be set explicitly by providing the path to the G
 export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-or directly through the component endpoint
+or for windows:
+
 [source,text]
 --------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+$Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-
+or directly through the component endpoint
+[source,text]
+--------------------------------------------------------
+String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
+--------------------------------------------------------
 
 == URI Format
 
 [source,text]
 --------------------------------------------------------
-        google-storage://bucketName?[options]
+google-storage://bucketNameOrArn?[options]
 --------------------------------------------------------
 
+The bucket will be created if it don't already exists. +
+ You can append query options to the URI in the following format,
+?options=value&option2=value&...
+
+For example in order to read file `hello.txt` from bucket `helloBucket`, use the following snippet:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&prefix=hello.txt")
+  .to("file:/var/downloaded");
+--------------------------------------------------------------------------------
+
 
-== Options
+== URI Options
 
 // component options: START
-The Google Storage component supports 13 options, which are listed below.
+The Google Storage component supports 14 options, which are listed below.
 
 
 
@@ -80,6 +97,7 @@ The Google Storage component supports 13 options, which are listed below.
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | Object name |  | String
@@ -107,7 +125,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (29 parameters):
+=== Query Parameters (30 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -120,6 +138,7 @@ with the following path and query parameters:
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
index 559d418..f2aa873 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
@@ -41,6 +41,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "destinationBucket": getOrCreateConfiguration(target).setDestinationBucket(property(camelContext, java.lang.String.class, value)); return true;
         case "includebody":
         case "includeBody": getOrCreateConfiguration(target).setIncludeBody(property(camelContext, boolean.class, value)); return true;
+        case "includefolders":
+        case "includeFolders": getOrCreateConfiguration(target).setIncludeFolders(property(camelContext, boolean.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
         case "moveafterread":
@@ -72,6 +74,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "destinationBucket": return java.lang.String.class;
         case "includebody":
         case "includeBody": return boolean.class;
+        case "includefolders":
+        case "includeFolders": return boolean.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "moveafterread":
@@ -104,6 +108,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "destinationBucket": return getOrCreateConfiguration(target).getDestinationBucket();
         case "includebody":
         case "includeBody": return getOrCreateConfiguration(target).isIncludeBody();
+        case "includefolders":
+        case "includeFolders": return getOrCreateConfiguration(target).isIncludeFolders();
         case "lazystartproducer":
         case "lazyStartProducer": return target.isLazyStartProducer();
         case "moveafterread":
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
index fe3ab5f..1e8d17a 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
@@ -43,6 +43,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "greedy": target.setGreedy(property(camelContext, boolean.class, value)); return true;
         case "includebody":
         case "includeBody": target.getConfiguration().setIncludeBody(property(camelContext, boolean.class, value)); return true;
+        case "includefolders":
+        case "includeFolders": target.getConfiguration().setIncludeFolders(property(camelContext, boolean.class, value)); return true;
         case "initialdelay":
         case "initialDelay": target.setInitialDelay(property(camelContext, long.class, value)); return true;
         case "lazystartproducer":
@@ -104,6 +106,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "greedy": return boolean.class;
         case "includebody":
         case "includeBody": return boolean.class;
+        case "includefolders":
+        case "includeFolders": return boolean.class;
         case "initialdelay":
         case "initialDelay": return long.class;
         case "lazystartproducer":
@@ -166,6 +170,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "greedy": return target.isGreedy();
         case "includebody":
         case "includeBody": return target.getConfiguration().isIncludeBody();
+        case "includefolders":
+        case "includeFolders": return target.getConfiguration().isIncludeFolders();
         case "initialdelay":
         case "initialDelay": return target.getInitialDelay();
         case "lazystartproducer":
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
index dbd0a68..86fe7f9 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
@@ -20,7 +20,7 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(30);
+        Set<String> props = new HashSet<>(31);
         props.add("backoffMultiplier");
         props.add("bucketName");
         props.add("destinationBucket");
@@ -40,6 +40,7 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
         props.add("sendEmptyMessageWhenIdle");
         props.add("schedulerProperties");
         props.add("exchangePattern");
+        props.add("includeFolders");
         props.add("storageClient");
         props.add("backoffIdleThreshold");
         props.add("lazyStartProducer");
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index a139f6c..7e946ab 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -30,6 +30,7 @@
     "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. Th [...]
     "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRe [...]
     "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body  [...]
+    "includeFolders": { "kind": "property", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is f [...]
     "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after they [...]
     "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 [...]
     "objectName": { "kind": "property", "displayName": "Object Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Object name" },
@@ -45,6 +46,7 @@
     "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. T [...]
     "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterR [...]
     "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the Object exchange will be consumed and put into the body [...]
+    "includeFolders": { "kind": "parameter", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is  [...]
     "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from the origin bucket to a different bucket after the [...]
     "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
     "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 [...]
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index 7754e9a..a473b5e 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -14,7 +14,7 @@ include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-sto
 
 *{component-header}*
 
-The Google Storage component provides access to https://cloud.google.com/storage/[Cloud Storage] via
+The Google Storage component provides access to https://cloud.google.com/storage/[Google Cloud Storage] via
 the https://github.com/googleapis/java-storage[google java storage library].
 
 Maven users will need to add the following dependency to their pom.xml
@@ -46,26 +46,43 @@ Google security credentials can be set explicitly by providing the path to the G
 export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-or directly through the component endpoint
+or for windows:
+
 [source,text]
 --------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+$Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-
+or directly through the component endpoint
+[source,text]
+--------------------------------------------------------
+String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
+--------------------------------------------------------
 
 == URI Format
 
 [source,text]
 --------------------------------------------------------
-        google-storage://bucketName?[options]
+google-storage://bucketNameOrArn?[options]
 --------------------------------------------------------
 
+The bucket will be created if it don't already exists. +
+ You can append query options to the URI in the following format,
+?options=value&option2=value&...
+
+For example in order to read file `hello.txt` from bucket `helloBucket`, use the following snippet:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&prefix=hello.txt")
+  .to("file:/var/downloaded");
+--------------------------------------------------------------------------------
+
 
-== Options
+== URI Options
 
 // component options: START
-The Google Storage component supports 13 options, which are listed below.
+The Google Storage component supports 14 options, which are listed below.
 
 
 
@@ -80,6 +97,7 @@ The Google Storage component supports 13 options, which are listed below.
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | Object name |  | String
@@ -107,7 +125,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (29 parameters):
+=== Query Parameters (30 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -120,6 +138,7 @@ with the following path and query parameters:
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
index 8ff9591..f53a171 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage;
 
 import java.util.Map;
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
index c77e5b3..5355ec8 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage;
 
 import com.google.cloud.storage.Storage;
@@ -29,28 +45,18 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
 
     @UriParam(label = "consumer")
     private boolean moveAfterRead;
+
     @UriParam(label = "consumer")
     private String destinationBucket;
-    //    @UriParam(label = "consumer")
-    //    private String destinationBucketPrefix;
-    //    @UriParam(label = "consumer")
-    //    private String destinationBucketSuffix;
+
     @UriParam(label = "consumer", defaultValue = "true")
     private boolean deleteAfterRead = true;
-    /*
-    @UriParam(label = "consumer")
-    private String fileName;
-    @UriParam(label = "consumer")
-    private String prefix;
-    @UriParam(label = "consumer")
-    private String delimiter;
-    @UriParam(label = "consumer")
-    private String doneFileName;
-    */
+
     @UriParam(label = "consumer", defaultValue = "true")
     private boolean includeBody = true;
-    //@UriParam(label = "consumer", defaultValue = "true")
-    //private boolean includeFolders = true;
+
+    @UriParam(label = "consumer", defaultValue = "true")
+    private boolean includeFolders = true;
 
     @UriParam
     private Storage storageClient;
@@ -151,41 +157,18 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
         this.destinationBucket = destinationBucket;
     }
 
-    /*
-    public String getDestinationBucketPrefix() {
-        return destinationBucketPrefix;
-    }
-    
-    /**
-     * Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true.
-     *
-    public void setDestinationBucketPrefix(String destinationBucketPrefix) {
-        this.destinationBucketPrefix = destinationBucketPrefix;
-    }
-    
-    public String getDestinationBucketSuffix() {
-        return destinationBucketSuffix;
-    }
-    
-    /**
-     * Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true.
-     *
-    public void setDestinationBucketSuffix(String destinationBucketSuffix) {
-        this.destinationBucketSuffix = destinationBucketSuffix;
-    }
-    
     /**
      * If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will
      * not be created for those
-     *
+     */
     public void setIncludeFolders(boolean includeFolders) {
         this.includeFolders = includeFolders;
     }
-    
+
     public boolean isIncludeFolders() {
         return includeFolders;
     }
-    */
+
     public boolean isDeleteAfterRead() {
         return deleteAfterRead;
     }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java
index f81597e..2415b6b 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentOperations.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage;
 
 public enum GoogleCloudStorageComponentOperations {
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
index 04ede16..e27c763 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
@@ -1,7 +1,24 @@
 package org.apache.camel.component.google.storage;
 
+/*
+ * 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.
+ */
 import java.io.FileInputStream;
 
+import com.google.api.client.util.Strings;
 import com.google.auth.oauth2.ServiceAccountCredentials;
 import com.google.cloud.storage.Storage;
 import com.google.cloud.storage.StorageOptions;
@@ -9,10 +26,16 @@ import com.google.cloud.storage.StorageOptions;
 public class GoogleCloudStorageConnectionFactory {
 
     public static Storage create(GoogleCloudStorageComponentConfiguration configuration) throws Exception {
-        Storage storage = StorageOptions.newBuilder()
-                .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream(configuration.getServiceAccountKey())))
-                .build().getService();
-        return storage;
+        if (!Strings.isNullOrEmpty(configuration.getServiceAccountKey())) {
+            Storage storage = StorageOptions.newBuilder()
+                    .setCredentials(
+                            ServiceAccountCredentials.fromStream(new FileInputStream(configuration.getServiceAccountKey())))
+                    .build().getService();
+            return storage;
+        } else {
+            Storage storage = StorageOptions.getDefaultInstance().getService();
+            return storage;
+        }
     }
 
 }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
index 5fda9ed..b16fc9d 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage;
 
 public class GoogleCloudStorageConstants {
@@ -15,31 +31,18 @@ public class GoogleCloudStorageConstants {
     public static final String CONTENT_ENCODING = "CamelGoogleCloudStorageContentEncoding";
     public static final String CONTENT_MD5 = "CamelGoogleCloudStorageContentMd5";
 
-    /*
-    public static final String BUCKET = "BUCKET";
-    public static final String CACHE_CONTROL = "CACHE_CONTROL";
-    
-    public static final String COMPONENT_COUNT = "COMPONENT_COUNT";
-    public static final String CONTENT_DISPOSITION = "CONTENT_DISPOSITION";
-    public static final String CONTENT_ENCODING = "CONTENT_ENCODING";
-    public static final String CONTENT_LANGUAGE = "CONTENT_LANGUAGE";
-    public static final String CONTENT_TYPE = "CONTENT_TYPE";
-    public static final String CUSTOM_TIME = "CUSTOM_TIME";
-    public static final String CRC32C = "CRC32C";
-    public static final String CRC32C_HEX_STRING = "CRC32C_HEX_STRING";
-    public static final String ETAG = "ETAG";
-    public static final String GENERATION = "GENERATION";
-    public static final String ID = "ID";
-    public static final String KMS_KEY_NAME = "KMS_KEY_NAME";
-    public static final String MD5_HASH = "MD5_HASH";
-    public static final String MD5_HEX_STRING = "MD5_HEX_STRING";
-    public static final String MEDIA_LINK ="MEDIA_LINK";
-    public static final String METAGENERATION = "METAGENERATION";
-    public static final String NAME = "NAME";
-    public static final String SIZE = "SIZE";
-    public static final String SORAGE_CLASS = "STORAGE_CLASS";
-    public static final String TIME_CREATED = "TIME_CREATED";
-    public static final String LAST_METADATA_UPDATE = "LAST_METADATA_UPDATE";
-    */
+    public static final String METADATA_COMPONENT_COUNT = "CamelGoogleCloudStorageComponentCount";
+    public static final String METADATA_CONTENT_LANGUAGE = "CamelGoogleCloudStorageContentLanguage";
+    public static final String METADATA_CUSTOM_TIME = "CamelGoogleCloudStorageCustomTime";
+    public static final String METADATA_CRC32C_hex = "CamelGoogleCloudStorageCrc32cHex";
+    public static final String METADATA_ETAG = "CamelGoogleCloudStorageETag";
+    public static final String METADATA_GENERATION = "CamelGoogleCloudStorageGeneration";
+    public static final String METADATA_BLOB_ID = "CamelGoogleCloudStorageBlobId";
+    public static final String METADATA_KMS_KEY_NAME = "CamelGoogleCloudStorageKmsKeyName";
+    public static final String METADATA_MEDIA_LINK = "CamelGoogleCloudStorageMediaLink";
+    public static final String METADATA_METAGENERATION = "CamelGoogleCloudStorageMetageneration";
+    public static final String METADATA_STORAGE_CLASS = "CamelGoogleCloudStorageStorageClass";
+    public static final String METADATA_CREATE_TIME = "CamelGoogleCloudStorageCreateTime";
+    public static final String METADATA_LAST_UPDATE = "CamelGoogleCloudStorageLastUpdate";
 
 }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
index 92cc6d4..42e7035 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage;
 
 import java.util.LinkedList;
@@ -64,13 +80,8 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
 
         String fileName = getConfiguration().getObjectName();
         String bucketName = getConfiguration().getBucketName();
-        //String doneFileName = getConfiguration().getDoneFileName();
         Queue<Exchange> exchanges = new LinkedList<>();
 
-        //TODO ripristinare
-        //if (!doneFileCheckPasses(bucketName, doneFileName)) {
-        //    exchanges = new LinkedList<>();
-        //} else 
         if (fileName != null) {
             LOG.trace("Getting object in bucket [{}] with file name [{}]...", bucketName, fileName);
 
@@ -85,32 +96,6 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
                 bloblist.add(blob);
             }
 
-            /*
-            ListObjectsRequest.Builder listObjectsRequest = ListObjectsRequest.builder();
-            listObjectsRequest.bucket(bucketName);
-            listObjectsRequest.prefix(getConfiguration().getPrefix());
-            listObjectsRequest.delimiter(getConfiguration().getDelimiter());
-            
-            if (maxMessagesPerPoll > 0) {
-                listObjectsRequest.maxKeys(maxMessagesPerPoll);
-            }
-            // if there was a marker from previous poll then use that to
-            // continue from where we left last time
-            if (marker != null) {
-                LOG.trace("Resuming from marker: {}", marker);
-                listObjectsRequest.marker(marker);
-            }
-            
-            ListObjectsResponse listObjects = getAmazonS3Client().listObjects(listObjectsRequest.build());
-            
-            if (listObjects.isTruncated()) {
-                marker = listObjects.nextMarker();
-                LOG.trace("Returned list is truncated, so setting next marker: {}", marker);
-            } else {
-                // no more data so clear marker
-                marker = null;
-            }
-            */
             if (LOG.isTraceEnabled()) {
                 LOG.trace("Found {} objects in bucket [{}]...", bloblist.size(), bucketName);
             }
@@ -121,30 +106,6 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
         return processBatch(CastUtils.cast(exchanges));
     }
 
-    /*
-    private boolean doneFileCheckPasses(String bucketName, String doneFileName) {
-        if (doneFileName == null) {
-            return true;
-        } else {
-            return checkFileExists(bucketName, doneFileName);
-        }
-    }
-    */
-
-    /*
-    private boolean checkFileExists(String bucketName, String doneFileName) {
-        HeadObjectRequest.Builder headObjectsRequest = HeadObjectRequest.builder();
-        headObjectsRequest.bucket(bucketName);
-        headObjectsRequest.key(doneFileName);
-        try {
-            getAmazonS3Client().headObject(headObjectsRequest.build());
-            return true;
-        } catch (NoSuchKeyException e) {
-            return false;
-        }
-    }
-    */
-
     protected Queue<Exchange> createExchanges(Blob blob, String key) {
         Queue<Exchange> answer = new LinkedList<>();
         Exchange exchange = getEndpoint().createExchange(blob, key);
@@ -157,41 +118,18 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
             LOG.trace("Received {} messages in this poll", blobList.size());
         }
 
-        //Collection<Blob> blobs = new ArrayList<>();
         Queue<Exchange> answer = new LinkedList<>();
         try {
             for (Blob blob : blobList) {
-                /*
-                Builder getRequest
-                        = GetObjectRequest.builder().bucket(getConfiguration().getBucketName()).key(s3ObjectSummary.key());
-                if (getConfiguration().isUseCustomerKey()) {
-                    if (ObjectHelper.isNotEmpty(getConfiguration().getCustomerKeyId())) {
-                        getRequest.sseCustomerKey(getConfiguration().getCustomerKeyId());
-                    }
-                    if (ObjectHelper.isNotEmpty(getConfiguration().getCustomerKeyMD5())) {
-                        getRequest.sseCustomerKeyMD5(getConfiguration().getCustomerKeyMD5());
-                    }
-                    if (ObjectHelper.isNotEmpty(getConfiguration().getCustomerAlgorithm())) {
-                        getRequest.sseCustomerAlgorithm(getConfiguration().getCustomerAlgorithm());
-                    }
-                }*/
-                //ResponseInputStream<GetObjectResponse> s3Object = getAmazonS3Client().getObject(getRequest.build(), ResponseTransformer.toInputStream());
-
-                //if (includeS3Object(s3Object)) {
-                //    blobs.add(s3Object);
-                Exchange exchange = getEndpoint().createExchange(blob, blob.getBlobId().getName());
-                answer.add(exchange);
-                //} else {
-                // If includeFolders != true and the object is not included, it is safe to close the object here.
-                // If includeFolders == true, the exchange will close the object.
-                //    IOHelper.close(s3Object);
-                //}
+
+                if (includeObject(blob)) {
+                    Exchange exchange = getEndpoint().createExchange(blob, blob.getBlobId().getName());
+                    answer.add(exchange);
+                }
+
             }
         } catch (Exception e) {
             LOG.warn("Error getting object due: {}", e.getMessage(), e);
-            // ensure all previous gathered s3 objects are closed
-            // if there was an exception creating the exchanges in this batch
-            //s3Objects.forEach(IOHelper::close);
             throw e;
         }
 
@@ -206,16 +144,11 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
      */
     protected boolean includeObject(Blob blob) {
 
-        //    if (getConfiguration().isIncludeFolders()) {
-        //        return true;
-        //    } else {
-        //TODO understand if the object is a directory
-
+        if (getConfiguration().isIncludeFolders()) {
+            return true;
+        }
         // Config says to ignore folders/directories
-        //return !Optional.of(((GetObjectResponse) s3Object.response()).contentType()).orElse("")
-        //        .toLowerCase().startsWith("application/x-directory");
-        return true;
-        //}
+        return blob.getName().endsWith("/");
     }
 
     @Override
@@ -245,7 +178,7 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
 
                 @Override
                 public String toString() {
-                    return "S3ConsumerOnCompletion";
+                    return "ConsumerOnCompletion";
                 }
             });
 
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index a5a3f83..028642a 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -1,6 +1,23 @@
+/*
+ * 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.google.storage;
 
 import java.io.ByteArrayOutputStream;
+import java.util.Date;
 
 import com.google.cloud.storage.Blob;
 import com.google.cloud.storage.Bucket;
@@ -120,7 +137,6 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
                 blob.downloadTo(baos);
                 message.setBody(baos.toByteArray());
-
             } catch (Exception e) {
                 throw new RuntimeCamelException(e);
             }
@@ -130,42 +146,26 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
 
         message.setHeader(GoogleCloudStorageConstants.OBJECT_NAME, key);
         message.setHeader(GoogleCloudStorageConstants.BUCKET_NAME, getConfiguration().getBucketName());
-        /*
-        TODO
-        message.setHeader(AWS2S3Constants.E_TAG, s3Object.response().eTag());
-        message.setHeader(AWS2S3Constants.LAST_MODIFIED, s3Object.response().lastModified());
-        message.setHeader(AWS2S3Constants.VERSION_ID, s3Object.response().versionId());
-        message.setHeader(AWS2S3Constants.CONTENT_TYPE, s3Object.response().contentType());
-        message.setHeader(AWS2S3Constants.CONTENT_LENGTH, s3Object.response().contentLength());
-        message.setHeader(AWS2S3Constants.CONTENT_ENCODING, s3Object.response().contentEncoding());
-        message.setHeader(AWS2S3Constants.CONTENT_DISPOSITION, s3Object.response().contentDisposition());
-        message.setHeader(AWS2S3Constants.CACHE_CONTROL, s3Object.response().cacheControl());
-        message.setHeader(AWS2S3Constants.SERVER_SIDE_ENCRYPTION, s3Object.response().serverSideEncryption());
-        message.setHeader(AWS2S3Constants.EXPIRATION_TIME, s3Object.response().expiration());
-        message.setHeader(AWS2S3Constants.REPLICATION_STATUS, s3Object.response().replicationStatus());
-        message.setHeader(AWS2S3Constants.STORAGE_CLASS, s3Object.response().storageClass());
-        message.setHeader(AWS2S3Constants.METADATA, s3Object.response().metadata());
-        */
-        /*
-         * If includeBody == true, it is safe to close the object here because the S3Object
-         * was consumed already. If includeBody != true, the caller is responsible for
-         * closing the stream once the body has been fully consumed or use the autoCloseBody
-         * configuration to automatically schedule the body closing at the end of exchange.
-         */
-        /*
-        if (configuration.isIncludeBody()) {
-            IOHelper.close(s3Object);
-        } else {
-            if (configuration.isAutocloseBody()) {
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
-                    @Override
-                    public void onDone(Exchange exchange) {
-                        IOHelper.close(s3Object);
-                    }
-                });
-            }
-        }
-        */
+        //OTHER METADATA        
+        message.setHeader(GoogleCloudStorageConstants.CACHE_CONTROL, blob.getCacheControl());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_COMPONENT_COUNT, blob.getComponentCount());
+        message.setHeader(GoogleCloudStorageConstants.CONTENT_DISPOSITION, blob.getContentDisposition());
+        message.setHeader(GoogleCloudStorageConstants.CONTENT_ENCODING, blob.getContentEncoding());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_CONTENT_LANGUAGE, blob.getContentLanguage());
+        message.setHeader(GoogleCloudStorageConstants.CONTENT_TYPE, blob.getContentType());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_CUSTOM_TIME, blob.getCustomTime());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_CRC32C_hex, blob.getCrc32cToHexString());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_ETAG, blob.getEtag());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_GENERATION, blob.getGeneration());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_BLOB_ID, blob.getBlobId());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_KMS_KEY_NAME, blob.getKmsKeyName());
+        message.setHeader(GoogleCloudStorageConstants.CONTENT_MD5, blob.getMd5ToHexString());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_MEDIA_LINK, blob.getMediaLink());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_METAGENERATION, blob.getMetageneration());
+        message.setHeader(GoogleCloudStorageConstants.CONTENT_LENGTH, blob.getSize());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_STORAGE_CLASS, blob.getStorageClass());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_CREATE_TIME, blob.getCreateTime());
+        message.setHeader(GoogleCloudStorageConstants.METADATA_LAST_UPDATE, new Date(blob.getUpdateTime()));
 
         return exchange;
     }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
index 37f48e2..9cf73b5 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageProducer.java
@@ -1,3 +1,19 @@
+/*
+ * 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.google.storage;
 
 import java.io.ByteArrayInputStream;
@@ -100,7 +116,7 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
         } else {
             is = exchange.getIn().getMandatoryBody(InputStream.class);
             baos = determineLengthInputStream(is);
-            //TODO improve here
+
             if (objectMetadata.containsKey(Exchange.CONTENT_LENGTH)) {
                 if (objectMetadata.get("Content-Length").equals("0")
                         && ObjectHelper.isEmpty(exchange.getProperty(Exchange.CONTENT_LENGTH))) {
@@ -137,12 +153,9 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
         Message message = getMessageForResponse(exchange);
         message.setBody(createdBlob);
 
+        IOHelper.close(baos);
         IOHelper.close(is);
-        /*
-        //TODO improve here
-         * if (getConfiguration().isDeleteAfterWrite() && filePayload != null) {
-         * FileUtil.deleteFile(filePayload); }
-         */
+
     }
 
     private ByteArrayOutputStream determineLengthInputStream(InputStream is) throws IOException {
@@ -307,17 +320,10 @@ public class GoogleCloudStorageProducer extends DefaultProducer {
     }
 
     private String determineBucketName(Exchange exchange) {
-        //String bucketName = exchange.getIn().getHeader(GoogleCloudStorageConstants.BUCKET_NAME, String.class);
-
-        //if (ObjectHelper.isEmpty(bucketName)) {
         String bucketName = getConfiguration().getBucketName();
-        //    LOG.trace("Google Cloud Storage Bucket name header is missing, using default one [{}]", bucketName);
-        //}
-
         if (bucketName == null) {
             throw new IllegalArgumentException("Bucket name is missing or not configured.");
         }
-
         return bucketName;
     }
 
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index 4bb5f79..4c8a69d 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -190,6 +190,24 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
+         * If it is true, the folders/directories will be consumed. If it is
+         * false, they will be ignored, and Exchanges will not be created for
+         * those.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeFolders the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder includeFolders(
+                boolean includeFolders) {
+            doSetProperty("includeFolders", includeFolders);
+            return this;
+        }
+        /**
          * Move objects from the origin bucket to a different bucket after they
          * have been retrieved. To accomplish the operation the
          * destinationBucket option must be set. The copy bucket operation is
@@ -317,6 +335,7 @@ public interface GoogleStorageComponentBuilderFactory {
             case "deleteAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDeleteAfterRead((boolean) value); return true;
             case "destinationBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDestinationBucket((java.lang.String) value); return true;
             case "includeBody": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setIncludeBody((boolean) value); return true;
+            case "includeFolders": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setIncludeFolders((boolean) value); return true;
             case "moveAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setMoveAfterRead((boolean) value); return true;
             case "lazyStartProducer": ((GoogleCloudStorageComponent) component).setLazyStartProducer((boolean) value); return true;
             case "objectName": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setObjectName((java.lang.String) value); return true;
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index 87fe200d..804ccf7 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -265,6 +265,43 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
+         * If it is true, the folders/directories will be consumed. If it is
+         * false, they will be ignored, and Exchanges will not be created for
+         * those.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeFolders the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder includeFolders(
+                boolean includeFolders) {
+            doSetProperty("includeFolders", includeFolders);
+            return this;
+        }
+        /**
+         * If it is true, the folders/directories will be consumed. If it is
+         * false, they will be ignored, and Exchanges will not be created for
+         * those.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: true
+         * Group: consumer
+         * 
+         * @param includeFolders the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder includeFolders(
+                String includeFolders) {
+            doSetProperty("includeFolders", includeFolders);
+            return this;
+        }
+        /**
          * Move objects from the origin bucket to a different bucket after they
          * have been retrieved. To accomplish the operation the
          * destinationBucket option must be set. The copy bucket operation is
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index 9bc1d1b..447289a 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -16,7 +16,7 @@ include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-sto
 
 *{component-header}*
 
-The Google Storage component provides access to https://cloud.google.com/storage/[Cloud Storage] via
+The Google Storage component provides access to https://cloud.google.com/storage/[Google Cloud Storage] via
 the https://github.com/googleapis/java-storage[google java storage library].
 
 Maven users will need to add the following dependency to their pom.xml
@@ -48,26 +48,43 @@ Google security credentials can be set explicitly by providing the path to the G
 export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-or directly through the component endpoint
+or for windows:
+
 [source,text]
 --------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
+$Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"
 --------------------------------------------------------
 
-
+or directly through the component endpoint
+[source,text]
+--------------------------------------------------------
+String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
+--------------------------------------------------------
 
 == URI Format
 
 [source,text]
 --------------------------------------------------------
-        google-storage://bucketName?[options]
+google-storage://bucketNameOrArn?[options]
 --------------------------------------------------------
 
+The bucket will be created if it don't already exists. +
+ You can append query options to the URI in the following format,
+?options=value&option2=value&...
+
+For example in order to read file `hello.txt` from bucket `helloBucket`, use the following snippet:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&prefix=hello.txt")
+  .to("file:/var/downloaded");
+--------------------------------------------------------------------------------
+
 
-== Options
+== URI Options
 
 // component options: START
-The Google Storage component supports 13 options, which are listed below.
+The Google Storage component supports 14 options, which are listed below.
 
 
 
@@ -82,6 +99,7 @@ The Google Storage component supports 13 options, which are listed below.
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
 | *objectName* (producer) | Object name |  | String
@@ -109,7 +127,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (29 parameters):
+=== Query Parameters (30 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -122,6 +140,7 @@ with the following path and query parameters:
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body and closed. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
+| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler


[camel] 31/31: CAMEL-15964 - Full regen

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit df83ef58b82c5c7306ab1b2e133498a060b3e770
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 17 07:22:40 2021 +0100

    CAMEL-15964 - Full regen
---
 .../org/apache/camel/catalog/docs.properties       |   2 +-
 .../catalog/docs/google-storage-component.adoc     | 397 --------------------
 docs/components/modules/ROOT/nav.adoc              |   1 -
 .../ROOT/pages/google-storage-component.adoc       | 399 ---------------------
 docs/components/modules/others/nav.adoc            |   1 +
 5 files changed, 2 insertions(+), 798 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
index d260d11..3f924e5 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
@@ -196,7 +196,7 @@ google-mail-stream-component
 google-pubsub-component
 google-sheets-component
 google-sheets-stream-component
-google-storage-component
+google-storage
 google-summary
 gora-component
 grape-component
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
deleted file mode 100644
index ee5dec8..0000000
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ /dev/null
@@ -1,397 +0,0 @@
-[[google-storage-component]]
-= Google Storage Component
-:docTitle: Google Storage
-:artifactId: camel-google-storage
-:description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
-:since: 3.9
-:supportLevel: Preview
-:component-header: Both producer and consumer are supported
-include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
-//Manually maintained attributes
-:group: Google
-
-*Since Camel {since}*
-
-*{component-header}*
-
-The Google Storage component provides access to https://cloud.google.com/storage/[Google Cloud Storage] via
-the https://github.com/googleapis/java-storage[google java storage library].
-
-Maven users will need to add the following dependency to their pom.xml
-for this component:
-
-[source,xml]
-------------------------------------------------------
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-google-storage</artifactId>
-    <!-- use the same version as your Camel core version -->
-    <version>x.x.x</version>
-</dependency>
-
-------------------------------------------------------
-
-[[GoogleStorage-AuthenticationConfiguration]]
-
-== Authentication Configuration
-
-Google Storage component authentication is targeted for use with the GCP Service Accounts.
-For more information please refer to https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication[Google Storage Auth Guide].
-
-When you have the **service account key** you can provide authentication credentials to your application code.
-Google security credentials can be set through the component endpoint:
-[source,text]
---------------------------------------------------------
-String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
---------------------------------------------------------
-
-Or by providing the path to the GCP credentials file location:
-
-Provide authentication credentials to your application code by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS` :
-
-[source,text]
---------------------------------------------------------
-export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
---------------------------------------------------------
-
-
-== URI Format
-
-[source,text]
---------------------------------------------------------
-google-storage://bucketNameOrArn?[options]
---------------------------------------------------------
-
-By default the bucket will be created if it don't already exists. +
-You can append query options to the URI in the following format,
-?options=value&option2=value&...
-
-For example in order to read file `hello.txt` from bucket `myCamelBucket`, use the following snippet:
-
-[source,java]
---------------------------------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&objectName=hello.txt")
-  .to("file:/var/downloaded");
---------------------------------------------------------------------------------
-
-
-== URI Options
-
-// component options: START
-The Google Storage component supports 16 options, which are listed below.
-
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *configuration* (common) | The component configuration |  | GoogleCloudStorageConfiguration
-| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
-| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | *Autowired* The storage client |  | Storage
-| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
-| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
-| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
-| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
-| *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
-| *autowiredEnabled* (advanced) | 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. | true | boolean
-|===
-// component options: END
-
-// endpoint options: START
-The Google Storage endpoint is configured using URI syntax:
-
-----
-google-storage:bucketName
-----
-
-with the following path and query parameters:
-
-=== Path Parameters (1 parameters):
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *bucketName* | *Required* Bucket name or ARN |  | String
-|===
-
-
-=== Query Parameters (32 parameters):
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
-| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | *Autowired* The storage client |  | Storage
-| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
-| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
-| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
-| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
-| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
-| *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
-| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
-| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
-| *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
-| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
-| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
-| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
-| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
-| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
-| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
-| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
-| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
-| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
-| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler | none | Object
-| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
-| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
-| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. There are 7 enums and the value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
-| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
-|===
-// endpoint options: END
-
-
-== Usage
-
-=== Message headers evaluated by the Google Storage Producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
-
-|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
-
-|`CamelGoogleCloudStorageDestinationBucketName` |`String` |The bucket Destination Name which will be used for the current operation
-
-|`CamelGoogleCloudStorageDestinationObjectName` |`String` |The object Destination Name which will be used for the current operation
-
-|`CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
-
-|`CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
-
-
-|`CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
-
-|`CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
-
-|`CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
-
-|`CamelGoogleCloudStorageOperation` |`String` |The operation to perform. Permitted values are copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink
-
-|`CamelGoogleCloudStorageDownloadLinkExpirationTime` |`Long` |The time in millisecond the download link will be valid.
-
-|=======================================================================
-
-=== Message headers set by the Google Storage Producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelGoogleCloudStorageETag` |`String` |The ETag value for the newly uploaded object.
-
-|=======================================================================
-
-=== Message headers set by the Google Storage Consumer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
-|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
-| `CamelGoogleCloudStorageCacheControl` |`String` | The Cache-Control metadata can specify two different aspects of how data is served from Cloud Storage: whether the data can be cached and whether the data can be transformed
-| `CamelGoogleCloudStorageComponentCount` |`String` | The component count of this object
-| `CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
-| `CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
-| `CamelGoogleCloudStorageContentLanguage` |`String` | The Content-Language metadata indicates the language(s) that the object is intended for.
-| `CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
-| `CamelGoogleCloudStorageCustomTime` |`String` | The Custom-Time metadata is a user-specified date and time represented in the RFC 3339 format YYYY-MM-DD'T'HH:MM:SS.SS'Z' or YYYY-MM-DD'T'HH:MM:SS'Z' when milliseconds are zero. This metadata is typically set in order to use the DaysSinceCustomTime condition in Object Lifecycle Management.
-| `CamelGoogleCloudStorageCrc32cHex` |`String` | The CRC32c of the object
-| `CamelGoogleCloudStorageETag` |`String` | The ETag for the Object.
-| `CamelGoogleCloudStorageGeneration` |`String` | Is the generation number of the object for which you are retrieving information.
-| `CamelGoogleCloudStorageBlobId` |`String` | The blob id of the object
-| `CamelGoogleCloudStorageKmsKeyName` |`String` | The KMS key name
-| `CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
-| `CamelGoogleCloudStorageMediaLink` |`String` | The media link
-| `CamelGoogleCloudStorageMetageneration` | `String` | The metageneration of the object
-| `CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
-| `CamelGoogleCloudStorageStorageClass` | `String` | The storage class of the object
-| `CamelGoogleCloudStorageCreateTime` |`String` | The creation time of the object
-| `CamelGoogleCloudStorageLastUpdate` |`String` | The last update of the object
-|=======================================================================
-
-=== Google Storage Producer operations
-
-Google Storage component provides the following operation on the producer side:
-
-- copyObject
-- listObjects
-- deleteObject
-- deleteBucket
-- listBuckets
-- getObject
-- createDownloadLink
-
-If you don't specify an operation explicitly the producer will a file upload.
-
-=== Advanced component configuration
-
-If you need to have more control over the `storageClient` instance configuration, you can create your own instance and refer to it in your Camel google-storage component configuration:
-
-[source,java]
---------------------------------------------------------------------------------
-from("google-storage://myCamelBucket?storageClient=#client")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-=== Google Storage Producer Operation examples
-
-- File Upload: This operation will upload a file to the Google Storage based on the body content
-
-[source,java]
---------------------------------------------------------------------------------
-//upload a file
-byte[] payload = "Camel rocks!".getBytes();
-ByteArrayInputStream bais = new ByteArrayInputStream(payload);
-from("direct:start")
-.process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
-    exchange.getIn().setBody(bais);    
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
-.log("uploaded file object:${header.CamelGoogleCloudStorageObjectName}, body:${body}");
---------------------------------------------------------------------------------
-
-This operation will upload the file camel.txt with the content "Camel rocks!" in the myCamelBucket bucket
-
-- CopyObject: this operation copy an object from one bucket to a different one
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.copyObject);
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, "myCamelBucket_dest");
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, "camel_copy.txt");
-  })
-  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will copy the object with the name expressed in the header DESTINATION_OBJECT_NAME to the DESTINATION_BUCKET_NAME bucket, from the bucket myCamelBucket.
-
-- DeleteObject: this operation deletes an object from a bucket
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.deleteObject);
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
-  })
-  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will delete the object from the bucket myCamelBucket.
-
-- ListBuckets: this operation list the buckets for this account in this region
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listBuckets")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will list the buckets for this account.
-
-- DeleteBucket: this operation delete the bucket specified as URI parameter or header
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=deleteBucket")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will delete the bucket myCamelBucket.
-
-- ListObjects: this operation list object in a specific bucket
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listObjects")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will list the objects in the myCamelBucket bucket.
-
-- GetObject: this operation get a single object in a specific bucket
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.process( exchange -> {
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=getObject")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will return an Blob objct instance related to the OBJECT_NAME object in myCamelBucket bucket.
-
-- CreateDownloadLink: this operation will return a download link
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.process( exchange -> {
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=createDownloadLink")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will return a download link url for the file OBJECT_NAME in the bucket myCamelBucket. It's possible to specify the expiration time for the created link through the header DOWNLOAD_LINK_EXPIRATION_TIME. If not specified, by default it is 5 minutes.
-
-== Bucket Autocreation
-
-With the option `autoCreateBucket` users are able to avoid the autocreation of a Bucket in case it doesn't exist. The default for this option is `true`.
-If set to false any operation on a not-existent bucket won't be successful and an error will be returned.
-
-== MoveAfterRead consumer option
-
-In addition to deleteAfterRead it has been added another option, moveAfterRead. With this option enabled the consumed object will be moved to a target destinationBucket instead of being only deleted.
-This will require specifying the destinationBucket option. As example:
-
-[source,java]
---------------------------------------------------------------------------------
-  from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json"
-    + "&autoCreateBucket=true"
-    + "&destinationBucket=myCamelProcessedBucket"
-    + "&moveAfterRead=true"
-    + "&deleteAfterRead=true"
-    + "&includeBody=true"
-  )
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-In this case the objects consumed will be moved to myCamelProcessedBucket bucket and deleted from the original one (because of deleteAfterRead).
diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index a2e7087..0b396c2 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -145,7 +145,6 @@
 *** xref:google-pubsub-component.adoc[Google Pubsub]
 *** xref:google-sheets-component.adoc[Google Sheets]
 *** xref:google-sheets-stream-component.adoc[Google Sheets Stream]
-*** xref:google-storage-component.adoc[Google Storage]
 ** xref:gora-component.adoc[Gora]
 ** xref:grape-component.adoc[Grape]
 ** xref:graphql-component.adoc[GraphQL]
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
deleted file mode 100644
index af10d7e..0000000
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ /dev/null
@@ -1,399 +0,0 @@
-[[google-storage-component]]
-= Google Storage Component
-//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
-:page-source: components/camel-google-storage/src/main/docs/google-storage-component.adoc
-:docTitle: Google Storage
-:artifactId: camel-google-storage
-:description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
-:since: 3.9
-:supportLevel: Preview
-:component-header: Both producer and consumer are supported
-include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
-//Manually maintained attributes
-:group: Google
-
-*Since Camel {since}*
-
-*{component-header}*
-
-The Google Storage component provides access to https://cloud.google.com/storage/[Google Cloud Storage] via
-the https://github.com/googleapis/java-storage[google java storage library].
-
-Maven users will need to add the following dependency to their pom.xml
-for this component:
-
-[source,xml]
-------------------------------------------------------
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-google-storage</artifactId>
-    <!-- use the same version as your Camel core version -->
-    <version>x.x.x</version>
-</dependency>
-
-------------------------------------------------------
-
-[[GoogleStorage-AuthenticationConfiguration]]
-
-== Authentication Configuration
-
-Google Storage component authentication is targeted for use with the GCP Service Accounts.
-For more information please refer to https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication[Google Storage Auth Guide].
-
-When you have the **service account key** you can provide authentication credentials to your application code.
-Google security credentials can be set through the component endpoint:
-[source,text]
---------------------------------------------------------
-String endpoint = "google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
---------------------------------------------------------
-
-Or by providing the path to the GCP credentials file location:
-
-Provide authentication credentials to your application code by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS` :
-
-[source,text]
---------------------------------------------------------
-export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
---------------------------------------------------------
-
-
-== URI Format
-
-[source,text]
---------------------------------------------------------
-google-storage://bucketNameOrArn?[options]
---------------------------------------------------------
-
-By default the bucket will be created if it don't already exists. +
-You can append query options to the URI in the following format,
-?options=value&option2=value&...
-
-For example in order to read file `hello.txt` from bucket `myCamelBucket`, use the following snippet:
-
-[source,java]
---------------------------------------------------------------------------------
-from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&objectName=hello.txt")
-  .to("file:/var/downloaded");
---------------------------------------------------------------------------------
-
-
-== URI Options
-
-// component options: START
-The Google Storage component supports 16 options, which are listed below.
-
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *configuration* (common) | The component configuration |  | GoogleCloudStorageConfiguration
-| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
-| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | *Autowired* The storage client |  | Storage
-| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
-| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
-| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
-| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
-| *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
-| *autowiredEnabled* (advanced) | 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. | true | boolean
-|===
-// component options: END
-
-// endpoint options: START
-The Google Storage endpoint is configured using URI syntax:
-
-----
-google-storage:bucketName
-----
-
-with the following path and query parameters:
-
-=== Path Parameters (1 parameters):
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *bucketName* | *Required* Bucket name or ARN |  | String
-|===
-
-
-=== Query Parameters (32 parameters):
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
-| *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
-| *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | *Autowired* The storage client |  | Storage
-| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
-| *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
-| *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
-| *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *includeBody* (consumer) | If it is true, the Object exchange will be consumed and put into the body. If false the Object stream will be put raw into the body and the headers will be set with the object metadata. | true | boolean
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
-| *moveAfterRead* (consumer) | Move objects from the origin bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
-| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
-| *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
-| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
-| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
-| *lazyStartProducer* (producer) | 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 [...]
-| *objectName* (producer) | The Object name inside the bucket |  | String
-| *operation* (producer) | Set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageOperations
-| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
-| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
-| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
-| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
-| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
-| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
-| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
-| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
-| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
-| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler | none | Object
-| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
-| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
-| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. There are 7 enums and the value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
-| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
-|===
-// endpoint options: END
-
-
-== Usage
-
-=== Message headers evaluated by the Google Storage Producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
-
-|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
-
-|`CamelGoogleCloudStorageDestinationBucketName` |`String` |The bucket Destination Name which will be used for the current operation
-
-|`CamelGoogleCloudStorageDestinationObjectName` |`String` |The object Destination Name which will be used for the current operation
-
-|`CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
-
-|`CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
-
-
-|`CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
-
-|`CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
-
-|`CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
-
-|`CamelGoogleCloudStorageOperation` |`String` |The operation to perform. Permitted values are copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink
-
-|`CamelGoogleCloudStorageDownloadLinkExpirationTime` |`Long` |The time in millisecond the download link will be valid.
-
-|=======================================================================
-
-=== Message headers set by the Google Storage Producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelGoogleCloudStorageETag` |`String` |The ETag value for the newly uploaded object.
-
-|=======================================================================
-
-=== Message headers set by the Google Storage Consumer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
-|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be used for the current operation
-| `CamelGoogleCloudStorageCacheControl` |`String` | The Cache-Control metadata can specify two different aspects of how data is served from Cloud Storage: whether the data can be cached and whether the data can be transformed
-| `CamelGoogleCloudStorageComponentCount` |`String` | The component count of this object
-| `CamelGoogleCloudStorageContentDisposition` |`String` |The content disposition of this object.
-| `CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of this object.
-| `CamelGoogleCloudStorageContentLanguage` |`String` | The Content-Language metadata indicates the language(s) that the object is intended for.
-| `CamelGoogleCloudStorageContentType` |`String` |The content type of this object.
-| `CamelGoogleCloudStorageCustomTime` |`String` | The Custom-Time metadata is a user-specified date and time represented in the RFC 3339 format YYYY-MM-DD'T'HH:MM:SS.SS'Z' or YYYY-MM-DD'T'HH:MM:SS'Z' when milliseconds are zero. This metadata is typically set in order to use the DaysSinceCustomTime condition in Object Lifecycle Management.
-| `CamelGoogleCloudStorageCrc32cHex` |`String` | The CRC32c of the object
-| `CamelGoogleCloudStorageETag` |`String` | The ETag for the Object.
-| `CamelGoogleCloudStorageGeneration` |`String` | Is the generation number of the object for which you are retrieving information.
-| `CamelGoogleCloudStorageBlobId` |`String` | The blob id of the object
-| `CamelGoogleCloudStorageKmsKeyName` |`String` | The KMS key name
-| `CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this object.
-| `CamelGoogleCloudStorageMediaLink` |`String` | The media link
-| `CamelGoogleCloudStorageMetageneration` | `String` | The metageneration of the object
-| `CamelGoogleCloudStorageContentLength` |`Long` |The content length of this object.
-| `CamelGoogleCloudStorageStorageClass` | `String` | The storage class of the object
-| `CamelGoogleCloudStorageCreateTime` |`String` | The creation time of the object
-| `CamelGoogleCloudStorageLastUpdate` |`String` | The last update of the object
-|=======================================================================
-
-=== Google Storage Producer operations
-
-Google Storage component provides the following operation on the producer side:
-
-- copyObject
-- listObjects
-- deleteObject
-- deleteBucket
-- listBuckets
-- getObject
-- createDownloadLink
-
-If you don't specify an operation explicitly the producer will a file upload.
-
-=== Advanced component configuration
-
-If you need to have more control over the `storageClient` instance configuration, you can create your own instance and refer to it in your Camel google-storage component configuration:
-
-[source,java]
---------------------------------------------------------------------------------
-from("google-storage://myCamelBucket?storageClient=#client")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-=== Google Storage Producer Operation examples
-
-- File Upload: This operation will upload a file to the Google Storage based on the body content
-
-[source,java]
---------------------------------------------------------------------------------
-//upload a file
-byte[] payload = "Camel rocks!".getBytes();
-ByteArrayInputStream bais = new ByteArrayInputStream(payload);
-from("direct:start")
-.process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
-    exchange.getIn().setBody(bais);    
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
-.log("uploaded file object:${header.CamelGoogleCloudStorageObjectName}, body:${body}");
---------------------------------------------------------------------------------
-
-This operation will upload the file camel.txt with the content "Camel rocks!" in the myCamelBucket bucket
-
-- CopyObject: this operation copy an object from one bucket to a different one
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.copyObject);
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_BUCKET_NAME, "myCamelBucket_dest");
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.DESTINATION_OBJECT_NAME, "camel_copy.txt");
-  })
-  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will copy the object with the name expressed in the header DESTINATION_OBJECT_NAME to the DESTINATION_BUCKET_NAME bucket, from the bucket myCamelBucket.
-
-- DeleteObject: this operation deletes an object from a bucket
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start").process( exchange -> {
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageOperations.deleteObject);
-    exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
-  })
-  .to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will delete the object from the bucket myCamelBucket.
-
-- ListBuckets: this operation list the buckets for this account in this region
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listBuckets")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will list the buckets for this account.
-
-- DeleteBucket: this operation delete the bucket specified as URI parameter or header
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=deleteBucket")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will delete the bucket myCamelBucket.
-
-- ListObjects: this operation list object in a specific bucket
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listObjects")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will list the objects in the myCamelBucket bucket.
-
-- GetObject: this operation get a single object in a specific bucket
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.process( exchange -> {
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt");
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=getObject")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will return an Blob objct instance related to the OBJECT_NAME object in myCamelBucket bucket.
-
-- CreateDownloadLink: this operation will return a download link
-
-[source,java]
---------------------------------------------------------------------------------
-from("direct:start")
-.process( exchange -> {
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "camel.txt" );
-  exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
-})
-.to("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json&operation=createDownloadLink")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will return a download link url for the file OBJECT_NAME in the bucket myCamelBucket. It's possible to specify the expiration time for the created link through the header DOWNLOAD_LINK_EXPIRATION_TIME. If not specified, by default it is 5 minutes.
-
-== Bucket Autocreation
-
-With the option `autoCreateBucket` users are able to avoid the autocreation of a Bucket in case it doesn't exist. The default for this option is `true`.
-If set to false any operation on a not-existent bucket won't be successful and an error will be returned.
-
-== MoveAfterRead consumer option
-
-In addition to deleteAfterRead it has been added another option, moveAfterRead. With this option enabled the consumed object will be moved to a target destinationBucket instead of being only deleted.
-This will require specifying the destinationBucket option. As example:
-
-[source,java]
---------------------------------------------------------------------------------
-  from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json"
-    + "&autoCreateBucket=true"
-    + "&destinationBucket=myCamelProcessedBucket"
-    + "&moveAfterRead=true"
-    + "&deleteAfterRead=true"
-    + "&includeBody=true"
-  )
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-In this case the objects consumed will be moved to myCamelProcessedBucket bucket and deleted from the original one (because of deleteAfterRead).
diff --git a/docs/components/modules/others/nav.adoc b/docs/components/modules/others/nav.adoc
index 826cd42..5c0f775 100644
--- a/docs/components/modules/others/nav.adoc
+++ b/docs/components/modules/others/nav.adoc
@@ -10,6 +10,7 @@
 ** xref:cxf-transport.adoc[CXF Transport]
 ** xref:elytron.adoc[Elytron]
 ** xref:etcd3.adoc[Etcd3]
+** xref:google-storage.adoc[Google Storage]
 ** xref:headersmap.adoc[Headersmap]
 ** xref:hystrix.adoc[Hystrix]
 ** xref:jasypt.adoc[Jasypt]


[camel] 20/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 33ddcea7107f8ed2f752434a16eaf64bb9f068e7
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Mon Feb 15 10:54:23 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/pom.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/components/pom.xml b/components/pom.xml
index 3f2e10e..aad9726 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -216,6 +216,7 @@
         <module>camel-google-mail</module>
         <module>camel-google-pubsub</module>
         <module>camel-google-sheets</module>
+		<module>camel-google-storage</module>
         <module>camel-gora</module>
         <module>camel-grape</module>
         <module>camel-graphql</module>


[camel] 08/31: CAMEL-15964 create camel-google-storage omponent

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2c10f0801bd872e5151eb6c444f0fc0708642450
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sat Feb 13 16:45:35 2021 +0100

    CAMEL-15964 create camel-google-storage omponent
---
 .../catalog/docs/google-storage-component.adoc     |  18 +--
 components/camel-google-storage/ReadMe.md          |   4 +
 components/camel-google-storage/pom.xml            |   2 +-
 .../GoogleCloudStorageComponentConfigurer.java     |  30 +----
 .../GoogleCloudStorageEndpointConfigurer.java      |  30 +----
 .../GoogleCloudStorageEndpointUriFactory.java      |   7 +-
 .../src/generated/resources/google-storage.json    |   2 +-
 .../component/google/storage/google-storage.json   |  14 +-
 .../src/main/docs/google-storage-component.adoc    |  18 +--
 .../storage/GoogleCloudStorageComponent.java       |   7 -
 .../GoogleCloudStorageComponentConfiguration.java  |  68 +++++-----
 ...ogleCloudStorageComponentVerifierExtension.java |  82 ------------
 .../GoogleCloudStorageConnectionFactory.java       |  18 +++
 .../google/storage/GoogleCloudStorageConsumer.java |  20 +--
 .../google/storage/GoogleCloudStorageEndpoint.java |  34 +++--
 .../storage/client/StorageInternalClient.java      |   7 -
 .../client/StorageInternalClientFactory.java       |  11 --
 .../storage/client/StorageInternalClientImpl.java  |  44 -------
 .../integration/ConsumerIntegrationTest.java       |  93 ++++++++++++++
 .../integration/ProducerIntegrationTest.java       | 141 +++++++++++++++++++++
 .../storage/localstorage/FakeStorageRpc.java       |   8 +-
 ...ogleCloudStorageComponentConfigurationTest.java |  14 +-
 .../dsl/GoogleStorageComponentBuilderFactory.java  |  65 +---------
 .../GoogleCloudStorageEndpointBuilderFactory.java  |  99 +++------------
 .../ROOT/pages/google-storage-component.adoc       |  18 +--
 25 files changed, 394 insertions(+), 460 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index c26ce4a..b6cdfc5 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -65,7 +65,7 @@ from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downlo
 == Options
 
 // component options: START
-The Google Storage component supports 16 options, which are listed below.
+The Google Storage component supports 13 options, which are listed below.
 
 
 
@@ -75,18 +75,15 @@ The Google Storage component supports 16 options, which are listed below.
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *objectName* (common) | objectName |  | String
-| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
-| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -110,7 +107,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (32 parameters):
+=== Query Parameters (29 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -118,22 +115,19 @@ with the following path and query parameters:
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *objectName* (common) | objectName |  | String
-| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
-| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
diff --git a/components/camel-google-storage/ReadMe.md b/components/camel-google-storage/ReadMe.md
index fe73812..ee5f91c 100644
--- a/components/camel-google-storage/ReadMe.md
+++ b/components/camel-google-storage/ReadMe.md
@@ -25,6 +25,10 @@ When you have the **service account key** you can provide authentication credent
 
 `export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"`
 
+or for windows:
+
+`$Env:GOOGLE_APPLICATION_CREDENTIALS = "/home/user/Downloads/my-key.json"`
+
 or directly through the component endpoint
 
 `from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downloads/my-key.json")`
diff --git a/components/camel-google-storage/pom.xml b/components/camel-google-storage/pom.xml
index 832fa11..c30357a 100644
--- a/components/camel-google-storage/pom.xml
+++ b/components/camel-google-storage/pom.xml
@@ -33,7 +33,7 @@
   <description>Camel Component for Google Cloud Platform Storage</description>
 
   <properties>
-    <firstVersion>3.7.0</firstVersion>
+    <firstVersion>3.8.0</firstVersion>
   </properties>
 
   <dependencyManagement>
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
index 79a1fad..559d418 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
@@ -39,14 +39,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "deleteAfterRead": getOrCreateConfiguration(target).setDeleteAfterRead(property(camelContext, boolean.class, value)); return true;
         case "destinationbucket":
         case "destinationBucket": getOrCreateConfiguration(target).setDestinationBucket(property(camelContext, java.lang.String.class, value)); return true;
-        case "destinationbucketprefix":
-        case "destinationBucketPrefix": getOrCreateConfiguration(target).setDestinationBucketPrefix(property(camelContext, java.lang.String.class, value)); return true;
-        case "destinationbucketsuffix":
-        case "destinationBucketSuffix": getOrCreateConfiguration(target).setDestinationBucketSuffix(property(camelContext, java.lang.String.class, value)); return true;
         case "includebody":
         case "includeBody": getOrCreateConfiguration(target).setIncludeBody(property(camelContext, boolean.class, value)); return true;
-        case "includefolders":
-        case "includeFolders": getOrCreateConfiguration(target).setIncludeFolders(property(camelContext, boolean.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
         case "moveafterread":
@@ -54,8 +48,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "objectname":
         case "objectName": getOrCreateConfiguration(target).setObjectName(property(camelContext, java.lang.String.class, value)); return true;
         case "operation": getOrCreateConfiguration(target).setOperation(property(camelContext, org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class, value)); return true;
-        case "serviceaccountcredentials":
-        case "serviceAccountCredentials": getOrCreateConfiguration(target).setServiceAccountCredentials(property(camelContext, java.lang.String.class, value)); return true;
+        case "serviceaccountkey":
+        case "serviceAccountKey": getOrCreateConfiguration(target).setServiceAccountKey(property(camelContext, java.lang.String.class, value)); return true;
         case "storageclient":
         case "storageClient": getOrCreateConfiguration(target).setStorageClient(property(camelContext, com.google.cloud.storage.Storage.class, value)); return true;
         default: return false;
@@ -76,14 +70,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "deleteAfterRead": return boolean.class;
         case "destinationbucket":
         case "destinationBucket": return java.lang.String.class;
-        case "destinationbucketprefix":
-        case "destinationBucketPrefix": return java.lang.String.class;
-        case "destinationbucketsuffix":
-        case "destinationBucketSuffix": return java.lang.String.class;
         case "includebody":
         case "includeBody": return boolean.class;
-        case "includefolders":
-        case "includeFolders": return boolean.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "moveafterread":
@@ -91,8 +79,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "objectname":
         case "objectName": return java.lang.String.class;
         case "operation": return org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations.class;
-        case "serviceaccountcredentials":
-        case "serviceAccountCredentials": return java.lang.String.class;
+        case "serviceaccountkey":
+        case "serviceAccountKey": return java.lang.String.class;
         case "storageclient":
         case "storageClient": return com.google.cloud.storage.Storage.class;
         default: return null;
@@ -114,14 +102,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "deleteAfterRead": return getOrCreateConfiguration(target).isDeleteAfterRead();
         case "destinationbucket":
         case "destinationBucket": return getOrCreateConfiguration(target).getDestinationBucket();
-        case "destinationbucketprefix":
-        case "destinationBucketPrefix": return getOrCreateConfiguration(target).getDestinationBucketPrefix();
-        case "destinationbucketsuffix":
-        case "destinationBucketSuffix": return getOrCreateConfiguration(target).getDestinationBucketSuffix();
         case "includebody":
         case "includeBody": return getOrCreateConfiguration(target).isIncludeBody();
-        case "includefolders":
-        case "includeFolders": return getOrCreateConfiguration(target).isIncludeFolders();
         case "lazystartproducer":
         case "lazyStartProducer": return target.isLazyStartProducer();
         case "moveafterread":
@@ -129,8 +111,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "objectname":
         case "objectName": return getOrCreateConfiguration(target).getObjectName();
         case "operation": return getOrCreateConfiguration(target).getOperation();
-        case "serviceaccountcredentials":
-        case "serviceAccountCredentials": return getOrCreateConfiguration(target).getServiceAccountCredentials();
+        case "serviceaccountkey":
+        case "serviceAccountKey": return getOrCreateConfiguration(target).getServiceAccountKey();
         case "storageclient":
         case "storageClient": return getOrCreateConfiguration(target).getStorageClient();
         default: return null;
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
index 3fe8f99..fe3ab5f 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
@@ -36,10 +36,6 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "deleteAfterRead": target.getConfiguration().setDeleteAfterRead(property(camelContext, boolean.class, value)); return true;
         case "destinationbucket":
         case "destinationBucket": target.getConfiguration().setDestinationBucket(property(camelContext, java.lang.String.class, value)); return true;
-        case "destinationbucketprefix":
-        case "destinationBucketPrefix": target.getConfiguration().setDestinationBucketPrefix(property(camelContext, java.lang.String.class, value)); return true;
-        case "destinationbucketsuffix":
-        case "destinationBucketSuffix": target.getConfiguration().setDestinationBucketSuffix(property(camelContext, java.lang.String.class, value)); return true;
         case "exceptionhandler":
         case "exceptionHandler": target.setExceptionHandler(property(camelContext, org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exchangepattern":
@@ -47,8 +43,6 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "greedy": target.setGreedy(property(camelContext, boolean.class, value)); return true;
         case "includebody":
         case "includeBody": target.getConfiguration().setIncludeBody(property(camelContext, boolean.class, value)); return true;
-        case "includefolders":
-        case "includeFolders": target.getConfiguration().setIncludeFolders(property(camelContext, boolean.class, value)); return true;
         case "initialdelay":
         case "initialDelay": target.setInitialDelay(property(camelContext, long.class, value)); return true;
         case "lazystartproducer":
@@ -71,8 +65,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "schedulerProperties": target.setSchedulerProperties(property(camelContext, java.util.Map.class, value)); return true;
         case "sendemptymessagewhenidle":
         case "sendEmptyMessageWhenIdle": target.setSendEmptyMessageWhenIdle(property(camelContext, boolean.class, value)); return true;
-        case "serviceaccountcredentials":
-        case "serviceAccountCredentials": target.getConfiguration().setServiceAccountCredentials(property(camelContext, java.lang.String.class, value)); return true;
+        case "serviceaccountkey":
+        case "serviceAccountKey": target.getConfiguration().setServiceAccountKey(property(camelContext, java.lang.String.class, value)); return true;
         case "startscheduler":
         case "startScheduler": target.setStartScheduler(property(camelContext, boolean.class, value)); return true;
         case "storageclient":
@@ -103,10 +97,6 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "deleteAfterRead": return boolean.class;
         case "destinationbucket":
         case "destinationBucket": return java.lang.String.class;
-        case "destinationbucketprefix":
-        case "destinationBucketPrefix": return java.lang.String.class;
-        case "destinationbucketsuffix":
-        case "destinationBucketSuffix": return java.lang.String.class;
         case "exceptionhandler":
         case "exceptionHandler": return org.apache.camel.spi.ExceptionHandler.class;
         case "exchangepattern":
@@ -114,8 +104,6 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "greedy": return boolean.class;
         case "includebody":
         case "includeBody": return boolean.class;
-        case "includefolders":
-        case "includeFolders": return boolean.class;
         case "initialdelay":
         case "initialDelay": return long.class;
         case "lazystartproducer":
@@ -138,8 +126,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "schedulerProperties": return java.util.Map.class;
         case "sendemptymessagewhenidle":
         case "sendEmptyMessageWhenIdle": return boolean.class;
-        case "serviceaccountcredentials":
-        case "serviceAccountCredentials": return java.lang.String.class;
+        case "serviceaccountkey":
+        case "serviceAccountKey": return java.lang.String.class;
         case "startscheduler":
         case "startScheduler": return boolean.class;
         case "storageclient":
@@ -171,10 +159,6 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "deleteAfterRead": return target.getConfiguration().isDeleteAfterRead();
         case "destinationbucket":
         case "destinationBucket": return target.getConfiguration().getDestinationBucket();
-        case "destinationbucketprefix":
-        case "destinationBucketPrefix": return target.getConfiguration().getDestinationBucketPrefix();
-        case "destinationbucketsuffix":
-        case "destinationBucketSuffix": return target.getConfiguration().getDestinationBucketSuffix();
         case "exceptionhandler":
         case "exceptionHandler": return target.getExceptionHandler();
         case "exchangepattern":
@@ -182,8 +166,6 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "greedy": return target.isGreedy();
         case "includebody":
         case "includeBody": return target.getConfiguration().isIncludeBody();
-        case "includefolders":
-        case "includeFolders": return target.getConfiguration().isIncludeFolders();
         case "initialdelay":
         case "initialDelay": return target.getInitialDelay();
         case "lazystartproducer":
@@ -206,8 +188,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "schedulerProperties": return target.getSchedulerProperties();
         case "sendemptymessagewhenidle":
         case "sendEmptyMessageWhenIdle": return target.isSendEmptyMessageWhenIdle();
-        case "serviceaccountcredentials":
-        case "serviceAccountCredentials": return target.getConfiguration().getServiceAccountCredentials();
+        case "serviceaccountkey":
+        case "serviceAccountKey": return target.getConfiguration().getServiceAccountKey();
         case "startscheduler":
         case "startScheduler": return target.isStartScheduler();
         case "storageclient":
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
index 35339d8..dbd0a68 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
@@ -20,12 +20,11 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(33);
+        Set<String> props = new HashSet<>(30);
         props.add("backoffMultiplier");
         props.add("bucketName");
         props.add("destinationBucket");
         props.add("initialDelay");
-        props.add("serviceAccountCredentials");
         props.add("scheduler");
         props.add("bridgeErrorHandler");
         props.add("useFixedDelay");
@@ -35,15 +34,13 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
         props.add("scheduledExecutorService");
         props.add("repeatCount");
         props.add("timeUnit");
+        props.add("serviceAccountKey");
         props.add("autoCreateBucket");
-        props.add("destinationBucketSuffix");
         props.add("moveAfterRead");
         props.add("sendEmptyMessageWhenIdle");
         props.add("schedulerProperties");
         props.add("exchangePattern");
-        props.add("includeFolders");
         props.add("storageClient");
-        props.add("destinationBucketPrefix");
         props.add("backoffIdleThreshold");
         props.add("lazyStartProducer");
         props.add("delay");
diff --git a/components/camel-google-storage/src/generated/resources/google-storage.json b/components/camel-google-storage/src/generated/resources/google-storage.json
index d2e99a6..80bfd6a 100644
--- a/components/camel-google-storage/src/generated/resources/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/google-storage.json
@@ -5,7 +5,7 @@
     "title": "Google Storage",
     "description": "Camel Component for Google Cloud Platform Storage",
     "deprecated": false,
-    "firstVersion": "3.7.0",
+    "firstVersion": "3.8.0",
     "supportLevel": "Preview",
     "groupId": "org.apache.camel",
     "artifactId": "camel-google-storage",
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index 7fac5a9..2e1d205 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -25,40 +25,34 @@
     "autoCreateBucket": { "kind": "property", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
     "objectName": { "kind": "property", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
-    "serviceAccountCredentials": { "kind": "property", "displayName": "Service Account Credentials", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Specify the service account credentials file (json)" },
+    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key" },
     "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
     "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 [...]
     "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from S3 after they have been retrieved. The delete [...]
     "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRe [...]
-    "destinationBucketPrefix": { "kind": "property", "displayName": "Destination Bucket Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket prefix to use when an object must [...]
-    "destinationBucketSuffix": { "kind": "property", "displayName": "Destination Bucket Suffix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket suffix to use when an object must [...]
     "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the S3Object exchange will be consumed and put into the bod [...]
-    "includeFolders": { "kind": "property", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is f [...]
     "moveAfterRead": { "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from S3 bucket to a different bucket after they have be [...]
     "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 [...]
-    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "getObjectRange" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleClo [...]
+    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Googl [...]
     "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 [...]
   },
   "properties": {
     "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Bucket name" },
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "objectName": { "kind": "parameter", "displayName": "Object Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "objectName" },
-    "serviceAccountCredentials": { "kind": "parameter", "displayName": "Service Account Credentials", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Specify the service account credentials file (json)" },
+    "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key" },
     "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
     "bridgeErrorHandler": { "kind": "parameter", "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 m [...]
     "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from S3 after they have been retrieved. The delet [...]
     "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterR [...]
-    "destinationBucketPrefix": { "kind": "parameter", "displayName": "Destination Bucket Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket prefix to use when an object mus [...]
-    "destinationBucketSuffix": { "kind": "parameter", "displayName": "Destination Bucket Suffix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket suffix to use when an object mus [...]
     "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the S3Object exchange will be consumed and put into the bo [...]
-    "includeFolders": { "kind": "parameter", "displayName": "Include Folders", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "If it is true, the folders\/directories will be consumed. If it is  [...]
     "moveAfterRead": { "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Move objects from S3 bucket to a different bucket after they have b [...]
     "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
     "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." },
     "pollStrategy": { "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation  [...]
     "lazyStartProducer": { "kind": "parameter", "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 sta [...]
-    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "getObjectRange" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCl [...]
+    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations", "enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", "listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.Goog [...]
     "backoffErrorThreshold": { "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
     "backoffIdleThreshold": { "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
     "backoffMultiplier": { "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening agai [...]
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index c26ce4a..b6cdfc5 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -65,7 +65,7 @@ from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downlo
 == Options
 
 // component options: START
-The Google Storage component supports 16 options, which are listed below.
+The Google Storage component supports 13 options, which are listed below.
 
 
 
@@ -75,18 +75,15 @@ The Google Storage component supports 16 options, which are listed below.
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *objectName* (common) | objectName |  | String
-| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
-| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -110,7 +107,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (32 parameters):
+=== Query Parameters (29 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -118,22 +115,19 @@ with the following path and query parameters:
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *objectName* (common) | objectName |  | String
-| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
-| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
index d182493..8ff9591 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponent.java
@@ -7,14 +7,10 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Component("google-storage")
 public class GoogleCloudStorageComponent extends DefaultComponent {
 
-    private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageComponent.class);
-
     @Metadata
     private GoogleCloudStorageComponentConfiguration configuration = new GoogleCloudStorageComponentConfiguration();
 
@@ -24,12 +20,9 @@ public class GoogleCloudStorageComponent extends DefaultComponent {
 
     public GoogleCloudStorageComponent(CamelContext context) {
         super(context);
-
-        //registerExtension(new GoogleCloudStorageComponentVerifierExtension());
     }
 
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-        LOG.debug("create endopoint: uri={}, remaining={}, parameters={}", uri, remaining, parameters);
 
         if (remaining == null || remaining.trim().length() == 0) {
             throw new IllegalArgumentException("Bucket name must be specified.");
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
index 058b22b..49e8f8b 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -14,11 +14,14 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     @Metadata(required = true)
     private String bucketName;
 
-    @UriParam
-    private String serviceAccountCredentials;  //https://cloud.google.com/storage/docs/reference/libraries#setting_up_authentication
+    @UriParam(label = "common", description = "Service account key")
+    private String serviceAccountKey;
+
+    //@UriParam(label = "common", description = "ProjectId")
+    //private String projectId;
 
     @UriParam(label = "producer",
-              enums = "copyObject,listObjects,deleteObject,deleteBucket,listBuckets,getObject,getObjectRange")
+              enums = "copyObject,listObjects,deleteObject,deleteBucket,listBuckets,getObject,createDownloadLink")
     private GoogleCloudStorageComponentOperations operation;
 
     @UriParam
@@ -31,10 +34,10 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     private boolean moveAfterRead;
     @UriParam(label = "consumer")
     private String destinationBucket;
-    @UriParam(label = "consumer")
-    private String destinationBucketPrefix;
-    @UriParam(label = "consumer")
-    private String destinationBucketSuffix;
+    //    @UriParam(label = "consumer")
+    //    private String destinationBucketPrefix;
+    //    @UriParam(label = "consumer")
+    //    private String destinationBucketSuffix;
     @UriParam(label = "consumer", defaultValue = "true")
     private boolean deleteAfterRead = true;
     /*
@@ -49,8 +52,8 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     */
     @UriParam(label = "consumer", defaultValue = "true")
     private boolean includeBody = true;
-    @UriParam(label = "consumer", defaultValue = "true")
-    private boolean includeFolders = true;
+    //@UriParam(label = "consumer", defaultValue = "true")
+    //private boolean includeFolders = true;
 
     @UriParam
     private Storage storageClient;
@@ -66,23 +69,17 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
         this.bucketName = bucketName;
     }
 
-    public String getServiceAccountCredentials() {
-        return serviceAccountCredentials;
+    public String getServiceAccountKey() {
+        return serviceAccountKey;
     }
 
     /**
-     * Specify the service account credentials file (json)
+     * The Service account key that can be used as credentials for the Storage client.
+     * 
+     * @param serviceAccountKey
      */
-    public void setServiceAccountCredentials(String serviceAccountCredentials) {
-        this.serviceAccountCredentials = serviceAccountCredentials;
-    }
-
-    public GoogleCloudStorageComponentConfiguration copy() {
-        try {
-            return (GoogleCloudStorageComponentConfiguration) super.clone();
-        } catch (CloneNotSupportedException e) {
-            throw new RuntimeCamelException(e);
-        }
+    public void setServiceAccountKey(String serviceAccountKey) {
+        this.serviceAccountKey = serviceAccountKey;
     }
 
     public String getObjectName() {
@@ -157,40 +154,41 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
         this.destinationBucket = destinationBucket;
     }
 
+    /*
     public String getDestinationBucketPrefix() {
         return destinationBucketPrefix;
     }
-
+    
     /**
      * Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true.
-     */
+     *
     public void setDestinationBucketPrefix(String destinationBucketPrefix) {
         this.destinationBucketPrefix = destinationBucketPrefix;
     }
-
+    
     public String getDestinationBucketSuffix() {
         return destinationBucketSuffix;
     }
-
+    
     /**
      * Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true.
-     */
+     *
     public void setDestinationBucketSuffix(String destinationBucketSuffix) {
         this.destinationBucketSuffix = destinationBucketSuffix;
     }
-
+    
     /**
      * If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will
      * not be created for those
-     */
+     *
     public void setIncludeFolders(boolean includeFolders) {
         this.includeFolders = includeFolders;
     }
-
+    
     public boolean isIncludeFolders() {
         return includeFolders;
     }
-
+    */
     public boolean isDeleteAfterRead() {
         return deleteAfterRead;
     }
@@ -223,4 +221,12 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     public boolean isIncludeBody() {
         return includeBody;
     }
+
+    public GoogleCloudStorageComponentConfiguration copy() {
+        try {
+            return (GoogleCloudStorageComponentConfiguration) super.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
 }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentVerifierExtension.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentVerifierExtension.java
deleted file mode 100644
index f0f0ba8..0000000
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentVerifierExtension.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.apache.camel.component.google.storage;
-
-import java.util.Map;
-
-import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
-import org.apache.camel.component.extension.verifier.ResultBuilder;
-import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
-import org.apache.camel.component.extension.verifier.ResultErrorHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class GoogleCloudStorageComponentVerifierExtension extends DefaultComponentVerifierExtension {
-
-    private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageComponentVerifierExtension.class);
-
-    protected GoogleCloudStorageComponentVerifierExtension() {
-        super("google-storage");
-    }
-
-    protected GoogleCloudStorageComponentVerifierExtension(String scheme) {
-        super(scheme);
-    }
-
-    // *********************************
-    // Parameters validation
-    // *********************************
-
-    @Override
-    protected Result verifyParameters(Map<String, Object> parameters) {
-        LOG.debug("verifyParameters={}", parameters);
-        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS)
-                .error(ResultErrorHelper.requiresOption("applicationCredentials", parameters));
-
-        // Validate using the catalog
-
-        super.verifyParametersAgainstCatalog(builder, parameters);
-
-        return builder.build();
-    }
-
-    // *********************************
-    // Connectivity validation
-    // *********************************
-
-    @Override
-    protected Result verifyConnectivity(Map<String, Object> parameters) {
-        LOG.debug("verifyConnectivity={}", parameters);
-        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY);
-
-        try {
-            GoogleCloudStorageComponentConfiguration configuration
-                    = setProperties(new GoogleCloudStorageComponentConfiguration(), parameters);
-            /*
-            if (!S3Client.serviceMetadata().regions().contains(Region.of(configuration.getRegion()))) {
-                ResultErrorBuilder errorBuilder = ResultErrorBuilder.withCodeAndDescription(
-                        VerificationError.StandardCode.ILLEGAL_PARAMETER, "The service is not supported in this region");
-                return builder.error(errorBuilder.build()).build();
-            }
-            AwsBasicCredentials cred = AwsBasicCredentials.create(configuration.getAccessKey(), configuration.getSecretKey());
-            S3ClientBuilder clientBuilder = S3Client.builder();
-            S3Client client = clientBuilder.credentialsProvider(StaticCredentialsProvider.create(cred))
-                    .region(Region.of(configuration.getRegion())).build();
-            client.listBuckets();
-            */
-            /*
-            } catch (SdkClientException e) {
-            ResultErrorBuilder errorBuilder
-                    = ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, e.getMessage())
-                            .detail("aws_s3_exception_message", e.getMessage())
-                            .detail(VerificationError.ExceptionAttribute.EXCEPTION_CLASS, e.getClass().getName())
-                            .detail(VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE, e);
-            
-            builder.error(errorBuilder.build());
-            */
-        } catch (Exception e) {
-            builder.error(ResultErrorBuilder.withException(e).build());
-        }
-
-        return builder.build();
-    }
-
-}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
new file mode 100644
index 0000000..04ede16
--- /dev/null
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
@@ -0,0 +1,18 @@
+package org.apache.camel.component.google.storage;
+
+import java.io.FileInputStream;
+
+import com.google.auth.oauth2.ServiceAccountCredentials;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+
+public class GoogleCloudStorageConnectionFactory {
+
+    public static Storage create(GoogleCloudStorageComponentConfiguration configuration) throws Exception {
+        Storage storage = StorageOptions.newBuilder()
+                .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream(configuration.getServiceAccountKey())))
+                .build().getService();
+        return storage;
+    }
+
+}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
index 20e0ade..92cc6d4 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
@@ -206,16 +206,16 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
      */
     protected boolean includeObject(Blob blob) {
 
-        if (getConfiguration().isIncludeFolders()) {
-            return true;
-        } else {
-            //TODO understand if the object is a directory
-
-            // Config says to ignore folders/directories
-            //return !Optional.of(((GetObjectResponse) s3Object.response()).contentType()).orElse("")
-            //        .toLowerCase().startsWith("application/x-directory");
-            return true;
-        }
+        //    if (getConfiguration().isIncludeFolders()) {
+        //        return true;
+        //    } else {
+        //TODO understand if the object is a directory
+
+        // Config says to ignore folders/directories
+        //return !Optional.of(((GetObjectResponse) s3Object.response()).contentType()).orElse("")
+        //        .toLowerCase().startsWith("application/x-directory");
+        return true;
+        //}
     }
 
     @Override
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 19d5800..a5a3f83 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -14,7 +14,6 @@ import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.component.google.storage.client.StorageInternalClientFactory;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.ScheduledPollEndpoint;
@@ -60,20 +59,29 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
     @Override
     protected void doStart() throws Exception {
         super.doStart();
-        this.storageClient = configuration.getStorageClient() != null
-                ? configuration.getStorageClient()
-                : StorageInternalClientFactory.getStorageClient(this.configuration).getGoogleCloudStorage();
+
+        this.storageClient = configuration.getStorageClient();
+        if (this.storageClient == null) {
+            this.storageClient = GoogleCloudStorageConnectionFactory.create(configuration);
+        }
 
         if (configuration.isAutoCreateBucket()) {
-            Bucket bucket = storageClient.get(configuration.getBucketName());
-            if (bucket != null) {
-                LOG.trace("Bucket [{}] already exists", bucket.getName());
-                return;
-            } else {
-                // creates the new bucket because it doesn't exist yet
-                BucketInfo bucketInfo = BucketInfo.newBuilder(configuration.getBucketName()).build();
-                bucket = storageClient.create(bucketInfo);
-                LOG.trace("Bucket [{}] has been created", bucket.getName());
+            LOG.info("getting the bucket {}", configuration.getBucketName());
+            try {
+
+                Bucket bucket = this.storageClient.get(configuration.getBucketName());
+                if (bucket != null) {
+                    LOG.trace("Bucket [{}] already exists", bucket.getName());
+                    return;
+                } else {
+                    // creates the new bucket because it doesn't exist yet
+                    BucketInfo bucketInfo = BucketInfo.newBuilder(configuration.getBucketName()).build();
+                    bucket = storageClient.create(bucketInfo);
+                    LOG.trace("Bucket [{}] has been created", bucket.getName());
+                }
+            } catch (Exception e) {
+                LOG.error("Error - autocreatebucket", e);
+                throw e;
             }
         }
     }
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClient.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClient.java
deleted file mode 100644
index 5cdf745..0000000
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClient.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.apache.camel.component.google.storage.client;
-
-import com.google.cloud.storage.Storage;
-
-public interface StorageInternalClient {
-    Storage getGoogleCloudStorage();
-}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientFactory.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientFactory.java
deleted file mode 100644
index 9f97d4c..0000000
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientFactory.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.apache.camel.component.google.storage.client;
-
-import org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration;
-
-public class StorageInternalClientFactory {
-
-    public static StorageInternalClient getStorageClient(GoogleCloudStorageComponentConfiguration conf) {
-        return new StorageInternalClientImpl(conf);
-    }
-
-}
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientImpl.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientImpl.java
deleted file mode 100644
index f3a8320..0000000
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/client/StorageInternalClientImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.camel.component.google.storage.client;
-
-import java.io.FileInputStream;
-
-import com.google.auth.oauth2.ServiceAccountCredentials;
-import com.google.cloud.storage.Storage;
-import com.google.cloud.storage.StorageOptions;
-import org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class StorageInternalClientImpl implements StorageInternalClient {
-
-    private final static Logger LOGGER = LoggerFactory.getLogger(StorageInternalClientImpl.class);
-
-    private GoogleCloudStorageComponentConfiguration configuration;
-
-    public StorageInternalClientImpl(GoogleCloudStorageComponentConfiguration configuration) {
-        this.configuration = configuration;
-    }
-
-    @Override
-    public Storage getGoogleCloudStorage() {
-
-        try {
-            LOGGER.info("creating GoogleCloudStorage client using aplicationCredentials: {}",
-                    configuration.getServiceAccountCredentials());
-            FileInputStream serviceAccountCrediantialsFIS = new FileInputStream(configuration.getServiceAccountCredentials());
-
-            Storage storage = StorageOptions.newBuilder()
-                    .setCredentials(ServiceAccountCredentials.fromStream(serviceAccountCrediantialsFIS))
-                    // .setProjectId(projectId)
-                    .build().getService();
-
-            return storage;
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-
-    }
-
-}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ConsumerIntegrationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ConsumerIntegrationTest.java
new file mode 100644
index 0000000..5d19daf
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ConsumerIntegrationTest.java
@@ -0,0 +1,93 @@
+package org.apache.camel.component.google.storage.integration;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+public class ConsumerIntegrationTest extends CamelTestSupport {
+
+    @EndpointInject
+    private ProducerTemplate template;
+
+    @EndpointInject("mock:result")
+    private MockEndpoint result;
+
+    @EndpointInject("mock:consumedObjects")
+    private MockEndpoint consumedObjects;
+
+    private final String bucketName = "rafa_test_bucket";
+    final String serviceAccountKey = "C:\\Users\\rmarc\\Desktop\\LABS\\GCP_Storage\\FunctionExampleProject-c59c4a999d8a.json";
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+
+                String endpoint = String.format("google-storage://%s?serviceAccountKey=%s&autoCreateBucket=true", bucketName,
+                        serviceAccountKey);
+                //String endpoint = String.format("google-storage://%s?autoCreateBucket=true", bucketName);
+
+                from("direct:putObject")
+                        .startupOrder(1)
+                        .to(endpoint)
+                        .to("mock:result");
+
+                from("google-storage://myCamelBucket?"
+                     + "moveAfterRead=true"
+                     + "&destinationBucket=camelDestinationBucket"
+                     + "&autoCreateBucket=true"
+                     + "&deleteAfterRead=true"
+                     + "&includeBody=true")
+                             .startupOrder(2)
+                             .log("consuming: ${header.CamelGoogleCloudStorageBucketName}/${header.CamelGoogleCloudStorageObjectName}, body=${body}")
+                             .to("mock:consumedObjects");
+
+            }
+        };
+    }
+
+    @Test
+    public void sendIn() throws Exception {
+        result.expectedMessageCount(3);
+        consumedObjects.expectedMessageCount(3);
+
+        //upload a files
+
+        template.send("direct:putObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test.txt");
+            exchange.getIn().setBody("Test");
+        });
+
+        template.send("direct:putObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test1.txt");
+            exchange.getIn().setBody("Test1");
+        });
+
+        template.send("direct:putObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "test2.txt");
+            exchange.getIn().setBody("Test2");
+        });
+        /*
+        Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
+            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listBuckets);
+        });
+        List<Bucket> bucketsList = listBucketsExchange.getMessage().getBody(List.class);
+        LOG.info("bucketsList {}", bucketsList );
+        
+        
+        Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.listObjects);
+        });
+        LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
+        */
+        Thread.sleep(10000);
+        assertMockEndpointsSatisfied();
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ProducerIntegrationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ProducerIntegrationTest.java
new file mode 100644
index 0000000..2c76f0b
--- /dev/null
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/integration/ProducerIntegrationTest.java
@@ -0,0 +1,141 @@
+package org.apache.camel.component.google.storage.integration;
+
+import java.io.ByteArrayInputStream;
+import java.util.List;
+
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.Bucket;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations;
+import org.apache.camel.component.google.storage.GoogleCloudStorageConstants;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+public class ProducerIntegrationTest extends CamelTestSupport {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ProducerIntegrationTest.class);
+
+    @EndpointInject
+    private ProducerTemplate template;
+
+    @EndpointInject("mock:result")
+    private MockEndpoint result;
+
+    private final String bucketName = "rafa_test_bucket";
+    final String serviceAccountKey = "C:\\Users\\rmarc\\Desktop\\LABS\\GCP_Storage\\FunctionExampleProject-c59c4a999d8a.json";
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() {
+
+                String endpoint = String.format("google-storage://%s?serviceAccountKey=%s&autoCreateBucket=true", bucketName,
+                        serviceAccountKey);
+                //String endpoint = String.format("google-storage://%s?autoCreateBucket=true", bucketName);
+
+                from("direct:addObject").to(endpoint);
+                from("direct:getObject").to(endpoint);
+                from("direct:listBucket").log("-> ${body}").to(endpoint).log("--> ${body}");
+                from("direct:listObjects").to(endpoint).log("--> ${body}");
+                from("direct:downloadLink").to(endpoint);
+                from("direct:deleteObject").to(endpoint);
+                from("direct:deleteBucket").to(endpoint).to("mock:result");
+
+            }
+        };
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void sendIn() throws Exception {
+        LOG.info("start sending something");
+        result.expectedMessageCount(1);
+
+        final String FILENAME_1 = "just_a_file.txt";
+
+        //upload a file
+        byte[] payload = "Hi, How are you ?".getBytes();
+        ByteArrayInputStream bais = new ByteArrayInputStream(payload);
+        Exchange addObjectExchange = template.request("direct:addObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.CONTENT_ENCODING, "text/plain");
+            exchange.getIn().setBody(bais);
+        });
+        Blob addObject = addObjectExchange.getMessage().getBody(Blob.class);
+        LOG.info("addObject {}", addObject);
+        assertNotNull(addObject);
+        assertEquals(FILENAME_1, addObject.getName());
+
+        Exchange listBucketsExchange = template.request("direct:listBucket", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.listBuckets);
+        });
+        List<Bucket> bucketsList = listBucketsExchange.getMessage().getBody(List.class);
+        LOG.info("bucketsList {}", bucketsList);
+        assertEquals(1, bucketsList.size());
+
+        Exchange listObjectsExchange = template.request("direct:listObjects", exchange -> {
+            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.listObjects);
+        });
+        LOG.info("listObjectsExchange.body={}", listObjectsExchange.getMessage().getBody());
+        List<Blob> resp = listObjectsExchange.getMessage().getBody(List.class);
+        assertEquals(1, resp.size());
+        assertEquals(FILENAME_1, resp.get(0).getName());
+        /*
+        Exchange getObjectExchange = template.request("direct:getObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.getObject);
+            // exchange.getIn().setHeader(GoogleCloudStorageConstants.BUCKET_NAME, "myBucket"); not needed
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+        });
+        Blob getObject = getObjectExchange.getMessage().getBody(Blob.class);
+        LOG.info("getObject: {}", getObject);
+        assertNotNull(getObject);
+        assertEquals(FILENAME_1, getObject.getName());
+        
+        /*
+        //sign url
+        Exchange downloadLinkExchange = template.request( "direct:downloadLink", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION, GoogleCloudStorageComponentOperations.createDownloadLink);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, "readme.txt" );
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.DOWNLOAD_LINK_EXPIRATION_TIME, 86400000L); //1 day
+        });
+        URL downloadLink = downloadLinkExchange.getMessage().getBody(URL.class);
+        LOG.info("downloadLink {}", downloadLink );
+        assertNotNull( downloadLink );
+        */
+        /*
+        Exchange deleteObjectExchange = template.send("direct:deleteObject", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.deleteObject);
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OBJECT_NAME, FILENAME_1);
+        });
+        
+        boolean deleteObject = deleteObjectExchange.getMessage().getBody(Boolean.class).booleanValue();
+        LOG.info("deleteObject {}", deleteObject);
+        assertTrue(deleteObject);
+        
+        Exchange deleteBucketExchange = template.send("direct:deleteBucket", exchange -> {
+            exchange.getIn().setHeader(GoogleCloudStorageConstants.OPERATION,
+                    GoogleCloudStorageComponentOperations.deleteBucket);
+        });
+        boolean deleteBucket = deleteBucketExchange.getMessage().getBody(Boolean.class).booleanValue();
+        LOG.info("deleteBucket {}", deleteBucket);
+        assertTrue(deleteBucket);
+        
+        assertMockEndpointsSatisfied();
+        */
+    }
+
+}
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
index 0933dd9..9a7cda6 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/localstorage/FakeStorageRpc.java
@@ -120,8 +120,8 @@ class FakeStorageRpc extends StorageRpcTestBase {
     public Tuple<String, Iterable<Bucket>> list(Map<Option, ?> options) {
         String pageToken = null;
         String preprefix = "";
-        String delimiter = null;
-        long maxResults = Long.MAX_VALUE;
+        //String delimiter = null;
+        //long maxResults = Long.MAX_VALUE;
         for (Map.Entry<Option, ?> e : options.entrySet()) {
             switch (e.getKey()) {
                 case PAGE_TOKEN:
@@ -134,13 +134,13 @@ class FakeStorageRpc extends StorageRpcTestBase {
                     }
                     break;
                 case DELIMITER:
-                    delimiter = (String) e.getValue();
+                    //delimiter = (String) e.getValue();
                     break;
                 case FIELDS:
                     // ignore and return all the fields
                     break;
                 case MAX_RESULTS:
-                    maxResults = (Long) e.getValue();
+                    //maxResults = (Long) e.getValue();
                     break;
                 case USER_PROJECT:
                     // prevent unsupported operation
diff --git a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
index 73e5c89..6bcee9c 100644
--- a/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
+++ b/components/camel-google-storage/src/test/java/org/apache/camel/component/google/storage/unit/GoogleCloudStorageComponentConfigurationTest.java
@@ -13,20 +13,20 @@ public class GoogleCloudStorageComponentConfigurationTest extends CamelTestSuppo
     @Test
     public void createEndpointWithMinimalConfiguration() throws Exception {
         final String bucketName = "myCamelBucket";
-        final String serviceAccountCredentialsFile = "somefile.json";
+        final String serviceAccountKeyFile = "somefile.json";
 
         GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
         GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
-                String.format("google-storage://%s?serviceAccountCredentials=%s", bucketName, serviceAccountCredentialsFile));
+                String.format("google-storage://%s?serviceAccountKey=%s", bucketName, serviceAccountKeyFile));
 
         assertEquals(endpoint.getConfiguration().getBucketName(), bucketName);
-        assertEquals(endpoint.getConfiguration().getServiceAccountCredentials(), serviceAccountCredentialsFile);
+        assertEquals(endpoint.getConfiguration().getServiceAccountKey(), serviceAccountKeyFile);
     }
 
     public void createEndpointForComplexConsumer() throws Exception {
 
         final String bucketName = "sourceCamelBucket";
-        final String serviceAccountCredentialsFile = "somefile.json";
+        final String serviceAccountKeyFile = "somefile.json";
         final boolean moveAfterRead = false;
         final String destinationBucket = "destinationCamelBucket";
         final boolean autoCreateBucket = true;
@@ -36,13 +36,13 @@ public class GoogleCloudStorageComponentConfigurationTest extends CamelTestSuppo
         GoogleCloudStorageComponent component = context.getComponent("google-storage", GoogleCloudStorageComponent.class);
         GoogleCloudStorageEndpoint endpoint = (GoogleCloudStorageEndpoint) component.createEndpoint(
                 String.format(
-                        "google-storage://%s?serviceAccountCredentials=%s&moveAfterRead=%s&destinationBucket=%s&autoCreateBucket=%s&deleteAfterRead=%s&includeBody=%s",
-                        bucketName, serviceAccountCredentialsFile, moveAfterRead, destinationBucket, autoCreateBucket,
+                        "google-storage://%s?serviceAccountKey=%s&moveAfterRead=%s&destinationBucket=%s&autoCreateBucket=%s&deleteAfterRead=%s&includeBody=%s",
+                        bucketName, serviceAccountKeyFile, moveAfterRead, destinationBucket, autoCreateBucket,
                         deleteAfterRead, includeBody));
 
         GoogleCloudStorageComponentConfiguration configuration = endpoint.getConfiguration();
         assertEquals(configuration.getBucketName(), bucketName);
-        assertEquals(configuration.getServiceAccountCredentials(), serviceAccountCredentialsFile);
+        assertEquals(configuration.getServiceAccountKey(), serviceAccountKeyFile);
         assertEquals(configuration.isMoveAfterRead(), moveAfterRead);
         assertEquals(configuration.getDestinationBucket(), destinationBucket);
         assertEquals(configuration.isAutoCreateBucket(), autoCreateBucket);
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index 72ce762..e717385 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -100,18 +100,18 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * Specify the service account credentials file (json).
+         * Service account key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
          * Group: common
          * 
-         * @param serviceAccountCredentials the value to set
+         * @param serviceAccountKey the value to set
          * @return the dsl builder
          */
-        default GoogleStorageComponentBuilder serviceAccountCredentials(
-                java.lang.String serviceAccountCredentials) {
-            doSetProperty("serviceAccountCredentials", serviceAccountCredentials);
+        default GoogleStorageComponentBuilder serviceAccountKey(
+                java.lang.String serviceAccountKey) {
+            doSetProperty("serviceAccountKey", serviceAccountKey);
             return this;
         }
         /**
@@ -192,38 +192,6 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * Define the destination bucket prefix to use when an object must be
-         * moved and moveAfterRead is set to true.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param destinationBucketPrefix the value to set
-         * @return the dsl builder
-         */
-        default GoogleStorageComponentBuilder destinationBucketPrefix(
-                java.lang.String destinationBucketPrefix) {
-            doSetProperty("destinationBucketPrefix", destinationBucketPrefix);
-            return this;
-        }
-        /**
-         * Define the destination bucket suffix to use when an object must be
-         * moved and moveAfterRead is set to true.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param destinationBucketSuffix the value to set
-         * @return the dsl builder
-         */
-        default GoogleStorageComponentBuilder destinationBucketSuffix(
-                java.lang.String destinationBucketSuffix) {
-            doSetProperty("destinationBucketSuffix", destinationBucketSuffix);
-            return this;
-        }
-        /**
          * If it is true, the S3Object exchange will be consumed and put into
          * the body and closed. If false the S3Object stream will be put raw
          * into the body and the headers will be set with the S3 object
@@ -248,24 +216,6 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
-         * If it is true, the folders/directories will be consumed. If it is
-         * false, they will be ignored, and Exchanges will not be created for
-         * those.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: consumer
-         * 
-         * @param includeFolders the value to set
-         * @return the dsl builder
-         */
-        default GoogleStorageComponentBuilder includeFolders(
-                boolean includeFolders) {
-            doSetProperty("includeFolders", includeFolders);
-            return this;
-        }
-        /**
          * Move objects from S3 bucket to a different bucket after they have
          * been retrieved. To accomplish the operation the destinationBucket
          * option must be set. The copy bucket operation is only performed if
@@ -373,15 +323,12 @@ public interface GoogleStorageComponentBuilderFactory {
             case "autoCreateBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setAutoCreateBucket((boolean) value); return true;
             case "configuration": ((GoogleCloudStorageComponent) component).setConfiguration((org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration) value); return true;
             case "objectName": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setObjectName((java.lang.String) value); return true;
-            case "serviceAccountCredentials": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setServiceAccountCredentials((java.lang.String) value); return true;
+            case "serviceAccountKey": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setServiceAccountKey((java.lang.String) value); return true;
             case "storageClient": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageClient((com.google.cloud.storage.Storage) value); return true;
             case "bridgeErrorHandler": ((GoogleCloudStorageComponent) component).setBridgeErrorHandler((boolean) value); return true;
             case "deleteAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDeleteAfterRead((boolean) value); return true;
             case "destinationBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDestinationBucket((java.lang.String) value); return true;
-            case "destinationBucketPrefix": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDestinationBucketPrefix((java.lang.String) value); return true;
-            case "destinationBucketSuffix": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDestinationBucketSuffix((java.lang.String) value); return true;
             case "includeBody": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setIncludeBody((boolean) value); return true;
-            case "includeFolders": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setIncludeFolders((boolean) value); return true;
             case "moveAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setMoveAfterRead((boolean) value); return true;
             case "lazyStartProducer": ((GoogleCloudStorageComponent) component).setLazyStartProducer((boolean) value); return true;
             case "operation": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setOperation((org.apache.camel.component.google.storage.GoogleCloudStorageComponentOperations) value); return true;
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index da762b7..42ceb8d 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -96,18 +96,18 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Specify the service account credentials file (json).
+         * Service account key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
          * Group: common
          * 
-         * @param serviceAccountCredentials the value to set
+         * @param serviceAccountKey the value to set
          * @return the dsl builder
          */
-        default GoogleCloudStorageEndpointConsumerBuilder serviceAccountCredentials(
-                String serviceAccountCredentials) {
-            doSetProperty("serviceAccountCredentials", serviceAccountCredentials);
+        default GoogleCloudStorageEndpointConsumerBuilder serviceAccountKey(
+                String serviceAccountKey) {
+            doSetProperty("serviceAccountKey", serviceAccountKey);
             return this;
         }
         /**
@@ -251,38 +251,6 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Define the destination bucket prefix to use when an object must be
-         * moved and moveAfterRead is set to true.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param destinationBucketPrefix the value to set
-         * @return the dsl builder
-         */
-        default GoogleCloudStorageEndpointConsumerBuilder destinationBucketPrefix(
-                String destinationBucketPrefix) {
-            doSetProperty("destinationBucketPrefix", destinationBucketPrefix);
-            return this;
-        }
-        /**
-         * Define the destination bucket suffix to use when an object must be
-         * moved and moveAfterRead is set to true.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param destinationBucketSuffix the value to set
-         * @return the dsl builder
-         */
-        default GoogleCloudStorageEndpointConsumerBuilder destinationBucketSuffix(
-                String destinationBucketSuffix) {
-            doSetProperty("destinationBucketSuffix", destinationBucketSuffix);
-            return this;
-        }
-        /**
          * If it is true, the S3Object exchange will be consumed and put into
          * the body and closed. If false the S3Object stream will be put raw
          * into the body and the headers will be set with the S3 object
@@ -334,43 +302,6 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * If it is true, the folders/directories will be consumed. If it is
-         * false, they will be ignored, and Exchanges will not be created for
-         * those.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: consumer
-         * 
-         * @param includeFolders the value to set
-         * @return the dsl builder
-         */
-        default GoogleCloudStorageEndpointConsumerBuilder includeFolders(
-                boolean includeFolders) {
-            doSetProperty("includeFolders", includeFolders);
-            return this;
-        }
-        /**
-         * If it is true, the folders/directories will be consumed. If it is
-         * false, they will be ignored, and Exchanges will not be created for
-         * those.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: consumer
-         * 
-         * @param includeFolders the value to set
-         * @return the dsl builder
-         */
-        default GoogleCloudStorageEndpointConsumerBuilder includeFolders(
-                String includeFolders) {
-            doSetProperty("includeFolders", includeFolders);
-            return this;
-        }
-        /**
          * Move objects from S3 bucket to a different bucket after they have
          * been retrieved. To accomplish the operation the destinationBucket
          * option must be set. The copy bucket operation is only performed if
@@ -1111,18 +1042,18 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Specify the service account credentials file (json).
+         * Service account key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
          * Group: common
          * 
-         * @param serviceAccountCredentials the value to set
+         * @param serviceAccountKey the value to set
          * @return the dsl builder
          */
-        default GoogleCloudStorageEndpointProducerBuilder serviceAccountCredentials(
-                String serviceAccountCredentials) {
-            doSetProperty("serviceAccountCredentials", serviceAccountCredentials);
+        default GoogleCloudStorageEndpointProducerBuilder serviceAccountKey(
+                String serviceAccountKey) {
+            doSetProperty("serviceAccountKey", serviceAccountKey);
             return this;
         }
         /**
@@ -1309,18 +1240,18 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
-         * Specify the service account credentials file (json).
+         * Service account key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
          * Group: common
          * 
-         * @param serviceAccountCredentials the value to set
+         * @param serviceAccountKey the value to set
          * @return the dsl builder
          */
-        default GoogleCloudStorageEndpointBuilder serviceAccountCredentials(
-                String serviceAccountCredentials) {
-            doSetProperty("serviceAccountCredentials", serviceAccountCredentials);
+        default GoogleCloudStorageEndpointBuilder serviceAccountKey(
+                String serviceAccountKey) {
+            doSetProperty("serviceAccountKey", serviceAccountKey);
             return this;
         }
         /**
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index ca3c088..96c2165 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -67,7 +67,7 @@ from("google-storage://myCamelBucket?serviceAccountCredentials=/home/user/Downlo
 == Options
 
 // component options: START
-The Google Storage component supports 16 options, which are listed below.
+The Google Storage component supports 13 options, which are listed below.
 
 
 
@@ -77,18 +77,15 @@ The Google Storage component supports 16 options, which are listed below.
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *objectName* (common) | objectName |  | String
-| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
-| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *autowiredEnabled* (advanced) | 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. | true | boolean
 |===
 // component options: END
@@ -112,7 +109,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (32 parameters):
+=== Query Parameters (29 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -120,22 +117,19 @@ with the following path and query parameters:
 | Name | Description | Default | Type
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *objectName* (common) | objectName |  | String
-| *serviceAccountCredentials* (common) | Specify the service account credentials file (json) |  | String
+| *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3C [...]
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
-| *destinationBucketPrefix* (consumer) | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
-| *destinationBucketSuffix* (consumer) | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
 | *includeBody* (consumer) | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed in case of includeBody false then it will be up to the caller to close the S3Object stream [...]
-| *includeFolders* (consumer) | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | boolean
 | *moveAfterRead* (consumer) | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | 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. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *lazyStartProducer* (producer) | 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 [...]
-| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, getObjectRange |  | GoogleCloudStorageComponentOperations
+| *operation* (producer) | set the operation for the producer. There are 7 enums and the value can be one of: copyObject, listObjects, deleteObject, deleteBucket, listBuckets, getObject, createDownloadLink |  | GoogleCloudStorageComponentOperations
 | *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
 | *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int


[camel] 04/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2b62b906c1e7f559ec8117bf71f57e8d39e9a952
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Thu Feb 11 10:58:15 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/camel-google-storage/{ReadMe.txt => ReadMe.md} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/components/camel-google-storage/ReadMe.txt b/components/camel-google-storage/ReadMe.md
similarity index 100%
rename from components/camel-google-storage/ReadMe.txt
rename to components/camel-google-storage/ReadMe.md


[camel] 19/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 30ba41473edb50f1a621b3c43fec58dd7fca03c3
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Mon Feb 15 08:54:02 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 components/camel-google-storage/pom.xml                                 | 2 +-
 .../resources/META-INF/services/org/apache/camel/other.properties       | 2 +-
 .../camel-google-storage/src/generated/resources/google-storage.json    | 2 +-
 .../org/apache/camel/component/google/storage/google-storage.json       | 2 +-
 core/camel-componentdsl/src/generated/resources/metadata.json           | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/components/camel-google-storage/pom.xml b/components/camel-google-storage/pom.xml
index c30357a..d193dfa 100644
--- a/components/camel-google-storage/pom.xml
+++ b/components/camel-google-storage/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <groupId>org.apache.camel</groupId>
     <artifactId>components</artifactId>
-    <version>3.8.0-SNAPSHOT</version>
+    <version>3.9.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>camel-google-storage</artifactId>
diff --git a/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/other.properties
index 6efbcce..154bb0d 100644
--- a/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/other.properties
+++ b/components/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -2,6 +2,6 @@
 name=google-storage
 groupId=org.apache.camel
 artifactId=camel-google-storage
-version=3.8.0-SNAPSHOT
+version=3.9.0-SNAPSHOT
 projectName=Camel :: Google Storage
 projectDescription=Camel Component for Google Cloud Platform Storage
diff --git a/components/camel-google-storage/src/generated/resources/google-storage.json b/components/camel-google-storage/src/generated/resources/google-storage.json
index 80bfd6a..1ac1300 100644
--- a/components/camel-google-storage/src/generated/resources/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/google-storage.json
@@ -9,6 +9,6 @@
     "supportLevel": "Preview",
     "groupId": "org.apache.camel",
     "artifactId": "camel-google-storage",
-    "version": "3.8.0-SNAPSHOT"
+    "version": "3.9.0-SNAPSHOT"
   }
 }
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index 9f6761f..619a6b9 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -11,7 +11,7 @@
     "supportLevel": "Preview",
     "groupId": "org.apache.camel",
     "artifactId": "camel-google-storage",
-    "version": "3.8.0-SNAPSHOT",
+    "version": "3.9.0-SNAPSHOT",
     "scheme": "google-storage",
     "extendsScheme": "",
     "syntax": "google-storage:bucketName",
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index 7f7b939..8eb5ae4 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -3245,7 +3245,7 @@
     "supportLevel": "Preview",
     "groupId": "org.apache.camel",
     "artifactId": "camel-google-storage",
-    "version": "3.8.0-SNAPSHOT",
+    "version": "3.9.0-SNAPSHOT",
     "scheme": "google-storage",
     "extendsScheme": "",
     "syntax": "google-storage:bucketName",


[camel] 18/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 3b01437140069b08b780e35a91d31e3141b6d1fc
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sun Feb 14 20:25:52 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../component/google/storage/GoogleCloudStorageConnectionFactory.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
index e27c763..dd301de 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConnectionFactory.java
@@ -1,5 +1,3 @@
-package org.apache.camel.component.google.storage;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -16,6 +14,8 @@ package org.apache.camel.component.google.storage;
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.camel.component.google.storage;
+
 import java.io.FileInputStream;
 
 import com.google.api.client.util.Strings;


[camel] 11/31: CAMEL-15964 create camel-google-storage component

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f3622f0d89843b6f94ea1ba675026f87bbb33187
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Sat Feb 13 18:47:26 2021 +0100

    CAMEL-15964 create camel-google-storage component
---
 .../catalog/docs/google-storage-component.adoc     |  6 ++-
 .../GoogleCloudStorageComponentConfigurer.java     |  6 +++
 .../GoogleCloudStorageEndpointConfigurer.java      |  6 +++
 .../GoogleCloudStorageEndpointUriFactory.java      |  3 +-
 .../component/google/storage/google-storage.json   |  2 +
 .../src/main/docs/google-storage-component.adoc    |  6 ++-
 .../GoogleCloudStorageComponentConfiguration.java  | 16 ++++++++
 .../google/storage/GoogleCloudStorageEndpoint.java | 16 +++++++-
 .../dsl/GoogleStorageComponentBuilderFactory.java  | 17 ++++++++
 .../GoogleCloudStorageEndpointBuilderFactory.java  | 48 ++++++++++++++++++++++
 .../ROOT/pages/google-storage-component.adoc       |  6 ++-
 11 files changed, 123 insertions(+), 9 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index a473b5e..aafb49a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -82,7 +82,7 @@ from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-k
 == URI Options
 
 // component options: START
-The Google Storage component supports 14 options, which are listed below.
+The Google Storage component supports 15 options, which are listed below.
 
 
 
@@ -93,6 +93,7 @@ The Google Storage component supports 14 options, which are listed below.
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
+| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
@@ -125,7 +126,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (30 parameters):
+=== Query Parameters (31 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -134,6 +135,7 @@ with the following path and query parameters:
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
+| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
index f2aa873..649f85b 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
@@ -54,6 +54,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "serviceAccountKey": getOrCreateConfiguration(target).setServiceAccountKey(property(camelContext, java.lang.String.class, value)); return true;
         case "storageclient":
         case "storageClient": getOrCreateConfiguration(target).setStorageClient(property(camelContext, com.google.cloud.storage.Storage.class, value)); return true;
+        case "storagelocation":
+        case "storageLocation": getOrCreateConfiguration(target).setStorageLocation(property(camelContext, java.lang.String.class, value)); return true;
         default: return false;
         }
     }
@@ -87,6 +89,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "serviceAccountKey": return java.lang.String.class;
         case "storageclient":
         case "storageClient": return com.google.cloud.storage.Storage.class;
+        case "storagelocation":
+        case "storageLocation": return java.lang.String.class;
         default: return null;
         }
     }
@@ -121,6 +125,8 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
         case "serviceAccountKey": return getOrCreateConfiguration(target).getServiceAccountKey();
         case "storageclient":
         case "storageClient": return getOrCreateConfiguration(target).getStorageClient();
+        case "storagelocation":
+        case "storageLocation": return getOrCreateConfiguration(target).getStorageLocation();
         default: return null;
         }
     }
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
index 1e8d17a..edb8a63 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
@@ -73,6 +73,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "startScheduler": target.setStartScheduler(property(camelContext, boolean.class, value)); return true;
         case "storageclient":
         case "storageClient": target.getConfiguration().setStorageClient(property(camelContext, com.google.cloud.storage.Storage.class, value)); return true;
+        case "storagelocation":
+        case "storageLocation": target.getConfiguration().setStorageLocation(property(camelContext, java.lang.String.class, value)); return true;
         case "timeunit":
         case "timeUnit": target.setTimeUnit(property(camelContext, java.util.concurrent.TimeUnit.class, value)); return true;
         case "usefixeddelay":
@@ -136,6 +138,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "startScheduler": return boolean.class;
         case "storageclient":
         case "storageClient": return com.google.cloud.storage.Storage.class;
+        case "storagelocation":
+        case "storageLocation": return java.lang.String.class;
         case "timeunit":
         case "timeUnit": return java.util.concurrent.TimeUnit.class;
         case "usefixeddelay":
@@ -200,6 +204,8 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
         case "startScheduler": return target.isStartScheduler();
         case "storageclient":
         case "storageClient": return target.getConfiguration().getStorageClient();
+        case "storagelocation":
+        case "storageLocation": return target.getConfiguration().getStorageLocation();
         case "timeunit":
         case "timeUnit": return target.getTimeUnit();
         case "usefixeddelay":
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
index 86fe7f9..a243bfb 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointUriFactory.java
@@ -20,10 +20,11 @@ public class GoogleCloudStorageEndpointUriFactory extends org.apache.camel.suppo
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(31);
+        Set<String> props = new HashSet<>(32);
         props.add("backoffMultiplier");
         props.add("bucketName");
         props.add("destinationBucket");
+        props.add("storageLocation");
         props.add("initialDelay");
         props.add("scheduler");
         props.add("bridgeErrorHandler");
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index 7e946ab..4f4f89e 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -26,6 +26,7 @@
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
     "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key" },
     "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
+    "storageLocation": { "kind": "property", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new  [...]
     "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 [...]
     "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. Th [...]
     "destinationBucket": { "kind": "property", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterRe [...]
@@ -42,6 +43,7 @@
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key" },
     "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Set strage client" },
+    "storageLocation": { "kind": "parameter", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new [...]
     "bridgeErrorHandler": { "kind": "parameter", "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 m [...]
     "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. T [...]
     "destinationBucket": { "kind": "parameter", "displayName": "Destination Bucket", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Define the destination bucket where an object must be moved when moveAfterR [...]
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index a473b5e..aafb49a 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -82,7 +82,7 @@ from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-k
 == URI Options
 
 // component options: START
-The Google Storage component supports 14 options, which are listed below.
+The Google Storage component supports 15 options, which are listed below.
 
 
 
@@ -93,6 +93,7 @@ The Google Storage component supports 14 options, which are listed below.
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
+| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
@@ -125,7 +126,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (30 parameters):
+=== Query Parameters (31 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -134,6 +135,7 @@ with the following path and query parameters:
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
+| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
index 5355ec8..e058a5a 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -40,6 +40,10 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     @UriParam(label = "producer", description = "Object name")
     private String objectName;
 
+    @UriParam(label = "common", defaultValue = "US-EAST1",
+              description = "The Cloud Storage location to use when creating the new buckets")
+    private String storageLocation;
+
     @UriParam(label = "common", defaultValue = "true")
     private boolean autoCreateBucket = true;
 
@@ -100,6 +104,18 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
         return storageClient;
     }
 
+    public String getStorageLocation() {
+        return storageLocation;
+    }
+
+    /**
+     * The Cloud Storage location to use when creating the new buckets. The complete available locations list at
+     * https://cloud.google.com/storage/docs/locations#location-mr
+     */
+    public void setStorageLocation(String storageLocation) {
+        this.storageLocation = storageLocation;
+    }
+
     /**
      * Set strage client
      * 
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 028642a..43e0d95 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -22,7 +22,9 @@ import java.util.Date;
 import com.google.cloud.storage.Blob;
 import com.google.cloud.storage.Bucket;
 import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.BucketInfo.Builder;
 import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageClass;
 import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
@@ -45,11 +47,15 @@ import org.slf4j.LoggerFactory;
  * 
  */
 @UriEndpoint(firstVersion = "3.7.0", scheme = "google-storage", title = "Google Storage", syntax = "google-storage:bucketName",
-             category = { Category.CLOUD })
+             category = {
+                     Category.CLOUD })
 public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
 
     private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageEndpoint.class);
 
+    private static final String DEFAULT_LOCATION = "US-EAST1";
+    private static final StorageClass DEFAULT_STORAGE_CLASS = StorageClass.STANDARD;
+
     @UriParam
     private GoogleCloudStorageComponentConfiguration configuration;
 
@@ -92,7 +98,13 @@ public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
                     return;
                 } else {
                     // creates the new bucket because it doesn't exist yet
-                    BucketInfo bucketInfo = BucketInfo.newBuilder(configuration.getBucketName()).build();
+                    final String location = configuration.getStorageLocation() != null
+                            ? configuration.getStorageLocation() : DEFAULT_LOCATION;
+
+                    Builder bucketBuilder = BucketInfo.newBuilder(configuration.getBucketName())
+                            .setStorageClass(DEFAULT_STORAGE_CLASS)
+                            .setLocation(location);
+                    BucketInfo bucketInfo = bucketBuilder.build();
                     bucket = storageClient.create(bucketInfo);
                     LOG.trace("Bucket [{}] has been created", bucket.getName());
                 }
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index 4c8a69d..4150c6e 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -116,6 +116,22 @@ public interface GoogleStorageComponentBuilderFactory {
             return this;
         }
         /**
+         * The Cloud Storage location to use when creating the new buckets.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Default: US-EAST1
+         * Group: common
+         * 
+         * @param storageLocation the value to set
+         * @return the dsl builder
+         */
+        default GoogleStorageComponentBuilder storageLocation(
+                java.lang.String storageLocation) {
+            doSetProperty("storageLocation", storageLocation);
+            return this;
+        }
+        /**
          * 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
@@ -331,6 +347,7 @@ public interface GoogleStorageComponentBuilderFactory {
             case "configuration": ((GoogleCloudStorageComponent) component).setConfiguration((org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration) value); return true;
             case "serviceAccountKey": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setServiceAccountKey((java.lang.String) value); return true;
             case "storageClient": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageClient((com.google.cloud.storage.Storage) value); return true;
+            case "storageLocation": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setStorageLocation((java.lang.String) value); return true;
             case "bridgeErrorHandler": ((GoogleCloudStorageComponent) component).setBridgeErrorHandler((boolean) value); return true;
             case "deleteAfterRead": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDeleteAfterRead((boolean) value); return true;
             case "destinationBucket": getOrCreateConfiguration((GoogleCloudStorageComponent) component).setDestinationBucket((java.lang.String) value); return true;
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index 804ccf7..5fb83a7 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -128,6 +128,22 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
+         * The Cloud Storage location to use when creating the new buckets.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Default: US-EAST1
+         * Group: common
+         * 
+         * @param storageLocation the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointConsumerBuilder storageLocation(
+                String storageLocation) {
+            doSetProperty("storageLocation", storageLocation);
+            return this;
+        }
+        /**
          * 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
@@ -1074,6 +1090,22 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             return this;
         }
         /**
+         * The Cloud Storage location to use when creating the new buckets.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Default: US-EAST1
+         * Group: common
+         * 
+         * @param storageLocation the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointProducerBuilder storageLocation(
+                String storageLocation) {
+            doSetProperty("storageLocation", storageLocation);
+            return this;
+        }
+        /**
          * 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
@@ -1272,6 +1304,22 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
             doSetProperty("storageClient", storageClient);
             return this;
         }
+        /**
+         * The Cloud Storage location to use when creating the new buckets.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Default: US-EAST1
+         * Group: common
+         * 
+         * @param storageLocation the value to set
+         * @return the dsl builder
+         */
+        default GoogleCloudStorageEndpointBuilder storageLocation(
+                String storageLocation) {
+            doSetProperty("storageLocation", storageLocation);
+            return this;
+        }
     }
 
     /**
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index 447289a..51c49ff 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -84,7 +84,7 @@ from("google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-k
 == URI Options
 
 // component options: START
-The Google Storage component supports 14 options, which are listed below.
+The Google Storage component supports 15 options, which are listed below.
 
 
 
@@ -95,6 +95,7 @@ The Google Storage component supports 14 options, which are listed below.
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
+| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
@@ -127,7 +128,7 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (30 parameters):
+=== Query Parameters (31 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -136,6 +137,7 @@ with the following path and query parameters:
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *serviceAccountKey* (common) | Service account key |  | String
 | *storageClient* (common) | Set strage client |  | Storage
+| *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
 | *destinationBucket* (consumer) | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String


[camel] 22/31: CAMEL-15964 camel-google-storage component - improvements

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit a657a03df06bff06d8ac1107d506f75a19190002
Author: Raffaele Marcello <ma...@gmail.com>
AuthorDate: Mon Feb 15 18:31:45 2021 +0100

    CAMEL-15964 camel-google-storage component - improvements
---
 .../org/apache/camel/catalog/docs/google-storage-component.adoc   | 8 +++-----
 components/camel-google-storage/pom.xml                           | 2 +-
 .../google/storage/GoogleCloudStorageComponentConfigurer.java     | 5 +++++
 .../google/storage/GoogleCloudStorageEndpointConfigurer.java      | 5 +++++
 .../src/generated/resources/google-storage.json                   | 2 +-
 .../org/apache/camel/component/google/storage/google-storage.json | 6 +++---
 .../src/main/docs/google-storage-component.adoc                   | 8 +++-----
 .../google/storage/GoogleCloudStorageComponentConfiguration.java  | 1 +
 .../component/google/storage/GoogleCloudStorageEndpoint.java      | 2 +-
 .../apache/camel/builder/component/ComponentsBuilderFactory.java  | 2 +-
 .../component/dsl/GoogleStorageComponentBuilderFactory.java       | 2 +-
 core/camel-componentdsl/src/generated/resources/metadata.json     | 2 +-
 .../org/apache/camel/builder/endpoint/StaticEndpointBuilders.java | 4 ++--
 .../endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java    | 4 ++--
 docs/components/modules/ROOT/pages/google-storage-component.adoc  | 8 +++-----
 15 files changed, 33 insertions(+), 28 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
index d50dd54..e63875f 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage-component.adoc
@@ -3,7 +3,7 @@
 :docTitle: Google Storage
 :artifactId: camel-google-storage
 :description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
-:since: 3.8
+:since: 3.9
 :supportLevel: Preview
 :component-header: Both producer and consumer are supported
 include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
@@ -89,7 +89,7 @@ The Google Storage component supports 16 options, which are listed below.
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | The storage client |  | Storage
+| *storageClient* (common) | *Autowired* The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
@@ -132,7 +132,7 @@ with the following path and query parameters:
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | The storage client |  | Storage
+| *storageClient* (common) | *Autowired* The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
@@ -395,5 +395,3 @@ This will require specifying the destinationBucket option. As example:
 --------------------------------------------------------------------------------
 
 In this case the objects consumed will be moved to myCamelProcessedBucket bucket and deleted from the original one (because of deleteAfterRead).
-
-
diff --git a/components/camel-google-storage/pom.xml b/components/camel-google-storage/pom.xml
index d193dfa..a76b3f7 100644
--- a/components/camel-google-storage/pom.xml
+++ b/components/camel-google-storage/pom.xml
@@ -33,7 +33,7 @@
   <description>Camel Component for Google Cloud Platform Storage</description>
 
   <properties>
-    <firstVersion>3.8.0</firstVersion>
+    <firstVersion>3.9.0</firstVersion>
   </properties>
 
   <dependencyManagement>
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
index 951b4cf..0cba237 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfigurer.java
@@ -63,6 +63,11 @@ public class GoogleCloudStorageComponentConfigurer extends PropertyConfigurerSup
     }
 
     @Override
+    public String[] getAutowiredNames() {
+        return new String[]{"storageClient"};
+    }
+
+    @Override
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "autocreatebucket":
diff --git a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
index 105ba9a..53d4c0f 100644
--- a/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
+++ b/components/camel-google-storage/src/generated/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpointConfigurer.java
@@ -86,6 +86,11 @@ public class GoogleCloudStorageEndpointConfigurer extends PropertyConfigurerSupp
     }
 
     @Override
+    public String[] getAutowiredNames() {
+        return new String[]{"storageClient"};
+    }
+
+    @Override
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "autocreatebucket":
diff --git a/components/camel-google-storage/src/generated/resources/google-storage.json b/components/camel-google-storage/src/generated/resources/google-storage.json
index 1ac1300..596edc1 100644
--- a/components/camel-google-storage/src/generated/resources/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/google-storage.json
@@ -5,7 +5,7 @@
     "title": "Google Storage",
     "description": "Camel Component for Google Cloud Platform Storage",
     "deprecated": false,
-    "firstVersion": "3.8.0",
+    "firstVersion": "3.9.0",
     "supportLevel": "Preview",
     "groupId": "org.apache.camel",
     "artifactId": "camel-google-storage",
diff --git a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index 619a6b9..b5b787c 100644
--- a/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ b/components/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -5,7 +5,7 @@
     "title": "Google Storage",
     "description": "Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.",
     "deprecated": false,
-    "firstVersion": "3.8.0",
+    "firstVersion": "3.9.0",
     "label": "cloud",
     "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponent",
     "supportLevel": "Preview",
@@ -26,7 +26,7 @@
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The component configuration" },
     "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
     "storageClass": { "kind": "property", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when creat [...]
-    "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The storage client" },
+    "storageClient": { "kind": "property", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The storage client" },
     "storageLocation": { "kind": "property", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new  [...]
     "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 [...]
     "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. Th [...]
@@ -44,7 +44,7 @@
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket bucketName." },
     "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, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Service account key to authenticate an application as a service account" },
     "storageClass": { "kind": "parameter", "displayName": "Storage Class", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.google.cloud.storage.StorageClass", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "STANDARD", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage class to use when crea [...]
-    "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The storage client" },
+    "storageClient": { "kind": "parameter", "displayName": "Storage Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.google.cloud.storage.Storage", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The storage client" },
     "storageLocation": { "kind": "parameter", "displayName": "Storage Location", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "US-EAST1", "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "The Cloud Storage location to use when creating the new [...]
     "bridgeErrorHandler": { "kind": "parameter", "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 m [...]
     "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.google.storage.GoogleCloudStorageComponentConfiguration", "configurationField": "configuration", "description": "Delete objects from the bucket after they have been retrieved. T [...]
diff --git a/components/camel-google-storage/src/main/docs/google-storage-component.adoc b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
index d50dd54..e63875f 100644
--- a/components/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -3,7 +3,7 @@
 :docTitle: Google Storage
 :artifactId: camel-google-storage
 :description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
-:since: 3.8
+:since: 3.9
 :supportLevel: Preview
 :component-header: Both producer and consumer are supported
 include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
@@ -89,7 +89,7 @@ The Google Storage component supports 16 options, which are listed below.
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | The storage client |  | Storage
+| *storageClient* (common) | *Autowired* The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
@@ -132,7 +132,7 @@ with the following path and query parameters:
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | The storage client |  | Storage
+| *storageClient* (common) | *Autowired* The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
@@ -395,5 +395,3 @@ This will require specifying the destinationBucket option. As example:
 --------------------------------------------------------------------------------
 
 In this case the objects consumed will be moved to myCamelProcessedBucket bucket and deleted from the original one (because of deleteAfterRead).
-
-
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
index 7129bdb..288dec4 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageComponentConfiguration.java
@@ -68,6 +68,7 @@ public class GoogleCloudStorageComponentConfiguration implements Cloneable {
     private boolean includeFolders = true;
 
     @UriParam
+    @Metadata(autowired = true)
     private Storage storageClient;
 
     public String getBucketName() {
diff --git a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 0e8043b..e0a4b17 100644
--- a/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ b/components/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -46,7 +46,7 @@ import org.slf4j.LoggerFactory;
  * behavior of Consumer and Producer.
  * 
  */
-@UriEndpoint(firstVersion = "3.8.0", scheme = "google-storage", title = "Google Storage", syntax = "google-storage:bucketName",
+@UriEndpoint(firstVersion = "3.9.0", scheme = "google-storage", title = "Google Storage", syntax = "google-storage:bucketName",
              category = {
                      Category.CLOUD })
 public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index 44cfc6f..a47b8d2 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -1989,7 +1989,7 @@ public interface ComponentsBuilderFactory {
      * google-cloud-storage library.
      * 
      * Category: cloud
-     * Since: 3.8
+     * Since: 3.9
      * Maven coordinates: org.apache.camel:camel-google-storage
      * 
      * @return the dsl builder
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
index afcec5a..47b4229 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/GoogleStorageComponentBuilderFactory.java
@@ -37,7 +37,7 @@ public interface GoogleStorageComponentBuilderFactory {
      * google-cloud-storage library.
      * 
      * Category: cloud
-     * Since: 3.8
+     * Since: 3.9
      * Maven coordinates: org.apache.camel:camel-google-storage
      * 
      * @return the dsl builder
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index 8eb5ae4..390ac5b 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -3239,7 +3239,7 @@
     "title": "Google Storage",
     "description": "Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.",
     "deprecated": false,
-    "firstVersion": "3.8.0",
+    "firstVersion": "3.9.0",
     "label": "cloud",
     "javaType": "org.apache.camel.component.google.storage.GoogleCloudStorageComponent",
     "supportLevel": "Preview",
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index 72fbb64..f0d50e9 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -6701,7 +6701,7 @@ public class StaticEndpointBuilders {
      * google-cloud-storage library.
      * 
      * Category: cloud
-     * Since: 3.8
+     * Since: 3.9
      * Maven coordinates: org.apache.camel:camel-google-storage
      * 
      * Syntax: <code>google-storage:bucketName</code>
@@ -6722,7 +6722,7 @@ public class StaticEndpointBuilders {
      * google-cloud-storage library.
      * 
      * Category: cloud
-     * Since: 3.8
+     * Since: 3.9
      * Maven coordinates: org.apache.camel:camel-google-storage
      * 
      * Syntax: <code>google-storage:bucketName</code>
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
index f1eac32..1520a1a 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleCloudStorageEndpointBuilderFactory.java
@@ -1460,7 +1460,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * the google-cloud-storage library.
          * 
          * Category: cloud
-         * Since: 3.8
+         * Since: 3.9
          * Maven coordinates: org.apache.camel:camel-google-storage
          * 
          * Syntax: <code>google-storage:bucketName</code>
@@ -1480,7 +1480,7 @@ public interface GoogleCloudStorageEndpointBuilderFactory {
          * the google-cloud-storage library.
          * 
          * Category: cloud
-         * Since: 3.8
+         * Since: 3.9
          * Maven coordinates: org.apache.camel:camel-google-storage
          * 
          * Syntax: <code>google-storage:bucketName</code>
diff --git a/docs/components/modules/ROOT/pages/google-storage-component.adoc b/docs/components/modules/ROOT/pages/google-storage-component.adoc
index 0a9aefa..f8348c6 100644
--- a/docs/components/modules/ROOT/pages/google-storage-component.adoc
+++ b/docs/components/modules/ROOT/pages/google-storage-component.adoc
@@ -5,7 +5,7 @@
 :docTitle: Google Storage
 :artifactId: camel-google-storage
 :description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
-:since: 3.8
+:since: 3.9
 :supportLevel: Preview
 :component-header: Both producer and consumer are supported
 include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
@@ -91,7 +91,7 @@ The Google Storage component supports 16 options, which are listed below.
 | *configuration* (common) | The component configuration |  | GoogleCloudStorageComponentConfiguration
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | The storage client |  | Storage
+| *storageClient* (common) | *Autowired* The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
@@ -134,7 +134,7 @@ with the following path and query parameters:
 | *autoCreateBucket* (common) | Setting the autocreation of the bucket bucketName. | true | boolean
 | *serviceAccountKey* (common) | Service account key to authenticate an application as a service account |  | String
 | *storageClass* (common) | The Cloud Storage class to use when creating the new buckets | STANDARD | StorageClass
-| *storageClient* (common) | The storage client |  | Storage
+| *storageClient* (common) | *Autowired* The storage client |  | Storage
 | *storageLocation* (common) | The Cloud Storage location to use when creating the new buckets | US-EAST1 | String
 | *bridgeErrorHandler* (consumer) | 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 message and handled by the routing Error Handler. 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. | false | boolean
 | *deleteAfterRead* (consumer) | Delete objects from the bucket after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. | true | boolean
@@ -397,5 +397,3 @@ This will require specifying the destinationBucket option. As example:
 --------------------------------------------------------------------------------
 
 In this case the objects consumed will be moved to myCamelProcessedBucket bucket and deleted from the original one (because of deleteAfterRead).
-
-


[camel] 30/31: CAMEL-15964 - Regen docs

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit da671881826d3983cb72623d092f52e50e3e409d
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 17 07:15:18 2021 +0100

    CAMEL-15964 - Regen docs
---
 .../resources/org/apache/camel/catalog}/docs/google-storage.adoc | 7 +++----
 .../camel-google-storage/src/main/docs/google-storage.adoc       | 7 +++----
 .../components/modules/others/pages}/google-storage.adoc         | 9 +++++----
 3 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/components/camel-google-storage/src/main/docs/google-storage.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage.adoc
similarity index 98%
copy from components/camel-google-storage/src/main/docs/google-storage.adoc
copy to catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage.adoc
index ee5dec8..18d0e11 100644
--- a/components/camel-google-storage/src/main/docs/google-storage.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-storage.adoc
@@ -1,12 +1,11 @@
-[[google-storage-component]]
+[[google-storage-other]]
 = Google Storage Component
 :docTitle: Google Storage
 :artifactId: camel-google-storage
-:description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
+:description: Camel Component for Google Cloud Platform Storage
 :since: 3.9
 :supportLevel: Preview
-:component-header: Both producer and consumer are supported
-include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/others/google-storage.adoc[opts=optional]
 //Manually maintained attributes
 :group: Google
 
diff --git a/components/camel-google-storage/src/main/docs/google-storage.adoc b/components/camel-google-storage/src/main/docs/google-storage.adoc
index ee5dec8..18d0e11 100644
--- a/components/camel-google-storage/src/main/docs/google-storage.adoc
+++ b/components/camel-google-storage/src/main/docs/google-storage.adoc
@@ -1,12 +1,11 @@
-[[google-storage-component]]
+[[google-storage-other]]
 = Google Storage Component
 :docTitle: Google Storage
 :artifactId: camel-google-storage
-:description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
+:description: Camel Component for Google Cloud Platform Storage
 :since: 3.9
 :supportLevel: Preview
-:component-header: Both producer and consumer are supported
-include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/others/google-storage.adoc[opts=optional]
 //Manually maintained attributes
 :group: Google
 
diff --git a/components/camel-google-storage/src/main/docs/google-storage.adoc b/docs/components/modules/others/pages/google-storage.adoc
similarity index 98%
copy from components/camel-google-storage/src/main/docs/google-storage.adoc
copy to docs/components/modules/others/pages/google-storage.adoc
index ee5dec8..d8504c5 100644
--- a/components/camel-google-storage/src/main/docs/google-storage.adoc
+++ b/docs/components/modules/others/pages/google-storage.adoc
@@ -1,12 +1,13 @@
-[[google-storage-component]]
+[[google-storage-other]]
 = Google Storage Component
+//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
+:page-source: components/camel-google-storage/src/main/docs/google-storage.adoc
 :docTitle: Google Storage
 :artifactId: camel-google-storage
-:description: Store and retrieve objects from Google Cloud Storage Service using the google-cloud-storage library.
+:description: Camel Component for Google Cloud Platform Storage
 :since: 3.9
 :supportLevel: Preview
-:component-header: Both producer and consumer are supported
-include::{cq-version}@camel-quarkus:ROOT:partial$reference/components/google-storage.adoc[opts=optional]
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/others/google-storage.adoc[opts=optional]
 //Manually maintained attributes
 :group: Google