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 2020/03/06 09:59:35 UTC

[camel] branch master updated (1acec4a -> 057cb6a)

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 1acec4a  CAMEL-14662: Upgrade to Zookeeper 3.5.x
     new 8b0a048  CAMEL-14555 - Create an AWS-S3 component based on SDK v2
     new 08be2c9  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, docs
     new 0aadbdc  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, regen docs
     new 145bf91  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, added component to kit
     new a28e830  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, removed not used Spring xml test file
     new 1a5ff48  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, fixed CS
     new 99eef59  Regen
     new 8b288d0  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, changed some comments
     new a2686e0  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, changed region description
     new 43eef92  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, regen
     new ac66abd  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, fixed CS
     new 95a0f92  CAMEL-14555 - Create an AWS-S3 component based on SDK v2, pointing to the correct SB adoc
     new 15237dc  Regen docs
     new 057cb6a  Regen docs

The 14 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:
 apache-camel/src/main/descriptors/common-bin.xml   |    1 +
 bom/camel-bom/pom.xml                              |    5 +
 components/camel-aws2-s3/pom.xml                   |   86 +
 .../aws2/s3/AWS2S3ComponentConfigurer.java         |   98 +
 .../aws2/s3/AWS2S3EndpointConfigurer.java          |  128 +
 .../services/org/apache/camel/component.properties |    7 +
 .../services/org/apache/camel/component/aws2-s3    |    2 +
 .../org/apache/camel/configurer/aws2-s3-component  |    2 +
 .../org/apache/camel/configurer/aws2-s3-endpoint   |    2 +
 .../apache/camel/component/aws2/s3/aws2-s3.json    |  120 +
 .../src/main/docs/aws2-s3-component.adoc           |  528 +++++
 .../camel/component/aws2/s3/AWS2S3Component.java   |   83 +
 .../aws2/s3/AWS2S3ComponentVerifierExtension.java  |   84 +
 .../component/aws2/s3/AWS2S3Configuration.java     |  523 ++++
 .../camel/component/aws2/s3/AWS2S3Constants.java   |   50 +
 .../camel/component/aws2/s3/AWS2S3Consumer.java    |  248 ++
 .../camel/component/aws2/s3/AWS2S3Endpoint.java    |  270 +++
 .../camel/component/aws2/s3/AWS2S3Operations.java  |   22 +
 .../camel/component/aws2/s3/AWS2S3Producer.java    |  392 +++
 .../aws2/s3/client/AWS2CamelS3InternalClient.java  |   33 +
 .../aws2/s3/client/AWS2S3ClientFactory.java        |   42 +
 .../client/impl/AWS2S3ClientIAMOptimizedImpl.java  |   87 +
 .../s3/client/impl/AWS2S3ClientStandardImpl.java   |   87 +
 .../component/aws2/s3/AWSS3ClientFactoryTest.java  |   50 +
 .../aws2/s3/S3ComponentVerifierExtensionTest.java  |   71 +
 .../s3/integration/S3ComponentIntegrationTest.java |  122 +
 .../S3ObjectRangeOperationIntegrationTest.java     |  108 +
 .../src/test/resources/log4j2.properties           |    0
 components/pom.xml                                 |    1 +
 core/camel-allcomponents/pom.xml                   |    4 +
 .../component/ComponentsBuilderFactory.java        |   12 +
 .../dsl/Aws2S3ComponentBuilderFactory.java         |  616 +++++
 .../src/generated/resources/metadata.json          |   20 +
 .../builder/endpoint/EndpointBuilderFactory.java   |    1 +
 .../camel/builder/endpoint/EndpointBuilders.java   |    1 +
 .../endpoint/dsl/AWS2S3EndpointBuilderFactory.java | 2494 ++++++++++++++++++++
 docs/components/modules/ROOT/nav.adoc              |    1 +
 .../modules/ROOT/pages/aws2-s3-component.adoc      |  529 +++++
 docs/components/modules/ROOT/pages/index.adoc      |    4 +-
 parent/pom.xml                                     |    5 +
 40 files changed, 6938 insertions(+), 1 deletion(-)
 create mode 100644 components/camel-aws2-s3/pom.xml
 create mode 100644 components/camel-aws2-s3/src/generated/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentConfigurer.java
 create mode 100644 components/camel-aws2-s3/src/generated/java/org/apache/camel/component/aws2/s3/AWS2S3EndpointConfigurer.java
 create mode 100644 components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/component.properties
 create mode 100644 components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/component/aws2-s3
 create mode 100644 components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/configurer/aws2-s3-component
 create mode 100644 components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/configurer/aws2-s3-endpoint
 create mode 100644 components/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
 create mode 100644 components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Component.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentVerifierExtension.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2CamelS3InternalClient.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2S3ClientFactory.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientIAMOptimizedImpl.java
 create mode 100644 components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientStandardImpl.java
 create mode 100644 components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/AWSS3ClientFactoryTest.java
 create mode 100644 components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/S3ComponentVerifierExtensionTest.java
 create mode 100644 components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ComponentIntegrationTest.java
 create mode 100644 components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ObjectRangeOperationIntegrationTest.java
 copy components/{camel-aws-s3 => camel-aws2-s3}/src/test/resources/log4j2.properties (100%)
 create mode 100644 core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Aws2S3ComponentBuilderFactory.java
 create mode 100644 core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
 create mode 100644 docs/components/modules/ROOT/pages/aws2-s3-component.adoc


[camel] 11/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, fixed CS

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 ac66abd8aae54798cdcc9106c92f1eb5a5b81a8b
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 09:46:41 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, fixed CS
---
 .../java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java     | 1 -
 1 file changed, 1 deletion(-)

diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
index 915eeac..a3e108d 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
@@ -20,7 +20,6 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.util.ObjectHelper;
-
 import software.amazon.awssdk.core.Protocol;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.s3.model.Encryption;


[camel] 03/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, 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 0aadbdc403317957e408b7e00d6efb6df79bf1e8
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 08:28:16 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, regen docs
---
 .../src/main/docs/aws2-s3-component.adoc           | 526 +++++++++++++++++++++
 1 file changed, 526 insertions(+)

diff --git a/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc b/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
new file mode 100644
index 0000000..1eff0a4
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
@@ -0,0 +1,526 @@
+= AWS2 S3 Storage Service Component
+
+*Since Camel 2.8*
+*Since Camel 3.2*
+
+
+// HEADER START
+*Both producer and consumer is supported*
+// HEADER END
+
+The S3 component supports storing and retrieving objects from/to
+https://aws.amazon.com/s3[Amazon's S3] service.
+
+Prerequisites
+
+You must have a valid Amazon Web Services developer account, and be
+signed up to use Amazon S3. More information is available at
+https://aws.amazon.com/s3[Amazon S3].
+
+== URI Format
+
+[source,java]
+------------------------------
+aws2-s3://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("aws2-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt")
+  .to("file:/var/downloaded");
+--------------------------------------------------------------------------------
+
+
+== URI Options
+
+
+// component options: START
+The AWS2 S3 Storage Service component supports 37 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *amazonS3Client* (common) | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. |  | S3Client
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket | true | boolean
+| *configuration* (common) | The component configuration |  | AWS2S3Configuration
+| *pathStyleAccess* (common) | Whether or not the S3 client should use path style access | false | boolean
+| *policy* (common) | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
+| *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
+| *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
+| *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
+| *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | Encryption
+| *useEncryption* (common) | Define if encryption must be used or not | false | boolean
+| *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 [...]
+| *delimiter* (consumer) | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *fileName* (consumer) | To get the object from the bucket with the given file name |  | String
+| *includeBody* (consumer) | If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *prefix* (consumer) | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *autocloseBody* (consumer) | If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *deleteAfterWrite* (producer) | Delete file object after the S3 file has been uploaded | false | boolean
+| *keyName* (producer) | Setting the key name for an element in the bucket through endpoint parameter |  | String
+| *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 [...]
+| *multiPartUpload* (producer) | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | boolean
+| *operation* (producer) | The operation to do in case the user don't want to do only an upload. The value can be one of: copyObject, deleteBucket, listBuckets, downloadLink |  | AWS2S3Operations
+| *partSize* (producer) | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | long
+| *serverSideEncryption* (producer) | Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256. |  | String
+| *storageClass* (producer) | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
+| *awsKMSKeyId* (producer) | Define the id of KMS key to use in case KMS is enabled |  | String
+| *useAwsKMS* (producer) | Define if KMS must be used or not | false | boolean
+| *accelerateModeEnabled* ( advanced) | Define if Accelerate Mode enabled is true or false | false | boolean
+| *chunkedEncodingDisabled* ( advanced) | Define if disabled Chunked Encoding is true or false | false | boolean
+| *dualstackEnabled* ( advanced) | Define if Dualstack enabled is true or false | false | boolean
+| *forceGlobalBucketAccessEnabled* ( advanced) | Define if Force Global Bucket Access enabled is true or false | false | boolean
+| *payloadSigningEnabled* ( advanced) | Define if Payload Signing enabled is true or false | false | boolean
+| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *accessKey* (security) | Amazon AWS Access Key |  | String
+| *secretKey* (security) | Amazon AWS Secret Key |  | String
+|===
+// component options: END
+
+
+
+
+
+
+
+
+
+
+
+// endpoint options: START
+The AWS2 S3 Storage Service endpoint is configured using URI syntax:
+
+----
+aws2-s3://bucketNameOrArn
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *bucketNameOrArn* | *Required* Bucket name or ARN |  | String
+|===
+
+
+=== Query Parameters (57 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *amazonS3Client* (common) | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. |  | S3Client
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket | true | boolean
+| *pathStyleAccess* (common) | Whether or not the S3 client should use path style access | false | boolean
+| *policy* (common) | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
+| *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
+| *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
+| *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
+| *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | Encryption
+| *useEncryption* (common) | Define if encryption must be used or not | false | boolean
+| *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 [...]
+| *delimiter* (consumer) | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *fileName* (consumer) | To get the object from the bucket with the given file name |  | String
+| *includeBody* (consumer) | If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *maxConnections* (consumer) | Set the maxConnections parameter in the S3 client configuration | 60 | int
+| *maxMessagesPerPoll* (consumer) | Gets the maximum number of messages as a limit to poll at each polling. Gets the maximum number of messages as a limit to poll at each polling. The default value is 10. Use 0 or a negative number to set it as unlimited. | 10 | int
+| *prefix* (consumer) | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *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
+| *autocloseBody* (consumer) | If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | 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. 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
+| *deleteAfterWrite* (producer) | Delete file object after the S3 file has been uploaded | false | boolean
+| *keyName* (producer) | Setting the key name for an element in the bucket through endpoint parameter |  | String
+| *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 [...]
+| *multiPartUpload* (producer) | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | boolean
+| *operation* (producer) | The operation to do in case the user don't want to do only an upload. The value can be one of: copyObject, deleteBucket, listBuckets, downloadLink |  | AWS2S3Operations
+| *partSize* (producer) | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | long
+| *serverSideEncryption* (producer) | Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256. |  | String
+| *storageClass* (producer) | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
+| *awsKMSKeyId* (producer) | Define the id of KMS key to use in case KMS is enabled |  | String
+| *useAwsKMS* (producer) | Define if KMS must be used or not | false | boolean
+| *accelerateModeEnabled* ( advanced) | Define if Accelerate Mode enabled is true or false | false | boolean
+| *chunkedEncodingDisabled* ( advanced) | Define if disabled Chunked Encoding is true or false | false | boolean
+| *dualstackEnabled* ( advanced) | Define if Dualstack enabled is true or false | false | boolean
+| *forceGlobalBucketAccessEnabled* ( advanced) | Define if Force Global Bucket Access enabled is true or false | false | boolean
+| *payloadSigningEnabled* ( advanced) | Define if Payload Signing enabled is true or false | false | boolean
+| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+| *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. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 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. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 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. 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. The value can be one of: none, spring, quartz | none | String
+| *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. 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
+| *accessKey* (security) | Amazon AWS Access Key |  | String
+| *secretKey* (security) | Amazon AWS Secret Key |  | String
+|===
+// endpoint options: END
+
+
+
+
+
+
+
+
+
+
+Required S3 component options
+
+You have to provide the amazonS3Client in the
+Registry or your accessKey and secretKey to access
+the https://aws.amazon.com/s3[Amazon's S3].
+
+== Batch Consumer
+
+This component implements the Batch Consumer.
+
+This allows you for instance to know how many messages exists in this
+batch and for instance let the Aggregator
+aggregate this number of messages.
+
+== Usage
+
+=== Message headers evaluated by the S3 producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelAwsS3BucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+
+|`CamelAwsS3BucketDestinationName` |`String` |The bucket Destination Name which will be used for the current operation
+
+|`CamelAwsS3ContentLength` |`Long` |The content length of this object.
+
+|`CamelAwsS3ContentType` |`String` |The content type of this object.
+
+|`CamelAwsS3ContentControl` |`String` |The content control of this object.
+
+|`CamelAwsS3ContentDisposition` |`String` |The content disposition of this object.
+
+|`CamelAwsS3ContentEncoding` |`String` |The content encoding of this object.
+
+|`CamelAwsS3ContentMD5` |`String` |The md5 checksum of this object.
+
+|`CamelAwsS3DestinationKey` |`String` |The Destination key which will be used for the current operation
+
+|`CamelAwsS3Key` |`String` |The key under which this object will be stored or which will be used for the current operation
+
+|`CamelAwsS3LastModified` |`java.util.Date` |The last modified timestamp of this object.
+
+|`CamelAwsS3Operation` |`String` |The operation to perform. Permitted values are copyObject, deleteObject, listBuckets, deleteBucket, downloadLink, listObjects
+
+|`CamelAwsS3StorageClass` |`String` |The storage class of this object.
+
+|`CamelAwsS3CannedAcl` |`String` |The canned acl that will be applied to the object. see
+`com.amazonaws.services.s3.model.CannedAccessControlList` for allowed
+values.
+
+|`CamelAwsS3Acl` |`com.amazonaws.services.s3.model.AccessControlList` |A well constructed Amazon S3 Access Control List object.
+see `com.amazonaws.services.s3.model.AccessControlList` for more details
+
+|`CamelAwsS3Headers` |`Map<String,String>` |Support to get or set custom objectMetadata headers.
+
+|`CamelAwsS3ServerSideEncryption` |String |Sets the server-side encryption algorithm when encrypting
+the object using AWS-managed keys. For example use AES256.
+
+|`CamelAwsS3VersionId` |`String` |The version Id of the object to be stored or returned from the current operation
+|=======================================================================
+
+=== Message headers set by the S3 producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+|`CamelAwsS3ETag` |`String` |The ETag value for the newly uploaded object.
+
+|`CamelAwsS3VersionId` |`String` |The *optional* version ID of the newly uploaded object.
+
+|`CamelAwsS3DownloadLinkExpiration` | `String` | The expiration (millis) of URL download link. The link will be stored into *CamelAwsS3DownloadLink* response header.
+
+|=======================================================================
+
+=== Message headers set by the S3 consumer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelAwsS3Key` |`String` |The key under which this object is stored.
+
+|`CamelAwsS3BucketName` |`String` |The name of the bucket in which this object is contained.
+
+|`CamelAwsS3ETag` |`String` |The hex encoded 128-bit MD5 digest of the associated object according to
+RFC 1864. This data is used as an integrity check to verify that the
+data received by the caller is the same data that was sent by Amazon S3.
+
+|`CamelAwsS3LastModified` |`Date` |The value of the Last-Modified header, indicating the date and time at
+which Amazon S3 last recorded a modification to the associated object.
+
+|`CamelAwsS3VersionId` |`String` |The version ID of the associated Amazon S3 object if available. Version
+IDs are only assigned to objects when an object is uploaded to an Amazon
+S3 bucket that has object versioning enabled.
+
+|`CamelAwsS3ContentType` |`String` |The Content-Type HTTP header, which indicates the type of content stored
+in the associated object. The value of this header is a standard MIME
+type.
+
+|`CamelAwsS3ContentMD5` |`String` |The base64 encoded 128-bit MD5 digest of the associated object (content
+- not including headers) according to RFC 1864. This data is used as a
+message integrity check to verify that the data received by Amazon S3 is
+the same data that the caller sent.
+
+|`CamelAwsS3ContentLength` |`Long` |The Content-Length HTTP header indicating the size of the associated
+object in bytes.
+
+|`CamelAwsS3ContentEncoding` |`String` |The *optional* Content-Encoding HTTP header specifying what content
+encodings have been applied to the object and what decoding mechanisms
+must be applied in order to obtain the media-type referenced by the
+Content-Type field.
+
+|`CamelAwsS3ContentDisposition` |`String` |The *optional* Content-Disposition HTTP header, which specifies
+presentational information such as the recommended filename for the
+object to be saved as.
+
+|`CamelAwsS3ContentControl` |`String` |The *optional* Cache-Control HTTP header which allows the user to
+specify caching behavior along the HTTP request/reply chain.
+
+|`CamelAwsS3ServerSideEncryption` |String |The server-side encryption algorithm when encrypting the
+object using AWS-managed keys.
+|=======================================================================
+
+=== S3 Producer operations
+
+Camel-AWS s3 component provides the following operation on the producer side:
+
+- copyObject
+- deleteObject
+- listBuckets
+- deleteBucket
+- listObjects
+- getObject (this will return an S3Object instance)
+- getObjectRange (this will return an S3Object instance)
+
+=== Advanced AmazonS3 configuration
+
+If your Camel Application is running behind a firewall or if you need to
+have more control over the `S3Client` instance configuration, you can
+create your own instance and refer to it in your Camel aws2-s3 component configuration:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("aws2-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+=== Use KMS with the S3 component
+
+To use AWS KMS to encrypt/decrypt data by using AWS infrastructure you can use the options introduced in 2.21.x like in the following example
+
+[source,java]
+--------------------------------------------------------------------------------
+from("file:tmp/test?fileName=test.txt")
+     .setHeader(S3Constants.KEY, constant("testFile"))
+     .to("aws2-s3://mybucket?amazonS3Client=#client&useAwsKMS=true&awsKMSKeyId=3f0637ad-296a-3dfe-a796-e60654fb128c");
+--------------------------------------------------------------------------------
+
+In this way you'll ask to S3, to use the KMS key 3f0637ad-296a-3dfe-a796-e60654fb128c, to encrypt the file test.txt. When you'll ask to download this file, the decryption will be done directly before the download.
+
+=== Use "useIAMCredentials" with the s3 component
+
+To use AWS IAM credentials, you must first verify that the EC2 in which you are launching the Camel application on has an IAM role associated with it containing the appropriate policies attached to run effectively.
+Keep in mind that this feature should only be set to "true" on remote instances. To clarify even further, you must still use static credentials locally since IAM is an AWS specific component,
+but AWS environments should now be easier to manage. After this is implemented and understood, you can set the query parameter "useIAMCredentials" to "true" for AWS environments! To effectively toggle this
+on and off based on local and remote environments, you can consider enabling this query parameter with system environment variables. For example, your code could set the "useIAMCredentials" query parameter to "true",
+when the system environment variable called "isRemote" is set to true (there are many other ways to do this and this should act as a simple example). Although it doesn't take away the need for static credentials completely,
+using IAM credentials on AWS environments takes away the need to refresh on remote environments and adds a major security boost (IAM credentials are refreshed automatically every 6 hours and update when their
+policies are updated). This is the AWS recommended way to manage credentials and therefore should be used as often as possible.
+
+=== S3 Producer Operation examples
+
+- 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("aws2-s3://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("aws2-s3://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("aws2-s3://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("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the bucket mycamelbucket
+
+- DownloadLink: this operation create a download link for the file specified in the key header
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+                    
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); 
+      }
+  })
+  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=downloadLink")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will create a downloadLink for the file camelKey in the bucket mycamelbucket
+
+- ListObjects: this operation list object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("aws2-s3://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("aws2-s3://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("aws2-s3://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.
+
+== 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.
+
+== Automatic detection of AmazonS3 client in registry
+
+The component is capable of detecting the presence of an AmazonS3 bean into the registry.
+If it's the only instance of that type it will be used as client and you won't have to define it as uri parameter, like the example above.
+This may be really useful for smarter configuration of the endpoint.
+
+== 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.
+
+== Dependencies
+
+Maven users will need to add the following dependency to their pom.xml.
+
+*pom.xml*
+
+[source,xml]
+---------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-aws2-s3</artifactId>
+    <version>${camel-version}</version>
+</dependency>
+---------------------------------------
+
+where `$\{camel-version\}` must be replaced by the actual version of Camel.
+
+
+include::camel-spring-boot::page$aws-s3-starter.adoc[]


[camel] 12/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, pointing to the correct SB adoc

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 95a0f920f3f3e2ca9d0ed17dfa683fdce00a6301
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 09:49:53 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, pointing to the correct SB adoc
---
 components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc b/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
index 6856fc8..dca831f 100644
--- a/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
+++ b/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
@@ -525,4 +525,4 @@ Maven users will need to add the following dependency to their pom.xml.
 where `$\{camel-version\}` must be replaced by the actual version of Camel.
 
 
-include::camel-spring-boot::page$aws-s3-starter.adoc[]
+include::camel-spring-boot::page$aws2-s3-starter.adoc[]


[camel] 08/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, changed some comments

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 8b288d0902a4f738350cb9094fbefbc802206347
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 09:31:31 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, changed some comments
---
 .../main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java  | 2 +-
 .../main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java   | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
index b3d9dd8..d916567 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
@@ -17,7 +17,7 @@
 package org.apache.camel.component.aws2.s3;
 
 /**
- * Constants used in Camel AWS S3 module
+ * Constants used in Camel AWS2 S3 module
  */
 public interface AWS2S3Constants {
 
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
index a7c1c42..ec5a17b 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
@@ -49,10 +49,9 @@ import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
 import software.amazon.awssdk.services.s3.model.GetObjectResponse;
 import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
 import software.amazon.awssdk.services.s3.model.PutBucketPolicyRequest;
-import software.amazon.awssdk.services.s3.model.S3Object;
 
 /**
- * The aws-s3 component is used for storing and retrieving object from Amazon S3
+ * The aws2-s3 component is used for storing and retrieving object from Amazon S3
  * Storage Service.
  */
 @UriEndpoint(firstVersion = "3.2.0", scheme = "aws2-s3", title = "AWS2 S3 Storage Service", syntax = "aws2-s3://bucketNameOrArn", label = "cloud,file")


[camel] 04/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, 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 145bf919fb752289a1e4f27078ee213bc9282fb5
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 08:30:57 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, added component to kit
---
 apache-camel/src/main/descriptors/common-bin.xml | 1 +
 bom/camel-bom/pom.xml                            | 5 +++++
 components/pom.xml                               | 1 +
 parent/pom.xml                                   | 5 +++++
 4 files changed, 12 insertions(+)

diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index 7a2c9e4..2d16104 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -97,6 +97,7 @@
         <include>org.apache.camel:camel-aws2-lambda</include>
         <include>org.apache.camel:camel-aws2-mq</include>
         <include>org.apache.camel:camel-aws2-msk</include>
+        <include>org.apache.camel:camel-aws2-s3</include>
         <include>org.apache.camel:camel-aws2-ses</include>
         <include>org.apache.camel:camel-aws2-sns</include>
         <include>org.apache.camel:camel-aws2-sqs</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index f656513..3de2e01 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -273,6 +273,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-aws2-s3</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-aws2-ses</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/pom.xml b/components/pom.xml
index 490bbde..2f68aca 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -134,6 +134,7 @@
         <module>camel-aws2-lambda</module>
         <module>camel-aws2-msk</module>
         <module>camel-aws2-mq</module>
+        <module>camel-aws2-s3</module>
         <module>camel-aws2-ses</module>
         <module>camel-aws2-sns</module>
         <module>camel-aws2-sqs</module>
diff --git a/parent/pom.xml b/parent/pom.xml
index 6f524ef..19fb8ac 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -1106,6 +1106,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-aws2-s3</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-aws2-ses</artifactId>
         <version>${project.version}</version>
       </dependency>


[camel] 10/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, 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 43eef921bf394f831e169cbbd899b7bc453541b8
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 09:37:15 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, regen
---
 .../apache/camel/component/aws2/s3/aws2-s3.json    |  6 ++---
 .../src/main/docs/aws2-s3-component.adoc           |  6 ++---
 .../component/ComponentsBuilderFactory.java        |  2 +-
 .../dsl/Aws2S3ComponentBuilderFactory.java         | 12 +++++-----
 .../src/generated/resources/metadata.json          |  2 +-
 .../endpoint/dsl/AWS2S3EndpointBuilderFactory.java | 26 +++++++++++-----------
 6 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/components/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json b/components/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
index b3bcf95..8f85d87 100644
--- a/components/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
+++ b/components/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
@@ -5,7 +5,7 @@
     "extendsScheme": "",
     "syntax": "aws2-s3:\/\/bucketNameOrArn",
     "title": "AWS2 S3 Storage Service",
-    "description": "The aws-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.",
+    "description": "The aws2-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.",
     "label": "cloud,file",
     "deprecated": false,
     "async": false,
@@ -27,7 +27,7 @@
     "proxyHost": { "kind": "property", "displayName": "Proxy Host", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To define a proxy host when instantiating the SQS client" },
     "proxyPort": { "kind": "property", "displayName": "Proxy Port", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Specify a proxy port to be used inside the client definition." },
     "proxyProtocol": { "kind": "property", "displayName": "Proxy Protocol", "group": "common", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.core.Protocol", "enum": [ "HTTP", "HTTPS" ], "deprecated": false, "secret": false, "defaultValue": "HTTPS", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To define a proxy protocol when instantiating the S3 client" },
-    "region": { "kind": "property", "displayName": "Region", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST [...]
+    "region": { "kind": "property", "displayName": "Region", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1 [...]
     "useIAMCredentials": { "kind": "property", "displayName": "Use IAMCredentials", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be  [...]
     "encryptionMaterials": { "kind": "property", "displayName": "Encryption Materials", "group": "common (advanced)", "label": "common,advanced", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.s3.model.Encryption", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The encryption materials to use in case of Symmetric\/Asymmetric clie [...]
     "useEncryption": { "kind": "property", "displayName": "Use Encryption", "group": "common (advanced)", "label": "common,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if encryption must be used or not" },
@@ -66,7 +66,7 @@
     "proxyHost": { "kind": "parameter", "displayName": "Proxy Host", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To define a proxy host when instantiating the SQS client" },
     "proxyPort": { "kind": "parameter", "displayName": "Proxy Port", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Specify a proxy port to be used inside the client definition." },
     "proxyProtocol": { "kind": "parameter", "displayName": "Proxy Protocol", "group": "common", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.core.Protocol", "enum": [ "HTTP", "HTTPS" ], "deprecated": false, "secret": false, "defaultValue": "HTTPS", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To define a proxy protocol when instantiating the S3 client" },
-    "region": { "kind": "parameter", "displayName": "Region", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAS [...]
+    "region": { "kind": "parameter", "displayName": "Region", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east- [...]
     "useIAMCredentials": { "kind": "parameter", "displayName": "Use IAMCredentials", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be [...]
     "encryptionMaterials": { "kind": "parameter", "displayName": "Encryption Materials", "group": "common (advanced)", "label": "common,advanced", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.s3.model.Encryption", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The encryption materials to use in case of Symmetric\/Asymmetric cli [...]
     "useEncryption": { "kind": "parameter", "displayName": "Use Encryption", "group": "common (advanced)", "label": "common,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if encryption must be used or not" },
diff --git a/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc b/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
index e7f3102..6856fc8 100644
--- a/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
+++ b/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
@@ -58,7 +58,7 @@ The AWS2 S3 Storage Service component supports 37 options, which are listed belo
 | *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
 | *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
 | *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
-| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
 | *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
 | *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | Encryption
 | *useEncryption* (common) | Define if encryption must be used or not | false | boolean
@@ -132,7 +132,7 @@ with the following path and query parameters:
 | *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
 | *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
 | *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
-| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
 | *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
 | *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | Encryption
 | *useEncryption* (common) | Define if encryption must be used or not | false | boolean
@@ -525,4 +525,4 @@ Maven users will need to add the following dependency to their pom.xml.
 where `$\{camel-version\}` must be replaced by the actual version of Camel.
 
 
-include::camel-spring-boot::page$aws-s3-starter.adoc[]
\ No newline at end of file
+include::camel-spring-boot::page$aws-s3-starter.adoc[]
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 8c9516d..e7c8244 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
@@ -611,7 +611,7 @@ public interface ComponentsBuilderFactory {
     }
     /**
      * AWS2 S3 Storage Service (camel-aws2-s3)
-     * The aws-s3 component is used for storing and retrieving object from
+     * The aws2-s3 component is used for storing and retrieving object from
      * Amazon S3 Storage Service.
      * 
      * Category: cloud,file
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Aws2S3ComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Aws2S3ComponentBuilderFactory.java
index ecfac61..406f7fa 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Aws2S3ComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Aws2S3ComponentBuilderFactory.java
@@ -23,8 +23,8 @@ import org.apache.camel.builder.component.ComponentBuilder;
 import org.apache.camel.component.aws2.s3.AWS2S3Component;
 
 /**
- * The aws-s3 component is used for storing and retrieving object from Amazon S3
- * Storage Service.
+ * The aws2-s3 component is used for storing and retrieving object from Amazon
+ * S3 Storage Service.
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
@@ -33,7 +33,7 @@ public interface Aws2S3ComponentBuilderFactory {
 
     /**
      * AWS2 S3 Storage Service (camel-aws2-s3)
-     * The aws-s3 component is used for storing and retrieving object from
+     * The aws2-s3 component is used for storing and retrieving object from
      * Amazon S3 Storage Service.
      * 
      * Category: cloud,file
@@ -151,9 +151,9 @@ public interface Aws2S3ComponentBuilderFactory {
         }
         /**
          * The region in which S3 client needs to work. When using this
-         * parameter, the configuration will expect the capitalized name of the
-         * region (for example AP_EAST_1) You'll need to use the name
-         * Regions.EU_WEST_1.name().
+         * parameter, the configuration will expect the lowercase name of the
+         * region (for example ap-east-1) You'll need to use the name
+         * Region.EU_WEST_1.id().
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index bf3fc96..d55e077 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -627,7 +627,7 @@
     "extendsScheme": "",
     "syntax": "aws2-s3:\/\/bucketNameOrArn",
     "title": "AWS2 S3 Storage Service",
-    "description": "The aws-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.",
+    "description": "The aws2-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.",
     "label": "cloud,file",
     "deprecated": false,
     "deprecationNote": "cloud,file",
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
index e5aae95..ef4c426 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
@@ -29,8 +29,8 @@ import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.PollingConsumerPollStrategy;
 
 /**
- * The aws-s3 component is used for storing and retrieving object from Amazon S3
- * Storage Service.
+ * The aws2-s3 component is used for storing and retrieving object from Amazon
+ * S3 Storage Service.
  * 
  * Generated by camel build tools - do NOT edit this file!
  */
@@ -200,9 +200,9 @@ public interface AWS2S3EndpointBuilderFactory {
         }
         /**
          * The region in which S3 client needs to work. When using this
-         * parameter, the configuration will expect the capitalized name of the
-         * region (for example AP_EAST_1) You'll need to use the name
-         * Regions.EU_WEST_1.name().
+         * parameter, the configuration will expect the lowercase name of the
+         * region (for example ap-east-1) You'll need to use the name
+         * Region.EU_WEST_1.id().
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
@@ -1416,9 +1416,9 @@ public interface AWS2S3EndpointBuilderFactory {
         }
         /**
          * The region in which S3 client needs to work. When using this
-         * parameter, the configuration will expect the capitalized name of the
-         * region (for example AP_EAST_1) You'll need to use the name
-         * Regions.EU_WEST_1.name().
+         * parameter, the configuration will expect the lowercase name of the
+         * region (for example ap-east-1) You'll need to use the name
+         * Region.EU_WEST_1.id().
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
@@ -2113,9 +2113,9 @@ public interface AWS2S3EndpointBuilderFactory {
         }
         /**
          * The region in which S3 client needs to work. When using this
-         * parameter, the configuration will expect the capitalized name of the
-         * region (for example AP_EAST_1) You'll need to use the name
-         * Regions.EU_WEST_1.name().
+         * parameter, the configuration will expect the lowercase name of the
+         * region (for example ap-east-1) You'll need to use the name
+         * Region.EU_WEST_1.id().
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
@@ -2453,7 +2453,7 @@ public interface AWS2S3EndpointBuilderFactory {
     public interface AWS2S3Builders {
         /**
          * AWS2 S3 Storage Service (camel-aws2-s3)
-         * The aws-s3 component is used for storing and retrieving object from
+         * The aws2-s3 component is used for storing and retrieving object from
          * Amazon S3 Storage Service.
          * 
          * Category: cloud,file
@@ -2471,7 +2471,7 @@ public interface AWS2S3EndpointBuilderFactory {
     }
     /**
      * AWS2 S3 Storage Service (camel-aws2-s3)
-     * The aws-s3 component is used for storing and retrieving object from
+     * The aws2-s3 component is used for storing and retrieving object from
      * Amazon S3 Storage Service.
      * 
      * Category: cloud,file


[camel] 09/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, changed region description

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 a2686e0e94e2f2b6e2b00d883fffd0aaad4dc479
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 09:36:04 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, changed region description
---
 .../org/apache/camel/component/aws2/s3/AWS2S3Configuration.java   | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
index 9a4ff5f..915eeac 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
@@ -20,6 +20,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.util.ObjectHelper;
+
 import software.amazon.awssdk.core.Protocol;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.s3.model.Encryption;
@@ -207,9 +208,10 @@ public class AWS2S3Configuration implements Cloneable {
     }
 
     /**
-     * The region in which S3 client needs to work. When using this parameter,
-     * the configuration will expect the capitalized name of the region (for
-     * example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name()
+     * The region in which S3 client needs to work. When using this
+     * parameter, the configuration will expect the lowercase name of the
+     * region (for example ap-east-1) You'll need to use the name
+     * Region.EU_WEST_1.id()
      */
     public void setRegion(String region) {
         this.region = region;


[camel] 05/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, removed not used Spring xml test file

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 a28e830d4af48eda104f5322de9aab0ee4b70bed
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 08:33:43 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, removed not used Spring xml test file
---
 .../src/main/docs/aws2-s3-component.adoc           |  6 ++-
 .../aws2/s3/S3ComponentSpringTest-context.xml      | 63 ----------------------
 2 files changed, 4 insertions(+), 65 deletions(-)

diff --git a/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc b/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
index 1eff0a4..e7f3102 100644
--- a/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
+++ b/components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
@@ -1,6 +1,8 @@
+[[aws2-s3-component]]
 = AWS2 S3 Storage Service Component
 
-*Since Camel 2.8*
+*Since Camel 3.2*
+
 *Since Camel 3.2*
 
 
@@ -523,4 +525,4 @@ Maven users will need to add the following dependency to their pom.xml.
 where `$\{camel-version\}` must be replaced by the actual version of Camel.
 
 
-include::camel-spring-boot::page$aws-s3-starter.adoc[]
+include::camel-spring-boot::page$aws-s3-starter.adoc[]
\ No newline at end of file
diff --git a/components/camel-aws2-s3/src/test/resources/org/apache/camel/component/aws2/s3/S3ComponentSpringTest-context.xml b/components/camel-aws2-s3/src/test/resources/org/apache/camel/component/aws2/s3/S3ComponentSpringTest-context.xml
deleted file mode 100644
index 4bf7ba6..0000000
--- a/components/camel-aws2-s3/src/test/resources/org/apache/camel/component/aws2/s3/S3ComponentSpringTest-context.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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.
-
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="
-    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-    http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
-
-    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-        <route>
-            <from uri="direct:start"/>
-            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client"/>
-        </route>
-        <route>
-            <from uri="direct:copyObject"/>
-            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=copyObject"/>
-            <to uri="mock:result"/>
-        </route>
-        <route>
-            <from uri="direct:listBuckets"/>
-            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=listBuckets"/>
-            <to uri="mock:result"/>
-        </route>
-        <route>
-            <from uri="direct:deleteObject"/>
-            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=deleteObject"/>
-            <to uri="mock:result"/>
-        </route>   
-        <route>
-            <from uri="direct:downloadLink"/>
-            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=downloadLink"/>
-            <to uri="mock:result"/>
-        </route> 
-        <route>
-            <from uri="direct:listObjects"/>
-            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=listObjects"/>
-            <to uri="mock:result"/>
-        </route>    
-        <route>
-            <from uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;maxMessagesPerPoll=5"/>
-            <to uri="mock:result"/>
-        </route>
-    </camelContext>
-
-    <bean id="amazonS3Client" class="org.apache.camel.component.aws2.s3.AmazonS3ClientMock"/>
-</beans>
\ No newline at end of file


[camel] 13/14: 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 15237dc1b56cfc2d10534c89407512546149a2f8
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 10:53:34 2020 +0100

    Regen docs
---
 docs/components/modules/ROOT/pages/index.adoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/components/modules/ROOT/pages/index.adoc b/docs/components/modules/ROOT/pages/index.adoc
index a641037..dbf2e94 100644
--- a/docs/components/modules/ROOT/pages/index.adoc
+++ b/docs/components/modules/ROOT/pages/index.adoc
@@ -120,7 +120,7 @@ Number of Components: 332 in 265 JAR artifacts (1 deprecated)
 
 | xref:aws-translate-component.adoc[AWS Translate] (camel-aws-translate) | 3.0 | The aws-translate component is used for managing Amazon Translate
 
-| xref:aws2-s3-component.adoc[AWS2 S3 Storage Service] (camel-aws2-s3) | 3.2 | The aws-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.
+| xref:aws2-s3-component.adoc[AWS2 S3 Storage Service] (camel-aws2-s3) | 3.2 | The aws2-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.
 
 | xref:azure-blob-component.adoc[Azure Storage Blob Service] (camel-azure) | 2.19 | The azure-blob component is used for storing and retrieving blobs from Azure Storage Blob Service.
 


[camel] 01/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2

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 8b0a0486be7f0866e8e58fef0de047b2afaefcf7
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 08:22:56 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2
---
 components/camel-aws2-s3/pom.xml                   |   86 +
 .../aws2/s3/AWS2S3ComponentConfigurer.java         |   98 +
 .../aws2/s3/AWS2S3EndpointConfigurer.java          |  128 +
 .../services/org/apache/camel/component.properties |    7 +
 .../services/org/apache/camel/component/aws2-s3    |    2 +
 .../org/apache/camel/configurer/aws2-s3-component  |    2 +
 .../org/apache/camel/configurer/aws2-s3-endpoint   |    2 +
 .../apache/camel/component/aws2/s3/aws2-s3.json    |  120 +
 .../src/main/docs/aws-s3-component.adoc            |  541 +++++
 .../camel/component/aws2/s3/AWS2S3Component.java   |   84 +
 .../aws2/s3/AWS2S3ComponentVerifierExtension.java  |   85 +
 .../component/aws2/s3/AWS2S3Configuration.java     |  523 ++++
 .../camel/component/aws2/s3/AWS2S3Constants.java   |   50 +
 .../camel/component/aws2/s3/AWS2S3Consumer.java    |  254 ++
 .../camel/component/aws2/s3/AWS2S3Endpoint.java    |  273 +++
 .../camel/component/aws2/s3/AWS2S3Operations.java  |   22 +
 .../camel/component/aws2/s3/AWS2S3Producer.java    |  407 ++++
 .../aws2/s3/client/AWS2CamelS3InternalClient.java  |   33 +
 .../aws2/s3/client/AWS2S3ClientFactory.java        |   42 +
 .../client/impl/AWS2S3ClientIAMOptimizedImpl.java  |   92 +
 .../s3/client/impl/AWS2S3ClientStandardImpl.java   |   90 +
 .../component/aws2/s3/AWSS3ClientFactoryTest.java  |   52 +
 .../aws2/s3/S3ComponentVerifierExtensionTest.java  |   71 +
 .../s3/integration/S3ComponentIntegrationTest.java |  122 +
 .../S3ObjectRangeOperationIntegrationTest.java     |  110 +
 .../src/test/resources/log4j2.properties           |   28 +
 .../aws2/s3/S3ComponentSpringTest-context.xml      |   63 +
 core/camel-allcomponents/pom.xml                   |    4 +
 .../component/ComponentsBuilderFactory.java        |   12 +
 .../dsl/Aws2S3ComponentBuilderFactory.java         |  616 +++++
 .../src/generated/resources/metadata.json          |   20 +
 .../builder/endpoint/EndpointBuilderFactory.java   |    1 +
 .../camel/builder/endpoint/EndpointBuilders.java   |    1 +
 .../endpoint/dsl/AWS2S3EndpointBuilderFactory.java | 2494 ++++++++++++++++++++
 34 files changed, 6535 insertions(+)

diff --git a/components/camel-aws2-s3/pom.xml b/components/camel-aws2-s3/pom.xml
new file mode 100644
index 0000000..a06177a
--- /dev/null
+++ b/components/camel-aws2-s3/pom.xml
@@ -0,0 +1,86 @@
+<?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.2.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-aws2-s3</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Camel :: AWS2 S3</name>
+    <description>A Camel Amazon S3 Web Service Component Version 2</description>
+
+    <properties>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-support</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>s3</artifactId>
+            <version>${aws-java-sdk2-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>apache-client</artifactId>
+            <version>${aws-java-sdk2-version}</version>
+        </dependency>
+
+        <!-- for testing -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-spring</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</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-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/components/camel-aws2-s3/src/generated/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentConfigurer.java b/components/camel-aws2-s3/src/generated/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentConfigurer.java
new file mode 100644
index 0000000..70fbc53
--- /dev/null
+++ b/components/camel-aws2-s3/src/generated/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentConfigurer.java
@@ -0,0 +1,98 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.aws2.s3;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class AWS2S3ComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+
+    private org.apache.camel.component.aws2.s3.AWS2S3Configuration getOrCreateConfiguration(AWS2S3Component target) {
+        if (target.getConfiguration() == null) {
+            target.setConfiguration(new org.apache.camel.component.aws2.s3.AWS2S3Configuration());
+        }
+        return target.getConfiguration();
+    }
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        AWS2S3Component target = (AWS2S3Component) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "acceleratemodeenabled":
+        case "accelerateModeEnabled": getOrCreateConfiguration(target).setAccelerateModeEnabled(property(camelContext, boolean.class, value)); return true;
+        case "accesskey":
+        case "accessKey": getOrCreateConfiguration(target).setAccessKey(property(camelContext, java.lang.String.class, value)); return true;
+        case "amazons3client":
+        case "amazonS3Client": getOrCreateConfiguration(target).setAmazonS3Client(property(camelContext, software.amazon.awssdk.services.s3.S3Client.class, value)); return true;
+        case "autocreatebucket":
+        case "autoCreateBucket": getOrCreateConfiguration(target).setAutoCreateBucket(property(camelContext, boolean.class, value)); return true;
+        case "autoclosebody":
+        case "autocloseBody": getOrCreateConfiguration(target).setAutocloseBody(property(camelContext, boolean.class, value)); return true;
+        case "awskmskeyid":
+        case "awsKMSKeyId": getOrCreateConfiguration(target).setAwsKMSKeyId(property(camelContext, java.lang.String.class, value)); return true;
+        case "basicpropertybinding":
+        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
+        case "chunkedencodingdisabled":
+        case "chunkedEncodingDisabled": getOrCreateConfiguration(target).setChunkedEncodingDisabled(property(camelContext, boolean.class, value)); return true;
+        case "configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.aws2.s3.AWS2S3Configuration.class, value)); return true;
+        case "deleteafterread":
+        case "deleteAfterRead": getOrCreateConfiguration(target).setDeleteAfterRead(property(camelContext, boolean.class, value)); return true;
+        case "deleteafterwrite":
+        case "deleteAfterWrite": getOrCreateConfiguration(target).setDeleteAfterWrite(property(camelContext, boolean.class, value)); return true;
+        case "delimiter": getOrCreateConfiguration(target).setDelimiter(property(camelContext, java.lang.String.class, value)); return true;
+        case "dualstackenabled":
+        case "dualstackEnabled": getOrCreateConfiguration(target).setDualstackEnabled(property(camelContext, boolean.class, value)); return true;
+        case "encryptionmaterials":
+        case "encryptionMaterials": getOrCreateConfiguration(target).setEncryptionMaterials(property(camelContext, software.amazon.awssdk.services.s3.model.Encryption.class, value)); return true;
+        case "filename":
+        case "fileName": getOrCreateConfiguration(target).setFileName(property(camelContext, java.lang.String.class, value)); return true;
+        case "forceglobalbucketaccessenabled":
+        case "forceGlobalBucketAccessEnabled": getOrCreateConfiguration(target).setForceGlobalBucketAccessEnabled(property(camelContext, boolean.class, value)); return true;
+        case "includebody":
+        case "includeBody": getOrCreateConfiguration(target).setIncludeBody(property(camelContext, boolean.class, value)); return true;
+        case "keyname":
+        case "keyName": getOrCreateConfiguration(target).setKeyName(property(camelContext, java.lang.String.class, value)); return true;
+        case "lazystartproducer":
+        case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
+        case "multipartupload":
+        case "multiPartUpload": getOrCreateConfiguration(target).setMultiPartUpload(property(camelContext, boolean.class, value)); return true;
+        case "operation": getOrCreateConfiguration(target).setOperation(property(camelContext, org.apache.camel.component.aws2.s3.AWS2S3Operations.class, value)); return true;
+        case "partsize":
+        case "partSize": getOrCreateConfiguration(target).setPartSize(property(camelContext, long.class, value)); return true;
+        case "pathstyleaccess":
+        case "pathStyleAccess": getOrCreateConfiguration(target).setPathStyleAccess(property(camelContext, boolean.class, value)); return true;
+        case "payloadsigningenabled":
+        case "payloadSigningEnabled": getOrCreateConfiguration(target).setPayloadSigningEnabled(property(camelContext, boolean.class, value)); return true;
+        case "policy": getOrCreateConfiguration(target).setPolicy(property(camelContext, java.lang.String.class, value)); return true;
+        case "prefix": getOrCreateConfiguration(target).setPrefix(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxyhost":
+        case "proxyHost": getOrCreateConfiguration(target).setProxyHost(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxyport":
+        case "proxyPort": getOrCreateConfiguration(target).setProxyPort(property(camelContext, java.lang.Integer.class, value)); return true;
+        case "proxyprotocol":
+        case "proxyProtocol": getOrCreateConfiguration(target).setProxyProtocol(property(camelContext, software.amazon.awssdk.core.Protocol.class, value)); return true;
+        case "region": getOrCreateConfiguration(target).setRegion(property(camelContext, java.lang.String.class, value)); return true;
+        case "secretkey":
+        case "secretKey": getOrCreateConfiguration(target).setSecretKey(property(camelContext, java.lang.String.class, value)); return true;
+        case "serversideencryption":
+        case "serverSideEncryption": getOrCreateConfiguration(target).setServerSideEncryption(property(camelContext, java.lang.String.class, value)); return true;
+        case "storageclass":
+        case "storageClass": getOrCreateConfiguration(target).setStorageClass(property(camelContext, java.lang.String.class, value)); return true;
+        case "useawskms":
+        case "useAwsKMS": getOrCreateConfiguration(target).setUseAwsKMS(property(camelContext, boolean.class, value)); return true;
+        case "useencryption":
+        case "useEncryption": getOrCreateConfiguration(target).setUseEncryption(property(camelContext, boolean.class, value)); return true;
+        case "useiamcredentials":
+        case "useIAMCredentials": getOrCreateConfiguration(target).setUseIAMCredentials(property(camelContext, boolean.class, value)); return true;
+        default: return false;
+        }
+    }
+
+}
+
diff --git a/components/camel-aws2-s3/src/generated/java/org/apache/camel/component/aws2/s3/AWS2S3EndpointConfigurer.java b/components/camel-aws2-s3/src/generated/java/org/apache/camel/component/aws2/s3/AWS2S3EndpointConfigurer.java
new file mode 100644
index 0000000..21acfc6
--- /dev/null
+++ b/components/camel-aws2-s3/src/generated/java/org/apache/camel/component/aws2/s3/AWS2S3EndpointConfigurer.java
@@ -0,0 +1,128 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.aws2.s3;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class AWS2S3EndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        AWS2S3Endpoint target = (AWS2S3Endpoint) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "acceleratemodeenabled":
+        case "accelerateModeEnabled": target.getConfiguration().setAccelerateModeEnabled(property(camelContext, boolean.class, value)); return true;
+        case "accesskey":
+        case "accessKey": target.getConfiguration().setAccessKey(property(camelContext, java.lang.String.class, value)); return true;
+        case "amazons3client":
+        case "amazonS3Client": target.getConfiguration().setAmazonS3Client(property(camelContext, software.amazon.awssdk.services.s3.S3Client.class, value)); return true;
+        case "autocreatebucket":
+        case "autoCreateBucket": target.getConfiguration().setAutoCreateBucket(property(camelContext, boolean.class, value)); return true;
+        case "autoclosebody":
+        case "autocloseBody": target.getConfiguration().setAutocloseBody(property(camelContext, boolean.class, value)); return true;
+        case "awskmskeyid":
+        case "awsKMSKeyId": target.getConfiguration().setAwsKMSKeyId(property(camelContext, java.lang.String.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 "basicpropertybinding":
+        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
+        case "chunkedencodingdisabled":
+        case "chunkedEncodingDisabled": target.getConfiguration().setChunkedEncodingDisabled(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 "deleteafterwrite":
+        case "deleteAfterWrite": target.getConfiguration().setDeleteAfterWrite(property(camelContext, boolean.class, value)); return true;
+        case "delimiter": target.getConfiguration().setDelimiter(property(camelContext, java.lang.String.class, value)); return true;
+        case "dualstackenabled":
+        case "dualstackEnabled": target.getConfiguration().setDualstackEnabled(property(camelContext, boolean.class, value)); return true;
+        case "encryptionmaterials":
+        case "encryptionMaterials": target.getConfiguration().setEncryptionMaterials(property(camelContext, software.amazon.awssdk.services.s3.model.Encryption.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 "filename":
+        case "fileName": target.getConfiguration().setFileName(property(camelContext, java.lang.String.class, value)); return true;
+        case "forceglobalbucketaccessenabled":
+        case "forceGlobalBucketAccessEnabled": target.getConfiguration().setForceGlobalBucketAccessEnabled(property(camelContext, boolean.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 "initialdelay":
+        case "initialDelay": target.setInitialDelay(property(camelContext, long.class, value)); return true;
+        case "keyname":
+        case "keyName": target.getConfiguration().setKeyName(property(camelContext, java.lang.String.class, value)); return true;
+        case "lazystartproducer":
+        case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
+        case "maxconnections":
+        case "maxConnections": target.setMaxConnections(property(camelContext, int.class, value)); return true;
+        case "maxmessagesperpoll":
+        case "maxMessagesPerPoll": target.setMaxMessagesPerPoll(property(camelContext, int.class, value)); return true;
+        case "multipartupload":
+        case "multiPartUpload": target.getConfiguration().setMultiPartUpload(property(camelContext, boolean.class, value)); return true;
+        case "operation": target.getConfiguration().setOperation(property(camelContext, org.apache.camel.component.aws2.s3.AWS2S3Operations.class, value)); return true;
+        case "partsize":
+        case "partSize": target.getConfiguration().setPartSize(property(camelContext, long.class, value)); return true;
+        case "pathstyleaccess":
+        case "pathStyleAccess": target.getConfiguration().setPathStyleAccess(property(camelContext, boolean.class, value)); return true;
+        case "payloadsigningenabled":
+        case "payloadSigningEnabled": target.getConfiguration().setPayloadSigningEnabled(property(camelContext, boolean.class, value)); return true;
+        case "policy": target.getConfiguration().setPolicy(property(camelContext, java.lang.String.class, value)); return true;
+        case "pollstrategy":
+        case "pollStrategy": target.setPollStrategy(property(camelContext, org.apache.camel.spi.PollingConsumerPollStrategy.class, value)); return true;
+        case "prefix": target.getConfiguration().setPrefix(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxyhost":
+        case "proxyHost": target.getConfiguration().setProxyHost(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxyport":
+        case "proxyPort": target.getConfiguration().setProxyPort(property(camelContext, java.lang.Integer.class, value)); return true;
+        case "proxyprotocol":
+        case "proxyProtocol": target.getConfiguration().setProxyProtocol(property(camelContext, software.amazon.awssdk.core.Protocol.class, value)); return true;
+        case "region": target.getConfiguration().setRegion(property(camelContext, java.lang.String.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.String.class, value)); return true;
+        case "schedulerproperties":
+        case "schedulerProperties": target.setSchedulerProperties(property(camelContext, java.util.Map.class, value)); return true;
+        case "secretkey":
+        case "secretKey": target.getConfiguration().setSecretKey(property(camelContext, java.lang.String.class, value)); return true;
+        case "sendemptymessagewhenidle":
+        case "sendEmptyMessageWhenIdle": target.setSendEmptyMessageWhenIdle(property(camelContext, boolean.class, value)); return true;
+        case "serversideencryption":
+        case "serverSideEncryption": target.getConfiguration().setServerSideEncryption(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, java.lang.String.class, value)); return true;
+        case "synchronous": target.setSynchronous(property(camelContext, boolean.class, value)); return true;
+        case "timeunit":
+        case "timeUnit": target.setTimeUnit(property(camelContext, java.util.concurrent.TimeUnit.class, value)); return true;
+        case "useawskms":
+        case "useAwsKMS": target.getConfiguration().setUseAwsKMS(property(camelContext, boolean.class, value)); return true;
+        case "useencryption":
+        case "useEncryption": target.getConfiguration().setUseEncryption(property(camelContext, boolean.class, value)); return true;
+        case "usefixeddelay":
+        case "useFixedDelay": target.setUseFixedDelay(property(camelContext, boolean.class, value)); return true;
+        case "useiamcredentials":
+        case "useIAMCredentials": target.getConfiguration().setUseIAMCredentials(property(camelContext, boolean.class, value)); return true;
+        default: return false;
+        }
+    }
+
+}
+
diff --git a/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/component.properties b/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/component.properties
new file mode 100644
index 0000000..3766fb5
--- /dev/null
+++ b/components/camel-aws2-s3/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=aws2-s3
+groupId=org.apache.camel
+artifactId=camel-aws2-s3
+version=3.2.0-SNAPSHOT
+projectName=Camel :: AWS2 S3
+projectDescription=A Camel Amazon S3 Web Service Component Version 2
diff --git a/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/component/aws2-s3 b/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/component/aws2-s3
new file mode 100644
index 0000000..cf2cc13
--- /dev/null
+++ b/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/component/aws2-s3
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.aws2.s3.AWS2S3Component
diff --git a/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/configurer/aws2-s3-component b/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/configurer/aws2-s3-component
new file mode 100644
index 0000000..16da092
--- /dev/null
+++ b/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/configurer/aws2-s3-component
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.aws2.s3.AWS2S3ComponentConfigurer
diff --git a/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/configurer/aws2-s3-endpoint b/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/configurer/aws2-s3-endpoint
new file mode 100644
index 0000000..9056695
--- /dev/null
+++ b/components/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/configurer/aws2-s3-endpoint
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.aws2.s3.AWS2S3EndpointConfigurer
diff --git a/components/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json b/components/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
new file mode 100644
index 0000000..b3bcf95
--- /dev/null
+++ b/components/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
@@ -0,0 +1,120 @@
+{
+  "component": {
+    "kind": "component",
+    "scheme": "aws2-s3",
+    "extendsScheme": "",
+    "syntax": "aws2-s3:\/\/bucketNameOrArn",
+    "title": "AWS2 S3 Storage Service",
+    "description": "The aws-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.",
+    "label": "cloud,file",
+    "deprecated": false,
+    "async": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false,
+    "javaType": "org.apache.camel.component.aws2.s3.AWS2S3Component",
+    "firstVersion": "3.2.0",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws2-s3",
+    "version": "3.2.0-SNAPSHOT"
+  },
+  "componentProperties": {
+    "amazonS3Client": { "kind": "property", "displayName": "Amazon S3 Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.s3.S3Client", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Reference to a com.amazonaws.services.s3.AmazonS3 in the registry." },
+    "autoCreateBucket": { "kind": "property", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket" },
+    "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "deprecated": false, "secret": false, "description": "The component configuration" },
+    "pathStyleAccess": { "kind": "property", "displayName": "Path Style Access", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Whether or not the S3 client should use path style access" },
+    "policy": { "kind": "property", "displayName": "Policy", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method." },
+    "proxyHost": { "kind": "property", "displayName": "Proxy Host", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To define a proxy host when instantiating the SQS client" },
+    "proxyPort": { "kind": "property", "displayName": "Proxy Port", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Specify a proxy port to be used inside the client definition." },
+    "proxyProtocol": { "kind": "property", "displayName": "Proxy Protocol", "group": "common", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.core.Protocol", "enum": [ "HTTP", "HTTPS" ], "deprecated": false, "secret": false, "defaultValue": "HTTPS", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To define a proxy protocol when instantiating the S3 client" },
+    "region": { "kind": "property", "displayName": "Region", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST [...]
+    "useIAMCredentials": { "kind": "property", "displayName": "Use IAMCredentials", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be  [...]
+    "encryptionMaterials": { "kind": "property", "displayName": "Encryption Materials", "group": "common (advanced)", "label": "common,advanced", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.s3.model.Encryption", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The encryption materials to use in case of Symmetric\/Asymmetric clie [...]
+    "useEncryption": { "kind": "property", "displayName": "Use Encryption", "group": "common (advanced)", "label": "common,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if encryption must be used or not" },
+    "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": 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 message and handled by [...]
+    "deleteAfterRead": { "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committe [...]
+    "delimiter": { "kind": "property", "displayName": "Delimiter", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in." },
+    "fileName": { "kind": "property", "displayName": "File Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To get the object from the bucket with the given file name" },
+    "includeBody": { "kind": "property", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set  [...]
+    "prefix": { "kind": "property", "displayName": "Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in." },
+    "autocloseBody": { "kind": "property", "displayName": "Autoclose Body", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "If this option is true and includeBody is true, then the S3Object.close() method will be called  [...]
+    "deleteAfterWrite": { "kind": "property", "displayName": "Delete After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Delete file object after the S3 file has been uploaded" },
+    "keyName": { "kind": "property", "displayName": "Key Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Setting the key name for an element in the bucket through endpoint parameter" },
+    "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the r [...]
+    "multiPartUpload": { "kind": "property", "displayName": "Multi Part Upload", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "If it is true, camel will upload the file with multi part format, the part size is decided by the option of part [...]
+    "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.aws2.s3.AWS2S3Operations", "enum": [ "copyObject", "deleteBucket", "listBuckets", "downloadLink" ], "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The operation to do in case the u [...]
+    "partSize": { "kind": "property", "displayName": "Part Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "secret": false, "defaultValue": "26214400", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Setup the partSize which is used in multi part upload, the default size is 25M." },
+    "serverSideEncryption": { "kind": "property", "displayName": "Server Side Encryption", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256." },
+    "storageClass": { "kind": "property", "displayName": "Storage Class", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request." },
+    "awsKMSKeyId": { "kind": "property", "displayName": "Aws KMSKey Id", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define the id of KMS key to use in case KMS is enabled" },
+    "useAwsKMS": { "kind": "property", "displayName": "Use Aws KMS", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if KMS must be used or not" },
+    "accelerateModeEnabled": { "kind": "property", "displayName": "Accelerate Mode Enabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if Accelerate Mode enabled is true or false" },
+    "chunkedEncodingDisabled": { "kind": "property", "displayName": "Chunked Encoding Disabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if disabled Chunked Encoding is true or false" },
+    "dualstackEnabled": { "kind": "property", "displayName": "Dualstack Enabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if Dualstack enabled is true or false" },
+    "forceGlobalBucketAccessEnabled": { "kind": "property", "displayName": "Force Global Bucket Access Enabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if Force Global Bucket Access enabled is true or false" },
+    "payloadSigningEnabled": { "kind": "property", "displayName": "Payload Signing Enabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if Payload Signing enabled is true or false" },
+    "basicPropertyBinding": { "kind": "property", "displayName": "Basic Property Binding", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities" },
+    "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
+    "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
+  },
+  "properties": {
+    "bucketNameOrArn": { "kind": "path", "displayName": "Bucket Name Or Arn", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "secret": false, "description": "Bucket name or ARN" },
+    "amazonS3Client": { "kind": "parameter", "displayName": "Amazon S3 Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.s3.S3Client", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Reference to a com.amazonaws.services.s3.AmazonS3 in the registry." },
+    "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create Bucket", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Setting the autocreation of the bucket" },
+    "pathStyleAccess": { "kind": "parameter", "displayName": "Path Style Access", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Whether or not the S3 client should use path style access" },
+    "policy": { "kind": "parameter", "displayName": "Policy", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method." },
+    "proxyHost": { "kind": "parameter", "displayName": "Proxy Host", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To define a proxy host when instantiating the SQS client" },
+    "proxyPort": { "kind": "parameter", "displayName": "Proxy Port", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Specify a proxy port to be used inside the client definition." },
+    "proxyProtocol": { "kind": "parameter", "displayName": "Proxy Protocol", "group": "common", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.core.Protocol", "enum": [ "HTTP", "HTTPS" ], "deprecated": false, "secret": false, "defaultValue": "HTTPS", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To define a proxy protocol when instantiating the S3 client" },
+    "region": { "kind": "parameter", "displayName": "Region", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAS [...]
+    "useIAMCredentials": { "kind": "parameter", "displayName": "Use IAMCredentials", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be [...]
+    "encryptionMaterials": { "kind": "parameter", "displayName": "Encryption Materials", "group": "common (advanced)", "label": "common,advanced", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.s3.model.Encryption", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The encryption materials to use in case of Symmetric\/Asymmetric cli [...]
+    "useEncryption": { "kind": "parameter", "displayName": "Use Encryption", "group": "common (advanced)", "label": "common,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if encryption must be used or not" },
+    "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": 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 message and handled b [...]
+    "deleteAfterRead": { "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committ [...]
+    "delimiter": { "kind": "parameter", "displayName": "Delimiter", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in." },
+    "fileName": { "kind": "parameter", "displayName": "File Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "To get the object from the bucket with the given file name" },
+    "includeBody": { "kind": "parameter", "displayName": "Include Body", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set [...]
+    "maxConnections": { "kind": "parameter", "displayName": "Max Connections", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "secret": false, "defaultValue": "60", "description": "Set the maxConnections parameter in the S3 client configuration" },
+    "maxMessagesPerPoll": { "kind": "parameter", "displayName": "Max Messages Per Poll", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "secret": false, "defaultValue": "10", "description": "Gets the maximum number of messages as a limit to poll at each polling. Gets the maximum number of messages as a limit to poll at each polling. The default value is 10. Use 0 or a negative number to set it as unlimited." },
+    "prefix": { "kind": "parameter", "displayName": "Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in." },
+    "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": 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." },
+    "autocloseBody": { "kind": "parameter", "displayName": "Autoclose Body", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "If this option is true and includeBody is true, then the S3Object.close() method will be called [...]
+    "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, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with [...]
+    "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, "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, "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 before an Exchange h [...]
+    "deleteAfterWrite": { "kind": "parameter", "displayName": "Delete After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Delete file object after the S3 file has been uploaded" },
+    "keyName": { "kind": "parameter", "displayName": "Key Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Setting the key name for an element in the bucket through endpoint parameter" },
+    "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the  [...]
+    "multiPartUpload": { "kind": "parameter", "displayName": "Multi Part Upload", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "If it is true, camel will upload the file with multi part format, the part size is decided by the option of par [...]
+    "operation": { "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.aws2.s3.AWS2S3Operations", "enum": [ "copyObject", "deleteBucket", "listBuckets", "downloadLink" ], "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The operation to do in case the  [...]
+    "partSize": { "kind": "parameter", "displayName": "Part Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "secret": false, "defaultValue": "26214400", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Setup the partSize which is used in multi part upload, the default size is 25M." },
+    "serverSideEncryption": { "kind": "parameter", "displayName": "Server Side Encryption", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256." },
+    "storageClass": { "kind": "parameter", "displayName": "Storage Class", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request." },
+    "awsKMSKeyId": { "kind": "parameter", "displayName": "Aws KMSKey Id", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define the id of KMS key to use in case KMS is enabled" },
+    "useAwsKMS": { "kind": "parameter", "displayName": "Use Aws KMS", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if KMS must be used or not" },
+    "accelerateModeEnabled": { "kind": "parameter", "displayName": "Accelerate Mode Enabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if Accelerate Mode enabled is true or false" },
+    "chunkedEncodingDisabled": { "kind": "parameter", "displayName": "Chunked Encoding Disabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if disabled Chunked Encoding is true or false" },
+    "dualstackEnabled": { "kind": "parameter", "displayName": "Dualstack Enabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if Dualstack enabled is true or false" },
+    "forceGlobalBucketAccessEnabled": { "kind": "parameter", "displayName": "Force Global Bucket Access Enabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if Force Global Bucket Access enabled is true or false" },
+    "payloadSigningEnabled": { "kind": "parameter", "displayName": "Payload Signing Enabled", "group": " advanced", "label": "common, advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Define if Payload Signing enabled is true or false" },
+    "basicPropertyBinding": { "kind": "parameter", "displayName": "Basic Property Binding", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities" },
+    "synchronous": { "kind": "parameter", "displayName": "Synchronous", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "description": "Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported)." },
+    "backoffErrorThreshold": { "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": 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, "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, "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 again. When this option  [...]
+    "delay": { "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "secret": false, "defaultValue": "500", "description": "Milliseconds before the next poll. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour)." },
+    "greedy": { "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": 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, "secret": false, "defaultValue": "1000", "description": "Milliseconds before the first poll starts. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour)." },
+    "repeatCount": { "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": 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, "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 for that." },
+    "scheduledExecutorService": { "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": 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": "string", "javaType": "java.lang.String", "enum": [ "none", "spring", "quartz" ], "deprecated": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component" },
+    "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, "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, "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, "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, "secret": false, "defaultValue": "true", "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." },
+    "accessKey": { "kind": "parameter", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
+    "secretKey": { "kind": "parameter", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
+  }
+}
diff --git a/components/camel-aws2-s3/src/main/docs/aws-s3-component.adoc b/components/camel-aws2-s3/src/main/docs/aws-s3-component.adoc
new file mode 100644
index 0000000..6ce409d
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/docs/aws-s3-component.adoc
@@ -0,0 +1,541 @@
+[[aws-s3-component]]
+= AWS S3 Storage Service Component
+
+*Since Camel 2.8*
+
+// HEADER START
+*Both producer and consumer is supported*
+// HEADER END
+
+The S3 component supports storing and retrieving objects from/to
+https://aws.amazon.com/s3[Amazon's S3] service.
+
+Prerequisites
+
+You must have a valid Amazon Web Services developer account, and be
+signed up to use Amazon S3. More information is available at
+https://aws.amazon.com/s3[Amazon S3].
+
+== URI Format
+
+[source,java]
+------------------------------
+aws-s3://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("aws-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt")
+  .to("file:/var/downloaded");
+--------------------------------------------------------------------------------
+
+
+== URI Options
+
+
+// component options: START
+The AWS S3 Storage Service component supports 37 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *amazonS3Client* (common) | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. |  | AmazonS3
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket | true | boolean
+| *configuration* (common) | The component configuration |  | S3Configuration
+| *pathStyleAccess* (common) | Whether or not the S3 client should use path style access | false | boolean
+| *policy* (common) | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
+| *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
+| *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
+| *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
+| *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | EncryptionMaterials
+| *useEncryption* (common) | Define if encryption must be used or not | false | boolean
+| *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 S3Constants#BUCKET_NAME and S3Constants#KEY headers, or only the S3Constants#KEY [...]
+| *delimiter* (consumer) | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *fileName* (consumer) | To get the object from the bucket with the given file name |  | String
+| *includeBody* (consumer) | If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *prefix* (consumer) | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *autocloseBody* (consumer) | If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *deleteAfterWrite* (producer) | Delete file object after the S3 file has been uploaded | false | boolean
+| *keyName* (producer) | Setting the key name for an element in the bucket through endpoint parameter |  | String
+| *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 [...]
+| *multiPartUpload* (producer) | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | boolean
+| *operation* (producer) | The operation to do in case the user don't want to do only an upload. The value can be one of: copyObject, deleteBucket, listBuckets, downloadLink |  | S3Operations
+| *partSize* (producer) | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | long
+| *serverSideEncryption* (producer) | Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256. |  | String
+| *storageClass* (producer) | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
+| *awsKMSKeyId* (producer) | Define the id of KMS key to use in case KMS is enabled |  | String
+| *useAwsKMS* (producer) | Define if KMS must be used or not | false | boolean
+| *accelerateModeEnabled* ( advanced) | Define if Accelerate Mode enabled is true or false | false | boolean
+| *chunkedEncodingDisabled* ( advanced) | Define if disabled Chunked Encoding is true or false | false | boolean
+| *dualstackEnabled* ( advanced) | Define if Dualstack enabled is true or false | false | boolean
+| *forceGlobalBucketAccessEnabled* ( advanced) | Define if Force Global Bucket Access enabled is true or false | false | boolean
+| *payloadSigningEnabled* ( advanced) | Define if Payload Signing enabled is true or false | false | boolean
+| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *accessKey* (security) | Amazon AWS Access Key |  | String
+| *secretKey* (security) | Amazon AWS Secret Key |  | String
+|===
+// component options: END
+
+
+
+
+
+
+
+
+
+
+
+// endpoint options: START
+The AWS S3 Storage Service endpoint is configured using URI syntax:
+
+----
+aws-s3://bucketNameOrArn
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *bucketNameOrArn* | *Required* Bucket name or ARN |  | String
+|===
+
+
+=== Query Parameters (57 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *amazonS3Client* (common) | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. |  | AmazonS3
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket | true | boolean
+| *pathStyleAccess* (common) | Whether or not the S3 client should use path style access | false | boolean
+| *policy* (common) | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
+| *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
+| *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
+| *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
+| *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | EncryptionMaterials
+| *useEncryption* (common) | Define if encryption must be used or not | false | boolean
+| *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 S3Constants#BUCKET_NAME and S3Constants#KEY headers, or only the S3Constants#KEY [...]
+| *delimiter* (consumer) | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *fileName* (consumer) | To get the object from the bucket with the given file name |  | String
+| *includeBody* (consumer) | If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *maxConnections* (consumer) | Set the maxConnections parameter in the S3 client configuration | 60 | int
+| *maxMessagesPerPoll* (consumer) | Gets the maximum number of messages as a limit to poll at each polling. Gets the maximum number of messages as a limit to poll at each polling. The default value is 10. Use 0 or a negative number to set it as unlimited. | 10 | int
+| *prefix* (consumer) | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *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
+| *autocloseBody* (consumer) | If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | 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. 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
+| *deleteAfterWrite* (producer) | Delete file object after the S3 file has been uploaded | false | boolean
+| *keyName* (producer) | Setting the key name for an element in the bucket through endpoint parameter |  | String
+| *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 [...]
+| *multiPartUpload* (producer) | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | boolean
+| *operation* (producer) | The operation to do in case the user don't want to do only an upload. The value can be one of: copyObject, deleteBucket, listBuckets, downloadLink |  | S3Operations
+| *partSize* (producer) | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | long
+| *serverSideEncryption* (producer) | Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256. |  | String
+| *storageClass* (producer) | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
+| *awsKMSKeyId* (producer) | Define the id of KMS key to use in case KMS is enabled |  | String
+| *useAwsKMS* (producer) | Define if KMS must be used or not | false | boolean
+| *accelerateModeEnabled* ( advanced) | Define if Accelerate Mode enabled is true or false | false | boolean
+| *chunkedEncodingDisabled* ( advanced) | Define if disabled Chunked Encoding is true or false | false | boolean
+| *dualstackEnabled* ( advanced) | Define if Dualstack enabled is true or false | false | boolean
+| *forceGlobalBucketAccessEnabled* ( advanced) | Define if Force Global Bucket Access enabled is true or false | false | boolean
+| *payloadSigningEnabled* ( advanced) | Define if Payload Signing enabled is true or false | false | boolean
+| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+| *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. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 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. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 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. 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. The value can be one of: none, spring, quartz | none | String
+| *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. 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
+| *accessKey* (security) | Amazon AWS Access Key |  | String
+| *secretKey* (security) | Amazon AWS Secret Key |  | String
+|===
+// endpoint options: END
+
+
+
+
+
+
+
+
+
+
+Required S3 component options
+
+You have to provide the amazonS3Client in the
+Registry or your accessKey and secretKey to access
+the https://aws.amazon.com/s3[Amazon's S3].
+
+== Batch Consumer
+
+This component implements the Batch Consumer.
+
+This allows you for instance to know how many messages exists in this
+batch and for instance let the Aggregator
+aggregate this number of messages.
+
+== Usage
+
+=== Message headers evaluated by the S3 producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelAwsS3BucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+
+|`CamelAwsS3BucketDestinationName` |`String` |The bucket Destination Name which will be used for the current operation
+
+|`CamelAwsS3ContentLength` |`Long` |The content length of this object.
+
+|`CamelAwsS3ContentType` |`String` |The content type of this object.
+
+|`CamelAwsS3ContentControl` |`String` |The content control of this object.
+
+|`CamelAwsS3ContentDisposition` |`String` |The content disposition of this object.
+
+|`CamelAwsS3ContentEncoding` |`String` |The content encoding of this object.
+
+|`CamelAwsS3ContentMD5` |`String` |The md5 checksum of this object.
+
+|`CamelAwsS3DestinationKey` |`String` |The Destination key which will be used for the current operation
+
+|`CamelAwsS3Key` |`String` |The key under which this object will be stored or which will be used for the current operation
+
+|`CamelAwsS3LastModified` |`java.util.Date` |The last modified timestamp of this object.
+
+|`CamelAwsS3Operation` |`String` |The operation to perform. Permitted values are copyObject, deleteObject, listBuckets, deleteBucket, downloadLink, listObjects
+
+|`CamelAwsS3StorageClass` |`String` |The storage class of this object.
+
+|`CamelAwsS3CannedAcl` |`String` |The canned acl that will be applied to the object. see
+`com.amazonaws.services.s3.model.CannedAccessControlList` for allowed
+values.
+
+|`CamelAwsS3Acl` |`com.amazonaws.services.s3.model.AccessControlList` |A well constructed Amazon S3 Access Control List object.
+see `com.amazonaws.services.s3.model.AccessControlList` for more details
+
+|`CamelAwsS3Headers` |`Map<String,String>` |Support to get or set custom objectMetadata headers.
+
+|`CamelAwsS3ServerSideEncryption` |String |Sets the server-side encryption algorithm when encrypting
+the object using AWS-managed keys. For example use AES256.
+
+|`CamelAwsS3VersionId` |`String` |The version Id of the object to be stored or returned from the current operation
+|=======================================================================
+
+=== Message headers set by the S3 producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+|`CamelAwsS3ETag` |`String` |The ETag value for the newly uploaded object.
+
+|`CamelAwsS3VersionId` |`String` |The *optional* version ID of the newly uploaded object.
+
+|`CamelAwsS3DownloadLinkExpiration` | `String` | The expiration (millis) of URL download link. The link will be stored into *CamelAwsS3DownloadLink* response header.
+
+|=======================================================================
+
+=== Message headers set by the S3 consumer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelAwsS3Key` |`String` |The key under which this object is stored.
+
+|`CamelAwsS3BucketName` |`String` |The name of the bucket in which this object is contained.
+
+|`CamelAwsS3ETag` |`String` |The hex encoded 128-bit MD5 digest of the associated object according to
+RFC 1864. This data is used as an integrity check to verify that the
+data received by the caller is the same data that was sent by Amazon S3.
+
+|`CamelAwsS3LastModified` |`Date` |The value of the Last-Modified header, indicating the date and time at
+which Amazon S3 last recorded a modification to the associated object.
+
+|`CamelAwsS3VersionId` |`String` |The version ID of the associated Amazon S3 object if available. Version
+IDs are only assigned to objects when an object is uploaded to an Amazon
+S3 bucket that has object versioning enabled.
+
+|`CamelAwsS3ContentType` |`String` |The Content-Type HTTP header, which indicates the type of content stored
+in the associated object. The value of this header is a standard MIME
+type.
+
+|`CamelAwsS3ContentMD5` |`String` |The base64 encoded 128-bit MD5 digest of the associated object (content
+- not including headers) according to RFC 1864. This data is used as a
+message integrity check to verify that the data received by Amazon S3 is
+the same data that the caller sent.
+
+|`CamelAwsS3ContentLength` |`Long` |The Content-Length HTTP header indicating the size of the associated
+object in bytes.
+
+|`CamelAwsS3ContentEncoding` |`String` |The *optional* Content-Encoding HTTP header specifying what content
+encodings have been applied to the object and what decoding mechanisms
+must be applied in order to obtain the media-type referenced by the
+Content-Type field.
+
+|`CamelAwsS3ContentDisposition` |`String` |The *optional* Content-Disposition HTTP header, which specifies
+presentational information such as the recommended filename for the
+object to be saved as.
+
+|`CamelAwsS3ContentControl` |`String` |The *optional* Cache-Control HTTP header which allows the user to
+specify caching behavior along the HTTP request/reply chain.
+
+|`CamelAwsS3ServerSideEncryption` |String |The server-side encryption algorithm when encrypting the
+object using AWS-managed keys.
+|=======================================================================
+
+=== S3 Producer operations
+
+Camel-AWS s3 component provides the following operation on the producer side:
+
+- copyObject
+- deleteObject
+- listBuckets
+- deleteBucket
+- downloadLink
+- listObjects
+- getObject (this will return an S3Object instance)
+- getObjectRange (this will return an S3Object instance)
+
+=== Advanced AmazonS3 configuration
+
+If your Camel Application is running behind a firewall or if you need to
+have more control over the `AmazonS3` instance configuration, you can
+create your own instance:
+
+[source,java]
+--------------------------------------------------------------------------------------
+AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
+
+ClientConfiguration clientConfiguration = new ClientConfiguration();
+clientConfiguration.setProxyHost("http://myProxyHost");
+clientConfiguration.setProxyPort(8080);
+
+AmazonS3 client = new AmazonS3Client(awsCredentials, clientConfiguration);
+
+registry.bind("client", client);
+--------------------------------------------------------------------------------------
+
+and refer to it in your Camel aws-s3 component configuration:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("aws-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+=== Use KMS with the S3 component
+
+To use AWS KMS to encrypt/decrypt data by using AWS infrastructure you can use the options introduced in 2.21.x like in the following example
+
+[source,java]
+--------------------------------------------------------------------------------
+from("file:tmp/test?fileName=test.txt")
+     .setHeader(S3Constants.KEY, constant("testFile"))
+     .to("aws-s3://mybucket?amazonS3Client=#client&useAwsKMS=true&awsKMSKeyId=3f0637ad-296a-3dfe-a796-e60654fb128c");
+--------------------------------------------------------------------------------
+
+In this way you'll ask to S3, to use the KMS key 3f0637ad-296a-3dfe-a796-e60654fb128c, to encrypt the file test.txt. When you'll ask to download this file, the decryption will be done directly before the download.
+
+=== Use "useIAMCredentials" with the s3 component
+
+To use AWS IAM credentials, you must first verify that the EC2 in which you are launching the Camel application on has an IAM role associated with it containing the appropriate policies attached to run effectively.
+Keep in mind that this feature should only be set to "true" on remote instances. To clarify even further, you must still use static credentials locally since IAM is an AWS specific component,
+but AWS environments should now be easier to manage. After this is implemented and understood, you can set the query parameter "useIAMCredentials" to "true" for AWS environments! To effectively toggle this
+on and off based on local and remote environments, you can consider enabling this query parameter with system environment variables. For example, your code could set the "useIAMCredentials" query parameter to "true",
+when the system environment variable called "isRemote" is set to true (there are many other ways to do this and this should act as a simple example). Although it doesn't take away the need for static credentials completely,
+using IAM credentials on AWS environments takes away the need to refresh on remote environments and adds a major security boost (IAM credentials are refreshed automatically every 6 hours and update when their
+policies are updated). This is the AWS recommended way to manage credentials and therefore should be used as often as possible.
+
+=== S3 Producer Operation examples
+
+- 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("aws-s3://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("aws-s3://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("aws-s3://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("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the bucket mycamelbucket
+
+- DownloadLink: this operation create a download link for the file specified in the key header
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+                    
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); 
+      }
+  })
+  .to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=downloadLink")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will create a downloadLink for the file camelKey in the bucket mycamelbucket
+
+- ListObjects: this operation list object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("aws-s3://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("aws-s3://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("aws-s3://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.
+
+== 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.
+
+== Automatic detection of AmazonS3 client in registry
+
+The component is capable of detecting the presence of an AmazonS3 bean into the registry.
+If it's the only instance of that type it will be used as client and you won't have to define it as uri parameter, like the example above.
+This may be really useful for smarter configuration of the endpoint.
+
+== 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.
+
+== Dependencies
+
+Maven users will need to add the following dependency to their pom.xml.
+
+*pom.xml*
+
+[source,xml]
+---------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-aws-s3</artifactId>
+    <version>${camel-version}</version>
+</dependency>
+---------------------------------------
+
+where `$\{camel-version\}` must be replaced by the actual version of Camel.
+
+
+include::camel-spring-boot::page$aws-s3-starter.adoc[]
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Component.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Component.java
new file mode 100644
index 0000000..97b7bc0
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Component.java
@@ -0,0 +1,84 @@
+/*
+ * 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.aws2.s3;
+
+import java.util.Map;
+import java.util.Set;
+
+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 software.amazon.awssdk.services.s3.S3Client;
+
+@Component("aws2-s3")
+public class AWS2S3Component extends DefaultComponent {
+
+    @Metadata
+    private AWS2S3Configuration configuration = new AWS2S3Configuration();
+
+    public AWS2S3Component() {
+        this(null);
+    }
+
+    public AWS2S3Component(CamelContext context) {
+        super(context);
+
+        registerExtension(new AWS2S3ComponentVerifierExtension());
+    }
+
+    @Override
+    protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+
+        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 AWS2S3Configuration configuration = this.configuration != null ? this.configuration.copy() : new AWS2S3Configuration();
+        configuration.setBucketName(remaining);
+        AWS2S3Endpoint endpoint = new AWS2S3Endpoint(uri, this, configuration);
+        setProperties(endpoint, parameters);
+        checkAndSetRegistryClient(configuration);
+        if (!configuration.isUseIAMCredentials() && configuration.getAmazonS3Client() == null && (configuration.getAccessKey() == null || configuration.getSecretKey() == null)) {
+            throw new IllegalArgumentException("useIAMCredentials is set to false, AmazonS3Client or accessKey and secretKey must be specified");
+        }
+
+        return endpoint;
+    }
+
+    public AWS2S3Configuration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * The component configuration
+     */
+    public void setConfiguration(AWS2S3Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+    private void checkAndSetRegistryClient(AWS2S3Configuration configuration) {
+        Set<S3Client> clients = getCamelContext().getRegistry().findByType(S3Client.class);
+        if (clients.size() == 1) {
+            configuration.setAmazonS3Client(clients.stream().findFirst().get());
+        }
+    }
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentVerifierExtension.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentVerifierExtension.java
new file mode 100644
index 0000000..5278b05
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentVerifierExtension.java
@@ -0,0 +1,85 @@
+/*
+ * 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.aws2.s3;
+
+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 software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.core.exception.SdkClientException;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.S3ClientBuilder;
+
+public class AWS2S3ComponentVerifierExtension extends DefaultComponentVerifierExtension {
+
+    public AWS2S3ComponentVerifierExtension() {
+        this("aws2-s3");
+    }
+
+    public AWS2S3ComponentVerifierExtension(String scheme) {
+        super(scheme);
+    }
+
+    // *********************************
+    // Parameters validation
+    // *********************************
+
+    @Override
+    protected Result verifyParameters(Map<String, Object> parameters) {
+
+        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS).error(ResultErrorHelper.requiresOption("accessKey", parameters))
+            .error(ResultErrorHelper.requiresOption("secretKey", parameters)).error(ResultErrorHelper.requiresOption("region", parameters));
+
+        // Validate using the catalog
+
+        super.verifyParametersAgainstCatalog(builder, parameters);
+
+        return builder.build();
+    }
+
+    // *********************************
+    // Connectivity validation
+    // *********************************
+
+    @Override
+    protected Result verifyConnectivity(Map<String, Object> parameters) {
+        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY);
+
+        try {
+            AWS2S3Configuration configuration = setProperties(new AWS2S3Configuration(), parameters);
+            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-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
new file mode 100644
index 0000000..370f042
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
@@ -0,0 +1,523 @@
+/*
+ * 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.aws2.s3;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriParams;
+import org.apache.camel.util.ObjectHelper;
+
+import software.amazon.awssdk.core.Protocol;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.Encryption;
+
+@UriParams
+public class AWS2S3Configuration implements Cloneable {
+
+    private String bucketName;
+    @UriParam
+    private S3Client amazonS3Client;
+    @UriParam(label = "security", secret = true)
+    private String accessKey;
+    @UriParam(label = "security", secret = true)
+    private String secretKey;
+    @UriParam(label = "consumer")
+    private String fileName;
+    @UriParam(label = "consumer")
+    private String prefix;
+    @UriParam(label = "consumer")
+    private String delimiter;
+    @UriParam
+    private String region;
+    @UriParam(label = "consumer", defaultValue = "true")
+    private boolean deleteAfterRead = true;
+    @UriParam(label = "producer")
+    private boolean deleteAfterWrite;
+    @UriParam(label = "producer")
+    private boolean multiPartUpload;
+    @UriParam(label = "producer", defaultValue = "" + 25 * 1024 * 1024)
+    private long partSize = 25 * 1024 * 1024;
+    @UriParam
+    private String policy;
+    @UriParam(label = "producer")
+    private String storageClass;
+    @UriParam(label = "producer")
+    private String serverSideEncryption;
+
+    @UriParam(enums = "HTTP,HTTPS", defaultValue = "HTTPS")
+    private Protocol proxyProtocol = Protocol.HTTPS;
+    @UriParam
+    private String proxyHost;
+    @UriParam
+    private Integer proxyPort;
+    @UriParam(label = "consumer", defaultValue = "true")
+    private boolean includeBody = true;
+    @UriParam
+    private boolean pathStyleAccess;
+    @UriParam(label = "producer", enums = "copyObject,deleteBucket,listBuckets,downloadLink")
+    private AWS2S3Operations operation;
+    @UriParam(label = "consumer,advanced", defaultValue = "true")
+    private boolean autocloseBody = true;
+    @UriParam(label = "common,advanced")
+    private Encryption encryptionMaterials;
+    @UriParam(label = "common,advanced", defaultValue = "false")
+    private boolean useEncryption;
+    @UriParam(label = "common, advanced", defaultValue = "false")
+    private boolean chunkedEncodingDisabled;
+    @UriParam(label = "common, advanced", defaultValue = "false")
+    private boolean accelerateModeEnabled;
+    @UriParam(label = "common, advanced", defaultValue = "false")
+    private boolean dualstackEnabled;
+    @UriParam(label = "common, advanced", defaultValue = "false")
+    private boolean payloadSigningEnabled;
+    @UriParam(label = "common, advanced", defaultValue = "false")
+    private boolean forceGlobalBucketAccessEnabled;
+    @UriParam(label = "common", defaultValue = "true")
+    private boolean autoCreateBucket = true;
+    @UriParam(label = "producer,advanced", defaultValue = "false")
+    private boolean useAwsKMS;
+    @UriParam(label = "producer,advanced")
+    private String awsKMSKeyId;
+    @UriParam(defaultValue = "false")
+    private boolean useIAMCredentials;
+    @UriParam(label = "producer")
+    private String keyName;
+
+    public long getPartSize() {
+        return partSize;
+    }
+
+    /**
+     * Setup the partSize which is used in multi part upload, the default size
+     * is 25M.
+     */
+    public void setPartSize(long partSize) {
+        this.partSize = partSize;
+    }
+
+    public boolean isMultiPartUpload() {
+        return multiPartUpload;
+    }
+
+    /**
+     * If it is true, camel will upload the file with multi part format, the
+     * part size is decided by the option of `partSize`
+     */
+    public void setMultiPartUpload(boolean multiPartUpload) {
+        this.multiPartUpload = multiPartUpload;
+    }
+
+    public String getAccessKey() {
+        return accessKey;
+    }
+
+    /**
+     * Amazon AWS Access Key
+     */
+    public void setAccessKey(String accessKey) {
+        this.accessKey = accessKey;
+    }
+
+    public String getSecretKey() {
+        return secretKey;
+    }
+
+    /**
+     * Amazon AWS Secret Key
+     */
+    public void setSecretKey(String secretKey) {
+        this.secretKey = secretKey;
+    }
+
+    public S3Client getAmazonS3Client() {
+        return amazonS3Client;
+    }
+
+    /**
+     * Reference to a `com.amazonaws.services.s3.AmazonS3` in the registry.
+     */
+    public void setAmazonS3Client(S3Client amazonS3Client) {
+        this.amazonS3Client = amazonS3Client;
+    }
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    /**
+     * The prefix which is used in the
+     * com.amazonaws.services.s3.model.ListObjectsRequest to only consume
+     * objects we are interested in.
+     */
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    public String getDelimiter() {
+        return delimiter;
+    }
+
+    /**
+     * The delimiter which is used in the
+     * com.amazonaws.services.s3.model.ListObjectsRequest to only consume
+     * objects we are interested in.
+     */
+    public void setDelimiter(String delimiter) {
+        this.delimiter = delimiter;
+    }
+
+    public String getBucketName() {
+        return bucketName;
+    }
+
+    /**
+     * Name of the bucket. The bucket will be created if it doesn't already
+     * exists.
+     */
+    public void setBucketName(String bucketName) {
+        this.bucketName = bucketName;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    /**
+     * To get the object from the bucket with the given file name
+     */
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public String getRegion() {
+        return region;
+    }
+
+    /**
+     * The region in which S3 client needs to work. When using this parameter,
+     * the configuration will expect the capitalized name of the region (for
+     * example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name()
+     */
+    public void setRegion(String region) {
+        this.region = region;
+    }
+
+    /**
+     * If it is true, the exchange body will be set to a stream to the contents
+     * of the file. If false, the headers will be set with the S3 object
+     * metadata, but the body will be null. This option is strongly related to
+     * autocloseBody option. In case of setting includeBody to true and
+     * autocloseBody to false, it will be up to the caller to close the S3Object
+     * stream. Setting autocloseBody to true, will close the S3Object stream
+     * automatically.
+     */
+    public void setIncludeBody(boolean includeBody) {
+        this.includeBody = includeBody;
+    }
+
+    public boolean isIncludeBody() {
+        return includeBody;
+    }
+
+    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;
+    }
+
+    public boolean isDeleteAfterWrite() {
+        return deleteAfterWrite;
+    }
+
+    /**
+     * Delete file object after the S3 file has been uploaded
+     */
+    public void setDeleteAfterWrite(boolean deleteAfterWrite) {
+        this.deleteAfterWrite = deleteAfterWrite;
+    }
+
+    public String getPolicy() {
+        return policy;
+    }
+
+    /**
+     * The policy for this queue to set in the
+     * `com.amazonaws.services.s3.AmazonS3#setBucketPolicy()` method.
+     */
+    public void setPolicy(String policy) {
+        this.policy = policy;
+    }
+
+    public String getStorageClass() {
+        return storageClass;
+    }
+
+    /**
+     * The storage class to set in the
+     * `com.amazonaws.services.s3.model.PutObjectRequest` request.
+     */
+    public void setStorageClass(String storageClass) {
+        this.storageClass = storageClass;
+    }
+
+    public String getServerSideEncryption() {
+        return serverSideEncryption;
+    }
+
+    /**
+     * Sets the server-side encryption algorithm when encrypting the object
+     * using AWS-managed keys. For example use <tt>AES256</tt>.
+     */
+    public void setServerSideEncryption(String serverSideEncryption) {
+        this.serverSideEncryption = serverSideEncryption;
+    }
+
+    public Protocol getProxyProtocol() {
+        return proxyProtocol;
+    }
+
+    /**
+     * To define a proxy protocol when instantiating the S3 client
+     */
+    public void setProxyProtocol(Protocol proxyProtocol) {
+        this.proxyProtocol = proxyProtocol;
+    }
+
+    public String getProxyHost() {
+        return proxyHost;
+    }
+
+    /**
+     * To define a proxy host when instantiating the SQS client
+     */
+    public void setProxyHost(String proxyHost) {
+        this.proxyHost = proxyHost;
+    }
+
+    public Integer getProxyPort() {
+        return proxyPort;
+    }
+
+    /**
+     * Specify a proxy port to be used inside the client definition.
+     */
+    public void setProxyPort(Integer proxyPort) {
+        this.proxyPort = proxyPort;
+    }
+
+    /**
+     * Whether or not the S3 client should use path style access
+     */
+    public void setPathStyleAccess(final boolean pathStyleAccess) {
+        this.pathStyleAccess = pathStyleAccess;
+    }
+
+    public boolean isPathStyleAccess() {
+        return pathStyleAccess;
+    }
+
+    public AWS2S3Operations getOperation() {
+        return operation;
+    }
+
+    /**
+     * The operation to do in case the user don't want to do only an upload
+     */
+    public void setOperation(AWS2S3Operations operation) {
+        this.operation = operation;
+    }
+
+    public boolean isAutocloseBody() {
+        return autocloseBody;
+    }
+
+    /**
+     * If this option is true and includeBody is true, then the S3Object.close()
+     * method will be called on exchange completion. This option is strongly
+     * related to includeBody option. In case of setting includeBody to true and
+     * autocloseBody to false, it will be up to the caller to close the S3Object
+     * stream. Setting autocloseBody to true, will close the S3Object stream
+     * automatically.
+     */
+    public void setAutocloseBody(boolean autocloseBody) {
+        this.autocloseBody = autocloseBody;
+    }
+
+    public Encryption getEncryptionMaterials() {
+        return encryptionMaterials;
+    }
+
+    /**
+     * The encryption materials to use in case of Symmetric/Asymmetric client
+     * usage
+     */
+    public void setEncryptionMaterials(Encryption encryptionMaterials) {
+        this.encryptionMaterials = encryptionMaterials;
+    }
+
+    public boolean isUseEncryption() {
+        return useEncryption;
+    }
+
+    /**
+     * Define if encryption must be used or not
+     */
+    public void setUseEncryption(boolean useEncryption) {
+        this.useEncryption = useEncryption;
+    }
+
+    public boolean isUseAwsKMS() {
+        return useAwsKMS;
+    }
+
+    /**
+     * Define if KMS must be used or not
+     */
+    public void setUseAwsKMS(boolean useAwsKMS) {
+        this.useAwsKMS = useAwsKMS;
+    }
+
+    public String getAwsKMSKeyId() {
+        return awsKMSKeyId;
+    }
+
+    /**
+     * Define the id of KMS key to use in case KMS is enabled
+     */
+    public void setAwsKMSKeyId(String awsKMSKeyId) {
+        this.awsKMSKeyId = awsKMSKeyId;
+    }
+
+    public boolean isChunkedEncodingDisabled() {
+        return chunkedEncodingDisabled;
+    }
+
+    /**
+     * Define if disabled Chunked Encoding is true or false
+     */
+    public void setChunkedEncodingDisabled(boolean chunkedEncodingDisabled) {
+        this.chunkedEncodingDisabled = chunkedEncodingDisabled;
+    }
+
+    public boolean isAccelerateModeEnabled() {
+        return accelerateModeEnabled;
+    }
+
+    /**
+     * Define if Accelerate Mode enabled is true or false
+     */
+    public void setAccelerateModeEnabled(boolean accelerateModeEnabled) {
+        this.accelerateModeEnabled = accelerateModeEnabled;
+    }
+
+    public boolean isDualstackEnabled() {
+        return dualstackEnabled;
+    }
+
+    /**
+     * Define if Dualstack enabled is true or false
+     */
+    public void setDualstackEnabled(boolean dualstackEnabled) {
+        this.dualstackEnabled = dualstackEnabled;
+    }
+
+    public boolean isPayloadSigningEnabled() {
+        return payloadSigningEnabled;
+    }
+
+    /**
+     * Define if Payload Signing enabled is true or false
+     */
+    public void setPayloadSigningEnabled(boolean payloadSigningEnabled) {
+        this.payloadSigningEnabled = payloadSigningEnabled;
+    }
+
+    public boolean isForceGlobalBucketAccessEnabled() {
+        return forceGlobalBucketAccessEnabled;
+    }
+
+    /**
+     * Define if Force Global Bucket Access enabled is true or false
+     */
+    public void setForceGlobalBucketAccessEnabled(boolean forceGlobalBucketAccessEnabled) {
+        this.forceGlobalBucketAccessEnabled = forceGlobalBucketAccessEnabled;
+    }
+
+    /**
+     * Set whether the S3 client should expect to load credentials on an EC2
+     * instance or to expect static credentials to be passed in.
+     */
+    public void setUseIAMCredentials(Boolean useIAMCredentials) {
+        this.useIAMCredentials = useIAMCredentials;
+    }
+
+    public Boolean isUseIAMCredentials() {
+        return useIAMCredentials;
+    }
+
+    public boolean isAutoCreateBucket() {
+        return autoCreateBucket;
+    }
+
+    /**
+     * Setting the autocreation of the bucket
+     */
+    public void setAutoCreateBucket(boolean autoCreateBucket) {
+        this.autoCreateBucket = autoCreateBucket;
+    }
+
+    public String getKeyName() {
+        return keyName;
+    }
+
+    /**
+     * Setting the key name for an element in the bucket through endpoint
+     * parameter
+     */
+    public void setKeyName(String keyName) {
+        this.keyName = keyName;
+    }
+
+    public boolean hasProxyConfiguration() {
+        return ObjectHelper.isNotEmpty(getProxyHost()) && ObjectHelper.isNotEmpty(getProxyPort());
+    }
+
+    // *************************************************
+    //
+    // *************************************************
+
+    public AWS2S3Configuration copy() {
+        try {
+            return (AWS2S3Configuration)super.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
new file mode 100644
index 0000000..b3d9dd8
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
@@ -0,0 +1,50 @@
+/*
+ * 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.aws2.s3;
+
+/**
+ * Constants used in Camel AWS S3 module
+ */
+public interface AWS2S3Constants {
+
+    String BUCKET_NAME = "CamelAwsS3BucketName";
+    String BUCKET_DESTINATION_NAME = "CamelAwsS3BucketDestinationName";
+    String CACHE_CONTROL = "CamelAwsS3ContentControl";
+    String CONTENT_DISPOSITION = "CamelAwsS3ContentDisposition";
+    String CONTENT_ENCODING = "CamelAwsS3ContentEncoding";
+    String CONTENT_LENGTH = "CamelAwsS3ContentLength";
+    String CONTENT_MD5 = "CamelAwsS3ContentMD5";
+    String CONTENT_TYPE = "CamelAwsS3ContentType";
+    String DOWNLOAD_LINK_EXPIRATION = "CamelAwsS3DownloadLinkExpiration";
+    String DOWNLOAD_LINK = "CamelAwsS3DownloadLink";
+    String E_TAG = "CamelAwsS3ETag";
+    String KEY = "CamelAwsS3Key";
+    String DESTINATION_KEY = "CamelAwsS3DestinationKey";
+    String LAST_MODIFIED = "CamelAwsS3LastModified";
+    String STORAGE_CLASS = "CamelAwsS3StorageClass";
+    String VERSION_ID = "CamelAwsS3VersionId";
+    String CANNED_ACL = "CamelAwsS3CannedAcl";
+    String ACL = "CamelAwsS3Acl";
+    String USER_METADATA = "CamelAwsS3UserMetadata";
+    String S3_HEADERS = "CamelAwsS3Headers";
+    String S3_OPERATION = "CamelAwsS3Operation";
+    String SERVER_SIDE_ENCRYPTION = "CamelAwsS3ServerSideEncryption";
+    String EXPIRATION_TIME = "CamelAwsS3ExpirationTime";
+    String REPLICATION_STATUS = "CamelAwsS3ReplicationStatus";
+    String RANGE_START = "CamelAwsS3RangeStart";
+    String RANGE_END = "CamelAwsS3RangeEnd";
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
new file mode 100644
index 0000000..c0c2fe7
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
@@ -0,0 +1,254 @@
+/*
+ * 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.aws2.s3;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+import software.amazon.awssdk.awscore.exception.AwsServiceException;
+import software.amazon.awssdk.core.ResponseInputStream;
+import software.amazon.awssdk.core.sync.ResponseTransformer;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
+import software.amazon.awssdk.services.s3.model.S3Object;
+
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedExchange;
+import org.apache.camel.NoFactoryAvailableException;
+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.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.URISupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A Consumer of messages from the Amazon Web Service Simple Storage Service
+ * <a href="http://aws.amazon.com/s3/">AWS S3</a>
+ */
+public class AWS2S3Consumer extends ScheduledBatchPollingConsumer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AWS2S3Consumer.class);
+
+    private String marker;
+    private transient String s3ConsumerToString;
+
+    public AWS2S3Consumer(AWS2S3Endpoint endpoint, Processor processor) throws NoFactoryAvailableException {
+        super(endpoint, processor);
+    }
+
+    @Override
+    protected int poll() throws Exception {
+        // must reset for each poll
+        shutdownRunningTask = null;
+        pendingExchanges = 0;
+
+        String fileName = getConfiguration().getFileName();
+        String bucketName = getConfiguration().getBucketName();
+        Queue<Exchange> exchanges;
+
+        if (fileName != null) {
+            LOG.trace("Getting object in bucket [{}] with file name [{}]...", bucketName, fileName);
+
+            ResponseInputStream<GetObjectResponse> s3Object = getAmazonS3Client().getObject(GetObjectRequest.builder().bucket(bucketName).key(fileName).build());
+            exchanges = createExchanges(s3Object, fileName);
+        } else {
+            LOG.trace("Queueing objects in bucket [{}]...", bucketName);
+
+            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 [{}]...", listObjects.contents().size(), bucketName);
+            }
+
+            exchanges = createExchanges(listObjects.contents());
+        }
+        return processBatch(CastUtils.cast(exchanges));
+    }
+
+    protected Queue<Exchange> createExchanges(ResponseInputStream<GetObjectResponse> s3Object, String key) {
+        Queue<Exchange> answer = new LinkedList<>();
+        Exchange exchange = getEndpoint().createExchange(s3Object, key);
+        answer.add(exchange);
+        return answer;
+    }
+
+    protected Queue<Exchange> createExchanges(List<S3Object> s3ObjectSummaries) {
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Received {} messages in this poll", s3ObjectSummaries.size());
+        }
+
+        Collection<ResponseInputStream<GetObjectResponse>> s3Objects = new ArrayList<>();
+        Queue<Exchange> answer = new LinkedList<>();
+        try {
+            for (S3Object s3ObjectSummary : s3ObjectSummaries) {
+                ResponseInputStream<GetObjectResponse> s3Object = getAmazonS3Client().getObject(GetObjectRequest.builder().bucket(getConfiguration().getBucketName()).key(s3ObjectSummary.key()).build(), ResponseTransformer.toInputStream());
+                s3Objects.add(s3Object);
+
+                Exchange exchange = getEndpoint().createExchange(s3Object, s3ObjectSummary.key());
+                answer.add(exchange);
+            }
+        } catch (Throwable e) {
+            LOG.warn("Error getting S3Object 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;
+    }
+
+    @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) {
+        try {
+            if (getConfiguration().isDeleteAfterRead()) {
+                String bucketName = exchange.getIn().getHeader(AWS2S3Constants.BUCKET_NAME, String.class);
+                String key = exchange.getIn().getHeader(AWS2S3Constants.KEY, String.class);
+
+                LOG.trace("Deleting object from bucket {} with key {}...", bucketName, key);
+
+                getAmazonS3Client().deleteObject(DeleteObjectRequest.builder().bucket(getConfiguration().getBucketName()).key(key).build());
+
+                LOG.trace("Deleted object from bucket {} with key {}...", bucketName, key);
+            }
+        } catch (AwsServiceException e) {
+            getExceptionHandler().handleException("Error occurred during 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 AWS2S3Configuration getConfiguration() {
+        return getEndpoint().getConfiguration();
+    }
+
+    protected S3Client getAmazonS3Client() {
+        return getEndpoint().getS3Client();
+    }
+
+    @Override
+    public AWS2S3Endpoint getEndpoint() {
+        return (AWS2S3Endpoint)super.getEndpoint();
+    }
+
+    @Override
+    public String toString() {
+        if (s3ConsumerToString == null) {
+            s3ConsumerToString = "S3Consumer[" + URISupport.sanitizeUri(getEndpoint().getEndpointUri()) + "]";
+        }
+        return s3ConsumerToString;
+    }
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
new file mode 100644
index 0000000..9088ac2
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
@@ -0,0 +1,273 @@
+/*
+ * 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.aws2.s3;
+
+import software.amazon.awssdk.awscore.exception.AwsServiceException;
+import software.amazon.awssdk.core.ResponseInputStream;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.PutBucketPolicyRequest;
+import software.amazon.awssdk.services.s3.model.S3Object;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.ExtendedExchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.aws2.s3.client.AWS2S3ClientFactory;
+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.apache.camel.support.SynchronizationAdapter;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The aws-s3 component is used for storing and retrieving object from Amazon S3
+ * Storage Service.
+ */
+@UriEndpoint(firstVersion = "3.2.0", scheme = "aws2-s3", title = "AWS2 S3 Storage Service", syntax = "aws2-s3://bucketNameOrArn", label = "cloud,file")
+public class AWS2S3Endpoint extends ScheduledPollEndpoint {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AWS2S3Endpoint.class);
+
+    private S3Client s3Client;
+
+    @UriPath(description = "Bucket name or ARN")
+    @Metadata(required = true)
+    private String bucketNameOrArn; // to support component docs
+    @UriParam
+    private AWS2S3Configuration configuration;
+    @UriParam(label = "consumer", defaultValue = "10")
+    private int maxMessagesPerPoll = 10;
+    @UriParam(label = "consumer", defaultValue = "60")
+    private int maxConnections = 50 + maxMessagesPerPoll;
+
+    public AWS2S3Endpoint(String uri, Component comp, AWS2S3Configuration configuration) {
+        super(uri, comp);
+        this.configuration = configuration;
+    }
+
+    @Override
+    public Consumer createConsumer(Processor processor) throws Exception {
+        AWS2S3Consumer s3Consumer = new AWS2S3Consumer(this, processor);
+        configureConsumer(s3Consumer);
+        s3Consumer.setMaxMessagesPerPoll(maxMessagesPerPoll);
+        return s3Consumer;
+    }
+
+    @Override
+    public Producer createProducer() throws Exception {
+        return new AWS2S3Producer(this);
+    }
+
+    @Override
+    public void doStart() throws Exception {
+        super.doStart();
+
+        s3Client = configuration.getAmazonS3Client() != null ? configuration.getAmazonS3Client() : AWS2S3ClientFactory.getAWSS3Client(configuration, getMaxConnections()).getS3Client();
+
+        String fileName = getConfiguration().getFileName();
+
+        if (fileName != null) {
+            LOG.trace("File name [{}] requested, so skipping bucket check...", fileName);
+            return;
+        }
+
+        String bucketName = getConfiguration().getBucketName();
+        LOG.trace("Querying whether bucket [{}] already exists...", bucketName);
+
+        String prefix = getConfiguration().getPrefix();
+
+        try {
+        	ListObjectsRequest.Builder builder = ListObjectsRequest.builder();
+        	builder.bucket(bucketName);
+        	builder.prefix(prefix);
+        	builder.maxKeys(maxMessagesPerPoll);
+            s3Client.listObjects(builder.build());
+            LOG.trace("Bucket [{}] already exists", bucketName);
+            return;
+        } catch (AwsServiceException ase) {
+            /* 404 means the bucket doesn't exist */
+            if (ase.awsErrorDetails().errorCode().equalsIgnoreCase("404")) {
+                throw ase;
+            }
+        }
+
+        LOG.trace("Bucket [{}] doesn't exist yet", bucketName);
+
+        if (getConfiguration().isAutoCreateBucket()) {
+            // creates the new bucket because it doesn't exist yet
+            CreateBucketRequest createBucketRequest = CreateBucketRequest.builder().bucket(getConfiguration().getBucketName()).build();
+
+            LOG.trace("Creating bucket [{}] in region [{}] with request [{}]...", configuration.getBucketName(), configuration.getRegion(), createBucketRequest);
+
+            s3Client.createBucket(createBucketRequest);
+
+            LOG.trace("Bucket created");
+        }
+
+        if (configuration.getPolicy() != null) {
+            LOG.trace("Updating bucket [{}] with policy [{}]", bucketName, configuration.getPolicy());
+
+            s3Client.putBucketPolicy(PutBucketPolicyRequest.builder().bucket(bucketName).policy(configuration.getPolicy()).build());
+
+            LOG.trace("Bucket policy updated");
+        }
+    }
+
+    @Override
+    public void doStop() throws Exception {
+        if (ObjectHelper.isEmpty(configuration.getAmazonS3Client())) {
+            if (s3Client != null) {
+                s3Client.close();
+            }
+        }
+        super.doStop();
+    }
+
+    public Exchange createExchange(ResponseInputStream<GetObjectResponse> s3Object, String key) {
+        return createExchange(getExchangePattern(), s3Object, key);
+    }
+
+    public Exchange createExchange(ExchangePattern pattern, ResponseInputStream<GetObjectResponse> s3Object, String key) {
+        LOG.trace("Getting object with key [{}] from bucket [{}]...", key, getConfiguration().getBucketName());
+
+        LOG.trace("Got object [{}]", s3Object);
+
+        Exchange exchange = super.createExchange(pattern);
+        Message message = exchange.getIn();
+
+        if (configuration.isIncludeBody()) {
+            try {
+				message.setBody(readInputStream(s3Object));
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+        } else {
+            message.setBody(null);
+        }
+
+        message.setHeader(AWS2S3Constants.KEY, key);
+        message.setHeader(AWS2S3Constants.BUCKET_NAME, getConfiguration().getBucketName());
+        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());
+
+        /**
+         * If includeBody != true, it is safe to close the object here. If
+         * includeBody == true, the caller is responsible for closing the stream
+         * and object once the body has been fully consumed. As of 2.17, the
+         * consumer does not close the stream or object on commit.
+         */
+        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 AWS2S3Configuration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(AWS2S3Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+    public void setS3Client(S3Client s3Client) {
+        this.s3Client = s3Client;
+    }
+
+    public S3Client getS3Client() {
+        return s3Client;
+    }
+
+    public int getMaxMessagesPerPoll() {
+        return maxMessagesPerPoll;
+    }
+
+    /**
+     * Gets the maximum number of messages as a limit to poll at each polling.
+     * <p/>
+     * Gets the maximum number of messages as a limit to poll at each polling.
+     * The default value is 10. Use 0 or a negative number to set it as
+     * unlimited.
+     */
+    public void setMaxMessagesPerPoll(int maxMessagesPerPoll) {
+        this.maxMessagesPerPoll = maxMessagesPerPoll;
+    }
+
+    public int getMaxConnections() {
+        return maxConnections;
+    }
+
+    /**
+     * Set the maxConnections parameter in the S3 client configuration
+     */
+    public void setMaxConnections(int maxConnections) {
+        this.maxConnections = maxConnections;
+    }
+    
+    private String readInputStream(ResponseInputStream<GetObjectResponse> s3Object) throws IOException {
+        StringBuilder textBuilder = new StringBuilder();
+        try (Reader reader = new BufferedReader(new InputStreamReader
+          (s3Object, Charset.forName(StandardCharsets.UTF_8.name())))) {
+            int c = 0;
+            while ((c = reader.read()) != -1) {
+                textBuilder.append((char) c);
+            }
+        }
+        return textBuilder.toString();
+    }
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java
new file mode 100644
index 0000000..a04f2d6
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java
@@ -0,0 +1,22 @@
+/*
+ * 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.aws2.s3;
+
+public enum AWS2S3Operations {
+
+    copyObject, listObjects, deleteObject, deleteBucket, listBuckets, downloadLink, getObject, getObjectRange
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
new file mode 100644
index 0000000..533be73
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
@@ -0,0 +1,407 @@
+/*
+ * 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.aws2.s3;
+
+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.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.WrappedFile;
+import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.util.CastUtils;
+import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.URISupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import software.amazon.awssdk.core.ResponseInputStream;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.core.sync.RequestBody;
+import software.amazon.awssdk.core.sync.ResponseTransformer;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.AccessControlPolicy;
+import software.amazon.awssdk.services.s3.model.Bucket;
+import software.amazon.awssdk.services.s3.model.BucketCannedACL;
+import software.amazon.awssdk.services.s3.model.CompletedMultipartUpload;
+import software.amazon.awssdk.services.s3.model.CopyObjectRequest;
+import software.amazon.awssdk.services.s3.model.CopyObjectResponse;
+import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
+import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse;
+import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
+import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListBucketsResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
+import software.amazon.awssdk.services.s3.model.ObjectCannedACL;
+import software.amazon.awssdk.services.s3.model.PutObjectRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectResponse;
+import software.amazon.awssdk.services.s3.model.S3Object;
+import software.amazon.awssdk.services.s3.model.StorageClass;
+import software.amazon.awssdk.services.s3.model.UploadPartRequest;
+
+/**
+ * A Producer which sends messages to the Amazon Web Service Simple Storage
+ * Service <a href="http://aws.amazon.com/s3/">AWS S3</a>
+ */
+public class AWS2S3Producer extends DefaultProducer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AWS2S3Producer.class);
+
+    private transient String s3ProducerToString;
+
+    public AWS2S3Producer(final Endpoint endpoint) {
+        super(endpoint);
+    }
+
+    @Override
+    public void process(final Exchange exchange) throws Exception {
+        AWS2S3Operations operation = determineOperation(exchange);
+        if (ObjectHelper.isEmpty(operation)) {
+                processSingleOp(exchange);
+        } else {
+            switch (operation) {
+                case copyObject:
+                    copyObject(getEndpoint().getS3Client(), exchange);
+                    break;
+                case deleteObject:
+                    deleteObject(getEndpoint().getS3Client(), exchange);
+                    break;
+                case listBuckets:
+                    listBuckets(getEndpoint().getS3Client(), exchange);
+                    break;
+                case deleteBucket:
+                    deleteBucket(getEndpoint().getS3Client(), exchange);
+                    break;
+                case listObjects:
+                    listObjects(getEndpoint().getS3Client(), exchange);
+                    break;
+                case getObject:
+                    getObject(getEndpoint().getS3Client(), exchange);
+                    break;
+                case getObjectRange:
+                    getObjectRange(getEndpoint().getS3Client(), exchange);
+                    break;
+                default:
+                    throw new IllegalArgumentException("Unsupported operation");
+            }
+        }
+    }
+
+    public void processSingleOp(final Exchange exchange) throws Exception {
+
+        Map<String, String> objectMetadata = determineMetadata(exchange);
+
+        File filePayload = null;
+        InputStream is = null;
+        ByteArrayOutputStream baos = null;
+        Object obj = exchange.getIn().getMandatoryBody();
+        PutObjectRequest.Builder putObjectRequest = PutObjectRequest.builder();
+        // 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);
+            if (objectMetadata.get("Content-Length") == "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");
+                baos = determineLengthInputStream(is);
+                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));
+                }
+            }
+        }
+
+        final String bucketName = determineBucketName(exchange);
+        final String key = determineKey(exchange);
+        putObjectRequest.bucket(bucketName).key(key).metadata(objectMetadata);
+
+        String storageClass = determineStorageClass(exchange);
+        if (storageClass != null) {
+            putObjectRequest.storageClass(storageClass);
+        }
+
+        String cannedAcl = exchange.getIn().getHeader(AWS2S3Constants.CANNED_ACL, String.class);
+        if (cannedAcl != null) {
+            ObjectCannedACL objectAcl = ObjectCannedACL.valueOf(cannedAcl);
+            putObjectRequest.acl(objectAcl);
+        }
+
+        BucketCannedACL acl = exchange.getIn().getHeader(AWS2S3Constants.ACL, BucketCannedACL.class);
+        if (acl != null) {
+            // note: if cannedacl and acl are both specified the last one will
+            // be used. refer to
+            // PutObjectRequest#setAccessControlList for more details
+            putObjectRequest.acl(acl.toString());
+        }
+
+        if (getConfiguration().isUseAwsKMS()) {
+            if (ObjectHelper.isNotEmpty(getConfiguration().getAwsKMSKeyId())) {
+                putObjectRequest.ssekmsKeyId(getConfiguration().getAwsKMSKeyId());
+            }
+        }
+
+        LOG.trace("Put object [{}] from exchange [{}]...", putObjectRequest, exchange);
+
+        PutObjectResponse putObjectResult = getEndpoint().getS3Client().putObject(putObjectRequest.build(), RequestBody.fromBytes(SdkBytes.fromInputStream(is).asByteArray()));
+
+        LOG.trace("Received result [{}]", putObjectResult);
+
+        Message message = getMessageForResponse(exchange);
+        message.setHeader(AWS2S3Constants.E_TAG, putObjectResult.eTag());
+        if (putObjectResult.versionId() != null) {
+            message.setHeader(AWS2S3Constants.VERSION_ID, putObjectResult.versionId());
+        }
+
+        IOHelper.close(is);
+
+        if (getConfiguration().isDeleteAfterWrite() && filePayload != null) {
+            FileUtil.deleteFile(filePayload);
+        }
+    }
+
+    private void copyObject(S3Client s3Client, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+        final String sourceKey = determineKey(exchange);
+        final String destinationKey = exchange.getIn().getHeader(AWS2S3Constants.DESTINATION_KEY, String.class);
+        final String bucketNameDestination = exchange.getIn().getHeader(AWS2S3Constants.BUCKET_DESTINATION_NAME, String.class);
+
+        if (ObjectHelper.isEmpty(bucketNameDestination)) {
+            throw new IllegalArgumentException("Bucket Name Destination must be specified for copyObject Operation");
+        }
+        if (ObjectHelper.isEmpty(destinationKey)) {
+            throw new IllegalArgumentException("Destination Key must be specified for copyObject Operation");
+        }
+        CopyObjectRequest.Builder copyObjectRequest = CopyObjectRequest.builder();
+            copyObjectRequest = CopyObjectRequest.builder().destinationBucket(bucketNameDestination).destinationKey(destinationKey).copySource(bucketName + "/" + sourceKey);
+
+        if (getConfiguration().isUseAwsKMS()) {
+            if (ObjectHelper.isNotEmpty(getConfiguration().getAwsKMSKeyId())) {
+                copyObjectRequest.ssekmsKeyId(getConfiguration().getAwsKMSKeyId());
+            } 
+        }
+
+        CopyObjectResponse copyObjectResult = s3Client.copyObject(copyObjectRequest.build());
+
+        Message message = getMessageForResponse(exchange);
+        if (copyObjectResult.versionId() != null) {
+            message.setHeader(AWS2S3Constants.VERSION_ID, copyObjectResult.versionId());
+        }
+    }
+
+    private void deleteObject(S3Client s3Client, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+        final String sourceKey = determineKey(exchange);
+
+        DeleteObjectRequest.Builder deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucketName).key(sourceKey);
+        s3Client.deleteObject(deleteObjectRequest.build());
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(true);
+    }
+
+    private void listBuckets(S3Client s3Client, Exchange exchange) {
+        ListBucketsResponse bucketsList = s3Client.listBuckets();
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(bucketsList.buckets());
+    }
+
+    private void deleteBucket(S3Client s3Client, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+
+        DeleteBucketRequest.Builder deleteBucketRequest = DeleteBucketRequest.builder().bucket(bucketName);
+        s3Client.deleteBucket(deleteBucketRequest.build());
+    }
+
+    private void getObject(S3Client s3Client, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+        final String sourceKey = determineKey(exchange);
+
+        GetObjectRequest.Builder req = GetObjectRequest.builder().bucket(bucketName).key(sourceKey);
+        ResponseInputStream<GetObjectResponse> res = s3Client.getObject(req.build(), ResponseTransformer.toInputStream());
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(res);
+    }
+
+    private void getObjectRange(S3Client s3Client, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+        final String sourceKey = determineKey(exchange);
+        final String rangeStart = exchange.getIn().getHeader(AWS2S3Constants.RANGE_START, String.class);
+        final String rangeEnd = exchange.getIn().getHeader(AWS2S3Constants.RANGE_END, String.class);
+
+        if (ObjectHelper.isEmpty(rangeStart) || ObjectHelper.isEmpty(rangeEnd)) {
+            throw new IllegalArgumentException("A Range start and range end header must be configured to perform a range get operation.");
+        }
+
+        GetObjectRequest.Builder req = GetObjectRequest.builder().bucket(bucketName).key(sourceKey).range("bytes=" + Long.parseLong(rangeStart) + "-" + Long.parseLong(rangeEnd));
+        ResponseInputStream<GetObjectResponse> res = s3Client.getObject(req.build(), ResponseTransformer.toInputStream());
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(res);
+    }
+
+    private void listObjects(S3Client s3Client, Exchange exchange) {
+        final String bucketName = determineBucketName(exchange);
+
+        ListObjectsResponse objectList = s3Client.listObjects(ListObjectsRequest.builder().bucket(bucketName).build());
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(objectList.contents());
+    }
+
+    private AWS2S3Operations determineOperation(Exchange exchange) {
+        AWS2S3Operations operation = exchange.getIn().getHeader(AWS2S3Constants.S3_OPERATION, AWS2S3Operations.class);
+        if (operation == null) {
+            operation = getConfiguration().getOperation();
+        }
+        return operation;
+    }
+
+    private Map<String, String> determineMetadata(final Exchange exchange) {
+    	Map<String, String> objectMetadata = new HashMap<String, String>();
+
+        Long contentLength = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_LENGTH, Long.class);
+        if (contentLength != null) {
+            objectMetadata.put("Content-Length", String.valueOf(contentLength));
+        }
+
+        String contentType = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_TYPE, String.class);
+        if (contentType != null) {
+        	objectMetadata.put("Content-Type", String.valueOf(contentType));
+        }
+
+        String cacheControl = exchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL, String.class);
+        if (cacheControl != null) {
+        	objectMetadata.put("Cache-Control", String.valueOf(cacheControl));
+        }
+
+        String contentDisposition = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION, String.class);
+        if (contentDisposition != null) {
+        	objectMetadata.put("Content-Disposition", String.valueOf(contentDisposition));
+        }
+
+        String contentEncoding = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING, String.class);
+        if (contentEncoding != null) {
+        	objectMetadata.put("Content-Encoding", String.valueOf(contentEncoding));
+        }
+
+        String contentMD5 = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_MD5, String.class);
+        if (contentMD5 != null) {
+        	objectMetadata.put("Content-Md5", String.valueOf(contentMD5));
+        }
+
+        return objectMetadata;
+    }
+
+    /**
+     * Reads the bucket name from the header of the given exchange. If not
+     * provided, it's read from the endpoint configuration.
+     *
+     * @param exchange The exchange to read the header from.
+     * @return The bucket name.
+     * @throws IllegalArgumentException if the header could not be determined.
+     */
+    private String determineBucketName(final Exchange exchange) {
+        String bucketName = exchange.getIn().getHeader(AWS2S3Constants.BUCKET_NAME, String.class);
+
+        if (ObjectHelper.isEmpty(bucketName)) { 
+            bucketName = getConfiguration().getBucketName();
+            LOG.trace("AWS S3 Bucket name header is missing, using default one [{}]", bucketName);
+        }
+
+        if (bucketName == null) {
+            throw new IllegalArgumentException("AWS S3 Bucket name header is missing or not configured.");
+        }
+
+        return bucketName;
+    }
+
+    private String determineKey(final Exchange exchange) {
+        String key = exchange.getIn().getHeader(AWS2S3Constants.KEY, String.class);
+        if (ObjectHelper.isEmpty(key)) {
+            key = getConfiguration().getKeyName();
+        }
+        if (key == null) {
+            throw new IllegalArgumentException("AWS S3 Key header missing.");
+        }
+        return key;
+    }
+
+    private String determineStorageClass(final Exchange exchange) {
+        String storageClass = exchange.getIn().getHeader(AWS2S3Constants.STORAGE_CLASS, String.class);
+        if (storageClass == null) {
+            storageClass = getConfiguration().getStorageClass();
+        }
+
+        return storageClass;
+    }
+
+    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;
+    }
+
+    protected AWS2S3Configuration getConfiguration() {
+        return getEndpoint().getConfiguration();
+    }
+
+    @Override
+    public String toString() {
+        if (s3ProducerToString == null) {
+            s3ProducerToString = "S3Producer[" + URISupport.sanitizeUri(getEndpoint().getEndpointUri()) + "]";
+        }
+        return s3ProducerToString;
+    }
+
+    @Override
+    public AWS2S3Endpoint getEndpoint() {
+        return (AWS2S3Endpoint)super.getEndpoint();
+    }
+
+    public static Message getMessageForResponse(final Exchange exchange) {
+        return exchange.getMessage();
+    }
+
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2CamelS3InternalClient.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2CamelS3InternalClient.java
new file mode 100644
index 0000000..86ddea7
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2CamelS3InternalClient.java
@@ -0,0 +1,33 @@
+/*
+ * 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.aws2.s3.client;
+
+import software.amazon.awssdk.services.s3.S3Client;
+
+/**
+ * Mange the required actions of an s3 client for either local or remote.
+ */
+public interface AWS2CamelS3InternalClient {
+
+    /**
+     * Returns an s3 client after a factory method determines which one to
+     * return.
+     * 
+     * @return AmazonS3 AmazonS3
+     */
+    S3Client getS3Client();
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2S3ClientFactory.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2S3ClientFactory.java
new file mode 100644
index 0000000..0b3c478
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2S3ClientFactory.java
@@ -0,0 +1,42 @@
+/*
+ * 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.aws2.s3.client;
+
+import org.apache.camel.component.aws2.s3.AWS2S3Configuration;
+import org.apache.camel.component.aws2.s3.client.impl.AWS2S3ClientIAMOptimizedImpl;
+import org.apache.camel.component.aws2.s3.client.impl.AWS2S3ClientStandardImpl;
+
+/**
+ * Factory class to return the correct type of AWS S3 aws.
+ */
+public final class AWS2S3ClientFactory {
+
+    private AWS2S3ClientFactory() {
+        // Prevent instantiation of this factory class.
+        throw new RuntimeException("Do not instantiate a Factory class! Refer to the class " + "to learn how to properly use this factory implementation.");
+    }
+
+    /**
+     * Return the correct aws s3 client (based on remote vs local).
+     * 
+     * @param maxConnections max connections
+     * @return AWSS3Client
+     */
+    public static AWS2CamelS3InternalClient getAWSS3Client(AWS2S3Configuration configuration, int maxConnections) {
+        return configuration.isUseIAMCredentials() ? new AWS2S3ClientIAMOptimizedImpl(configuration, maxConnections) : new AWS2S3ClientStandardImpl(configuration, maxConnections);
+    }
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientIAMOptimizedImpl.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientIAMOptimizedImpl.java
new file mode 100644
index 0000000..5395aec
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientIAMOptimizedImpl.java
@@ -0,0 +1,92 @@
+/*
+ * 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.aws2.s3.client.impl;
+
+import java.net.URI;
+
+import org.apache.camel.component.aws2.s3.AWS2S3Configuration;
+import org.apache.camel.component.aws2.s3.client.AWS2CamelS3InternalClient;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.http.apache.ApacheHttpClient;
+import software.amazon.awssdk.http.apache.ProxyConfiguration;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.S3ClientBuilder;
+
+/**
+ * Manage an AWS s3 client for all users to use (enabling temporary creds). This
+ * implementation is for remote instances to manage the credentials on their own
+ * (eliminating credential rotations)
+ */
+public class AWS2S3ClientIAMOptimizedImpl implements AWS2CamelS3InternalClient {
+    private static final Logger LOG = LoggerFactory.getLogger(AWS2S3ClientIAMOptimizedImpl.class);
+    private AWS2S3Configuration configuration;
+    private int maxConnections;
+
+    /**
+     * Constructor that uses the config file.
+     */
+    public AWS2S3ClientIAMOptimizedImpl(AWS2S3Configuration configuration, int maxConnections) {
+        LOG.trace("Creating an AWS S3 client for an ec2 instance with IAM temporary credentials (normal for ec2s).");
+        this.configuration = configuration;
+        this.maxConnections = maxConnections;
+    }
+
+    /**
+     * Getting the s3 aws client that is used.
+     * 
+     * @return Amazon S3 Client.
+     */
+    @Override
+    public S3Client getS3Client() {
+    	S3Client client = null;
+    	S3ClientBuilder clientBuilder = S3Client.builder();
+        ProxyConfiguration.Builder proxyConfig = null;
+        ApacheHttpClient.Builder httpClientBuilder = null;
+        boolean isClientConfigFound = false;
+        if (ObjectHelper.isNotEmpty(configuration.getProxyHost()) && ObjectHelper.isNotEmpty(configuration.getProxyPort())) {
+            proxyConfig = ProxyConfiguration.builder();
+            URI proxyEndpoint = URI.create(configuration.getProxyProtocol() + configuration.getProxyHost() + configuration.getProxyPort());
+            proxyConfig.endpoint(proxyEndpoint);
+            httpClientBuilder = ApacheHttpClient.builder().proxyConfiguration(proxyConfig.build());
+            isClientConfigFound = true;
+        }
+        if (configuration.getAccessKey() != null && configuration.getSecretKey() != null) {
+            InstanceProfileCredentialsProvider cred = InstanceProfileCredentialsProvider.create();
+            if (isClientConfigFound) {
+                clientBuilder = clientBuilder.httpClientBuilder(httpClientBuilder).credentialsProvider(cred);
+            } else {
+                clientBuilder = clientBuilder.credentialsProvider(cred);
+            }
+        } else {
+            if (!isClientConfigFound) {
+                clientBuilder = clientBuilder.httpClientBuilder(httpClientBuilder);
+            }
+        }
+        if (ObjectHelper.isNotEmpty(configuration.getRegion())) {
+            clientBuilder = clientBuilder.region(Region.of(configuration.getRegion()));
+        }
+        client = clientBuilder.build();
+        return client;
+    }
+}
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientStandardImpl.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientStandardImpl.java
new file mode 100644
index 0000000..6fd055b
--- /dev/null
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientStandardImpl.java
@@ -0,0 +1,90 @@
+/*
+ * 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.aws2.s3.client.impl;
+
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.http.apache.ApacheHttpClient;
+import software.amazon.awssdk.http.apache.ProxyConfiguration;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.S3ClientBuilder;
+
+import java.net.URI;
+
+import org.apache.camel.component.aws2.s3.AWS2S3Configuration;
+import org.apache.camel.component.aws2.s3.client.AWS2CamelS3InternalClient;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Manage an AWS s3 client for all users to use. This implementation is for
+ * local instances to use a static and solid credential set.
+ */
+public class AWS2S3ClientStandardImpl implements AWS2CamelS3InternalClient {
+    private static final Logger LOG = LoggerFactory.getLogger(AWS2S3ClientStandardImpl.class);
+    private AWS2S3Configuration configuration;
+    private int maxConnections;
+
+    /**
+     * Constructor that uses the config file.
+     */
+    public AWS2S3ClientStandardImpl(AWS2S3Configuration configuration, int maxConnections) {
+        LOG.trace("Creating an AWS S3 manager using static credentials.");
+        this.configuration = configuration;
+        this.maxConnections = maxConnections;
+    }
+
+    /**
+     * Getting the s3 aws client that is used.
+     * 
+     * @return Amazon S3 Client.
+     */
+    @Override
+    public S3Client getS3Client() {
+    	S3Client client = null;
+    	S3ClientBuilder clientBuilder = S3Client.builder();
+        ProxyConfiguration.Builder proxyConfig = null;
+        ApacheHttpClient.Builder httpClientBuilder = null;
+        boolean isClientConfigFound = false;
+        if (ObjectHelper.isNotEmpty(configuration.getProxyHost()) && ObjectHelper.isNotEmpty(configuration.getProxyPort())) {
+            proxyConfig = ProxyConfiguration.builder();
+            URI proxyEndpoint = URI.create(configuration.getProxyProtocol() + configuration.getProxyHost() + configuration.getProxyPort());
+            proxyConfig.endpoint(proxyEndpoint);
+            httpClientBuilder = ApacheHttpClient.builder().proxyConfiguration(proxyConfig.build());
+            isClientConfigFound = true;
+        }
+        if (configuration.getAccessKey() != null && configuration.getSecretKey() != null) {
+            AwsBasicCredentials cred = AwsBasicCredentials.create(configuration.getAccessKey(), configuration.getSecretKey());
+            if (isClientConfigFound) {
+                clientBuilder = clientBuilder.httpClientBuilder(httpClientBuilder).credentialsProvider(StaticCredentialsProvider.create(cred));
+            } else {
+                clientBuilder = clientBuilder.credentialsProvider(StaticCredentialsProvider.create(cred));
+            }
+        } else {
+            if (!isClientConfigFound) {
+                clientBuilder = clientBuilder.httpClientBuilder(httpClientBuilder);
+            }
+        }
+        if (ObjectHelper.isNotEmpty(configuration.getRegion())) {
+            clientBuilder = clientBuilder.region(Region.of(configuration.getRegion()));
+        }
+        client = clientBuilder.build();
+        return client;
+    }
+}
diff --git a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/AWSS3ClientFactoryTest.java b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/AWSS3ClientFactoryTest.java
new file mode 100644
index 0000000..5b0d7b1
--- /dev/null
+++ b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/AWSS3ClientFactoryTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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.aws2.s3;
+
+import org.apache.camel.component.aws2.s3.AWS2S3Configuration;
+import org.apache.camel.component.aws2.s3.client.AWS2CamelS3InternalClient;
+import org.apache.camel.component.aws2.s3.client.AWS2S3ClientFactory;
+import org.apache.camel.component.aws2.s3.client.impl.AWS2S3ClientIAMOptimizedImpl;
+import org.apache.camel.component.aws2.s3.client.impl.AWS2S3ClientStandardImpl;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class AWSS3ClientFactoryTest {
+    private static final int MAX_CONNECTIONS = 1;
+
+    @Test
+    public void getStandardS3ClientDefault() {
+        AWS2S3Configuration s3Configuration = new AWS2S3Configuration();
+        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration, MAX_CONNECTIONS);
+        Assert.assertTrue(awss3Client instanceof AWS2S3ClientStandardImpl);
+    }
+
+    @Test
+    public void getStandardS3Client() {
+        AWS2S3Configuration s3Configuration = new AWS2S3Configuration();
+        s3Configuration.setUseIAMCredentials(false);
+        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration, MAX_CONNECTIONS);
+        Assert.assertTrue(awss3Client instanceof AWS2S3ClientStandardImpl);
+    }
+
+    @Test
+    public void getIAMOptimizedS3Client() {
+        AWS2S3Configuration s3Configuration = new AWS2S3Configuration();
+        s3Configuration.setUseIAMCredentials(true);
+        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration, MAX_CONNECTIONS);
+        Assert.assertTrue(awss3Client instanceof AWS2S3ClientIAMOptimizedImpl);
+    }
+}
diff --git a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/S3ComponentVerifierExtensionTest.java b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/S3ComponentVerifierExtensionTest.java
new file mode 100644
index 0000000..26d0dea
--- /dev/null
+++ b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/S3ComponentVerifierExtensionTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.aws2.s3;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.Component;
+import org.apache.camel.component.extension.ComponentVerifierExtension;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class S3ComponentVerifierExtensionTest extends CamelTestSupport {
+
+    // *************************************************
+    // Tests (parameters)
+    // *************************************************
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Test
+    public void testParameters() throws Exception {
+        Component component = context().getComponent("aws2-s3");
+
+        ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("secretKey", "l");
+        parameters.put("accessKey", "k");
+        parameters.put("region", "l");
+        parameters.put("bucketNameOrArn", "bucket1");
+
+        ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus());
+    }
+
+    @Test
+    public void testConnectivity() throws Exception {
+        Component component = context().getComponent("aws2-s3");
+        ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("secretKey", "l");
+        parameters.put("accessKey", "k");
+        parameters.put("region", "US_EAST_1");
+        parameters.put("bucketNameOrArn", "test12");
+
+        ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
+
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+    }
+
+}
diff --git a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ComponentIntegrationTest.java b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ComponentIntegrationTest.java
new file mode 100644
index 0000000..951f7b3
--- /dev/null
+++ b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ComponentIntegrationTest.java
@@ -0,0 +1,122 @@
+/*
+ * 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.aws2.s3.integration;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.aws2.s3.AWS2S3Constants;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Ignore;
+import org.junit.Test;
+
+@Ignore("Must be manually tested. Provide your own accessKey and secretKey!")
+public class S3ComponentIntegrationTest extends CamelTestSupport {
+
+    @EndpointInject("direct:start")
+    private ProducerTemplate template;
+
+    @EndpointInject("mock:result")
+    private MockEndpoint result;
+
+    @Test
+    public void sendInOnly() throws Exception {
+        result.expectedMessageCount(2);
+
+        Exchange exchange1 = template.send("direct:start", ExchangePattern.InOnly, new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(AWS2S3Constants.KEY, "CamelUnitTest1");
+                exchange.getIn().setBody("This is my bucket content.");
+            }
+        });
+
+        Exchange exchange2 = template.send("direct:start", ExchangePattern.InOnly, new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(AWS2S3Constants.KEY, "CamelUnitTest2");
+                exchange.getIn().setBody("This is my bucket content.");
+            }
+        });
+
+        assertMockEndpointsSatisfied();
+
+        assertResultExchange(result.getExchanges().get(0));
+        assertResultExchange(result.getExchanges().get(1));
+
+        assertResponseMessage(exchange1.getIn());
+        assertResponseMessage(exchange2.getIn());
+    }
+
+    @Test
+    public void sendInOut() throws Exception {
+        result.expectedMessageCount(1);
+
+        Exchange exchange = template.send("direct:start", ExchangePattern.InOut, new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(AWS2S3Constants.KEY, "CamelUnitTest");
+                exchange.getIn().setBody("This is my bucket content.");
+            }
+        });
+
+        assertMockEndpointsSatisfied();
+
+        assertResultExchange(result.getExchanges().get(0));
+
+        assertResponseMessage(exchange.getMessage());
+    }
+
+    private void assertResultExchange(Exchange resultExchange) {
+        assertIsInstanceOf(String.class, resultExchange.getIn().getBody());
+        assertEquals("This is my bucket content.", resultExchange.getIn().getBody(String.class));
+        assertEquals("mycamelbucket", resultExchange.getIn().getHeader(AWS2S3Constants.BUCKET_NAME));
+        assertTrue(resultExchange.getIn().getHeader(AWS2S3Constants.KEY, String.class).startsWith("CamelUnitTest"));
+        assertNull(resultExchange.getIn().getHeader(AWS2S3Constants.VERSION_ID)); // not
+                                                                              // enabled
+                                                                              // on
+                                                                              // this
+                                                                              // bucket
+        assertNotNull(resultExchange.getIn().getHeader(AWS2S3Constants.LAST_MODIFIED));
+        assertEquals("application/octet-stream", resultExchange.getIn().getHeader(AWS2S3Constants.CONTENT_TYPE));
+        assertNull(resultExchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING));
+        assertEquals(26L, resultExchange.getIn().getHeader(AWS2S3Constants.CONTENT_LENGTH));
+        assertNull(resultExchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION));
+        assertNull(resultExchange.getIn().getHeader(AWS2S3Constants.CONTENT_MD5));
+        assertNull(resultExchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL));
+    }
+
+    private void assertResponseMessage(Message message) {
+        assertNull(message.getHeader(AWS2S3Constants.VERSION_ID));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                String s3EndpointUri = "aws2-s3://mycamelbucket?accessKey=xxx&secretKey=yyy&region=us-west-1&autoCreateBucket=false";
+
+                from("direct:start").to(s3EndpointUri);
+
+                from(s3EndpointUri).to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ObjectRangeOperationIntegrationTest.java b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ObjectRangeOperationIntegrationTest.java
new file mode 100644
index 0000000..fed3648
--- /dev/null
+++ b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ObjectRangeOperationIntegrationTest.java
@@ -0,0 +1,110 @@
+/*
+ * 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.aws2.s3.integration;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.core.ResponseInputStream;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.aws2.s3.AWS2S3Constants;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Ignore("Must be manually tested. Provide your own accessKey and secretKey!")
+public class S3ObjectRangeOperationIntegrationTest extends CamelTestSupport {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(S3ObjectRangeOperationIntegrationTest.class);
+
+    @BindToRegistry("amazonS3Client")
+    S3Client client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("xxx", "yyy"))).region(Region.US_WEST_1).build();
+
+    @EndpointInject
+    private ProducerTemplate template;
+
+    @EndpointInject("mock:result")
+    private MockEndpoint result;
+
+    @Test
+    public void sendIn() throws Exception {
+        result.expectedMessageCount(1);
+
+        template.send("direct:getObjectRange", new Processor() {
+
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(AWS2S3Constants.KEY, "element.txt");
+                exchange.getIn().setHeader(AWS2S3Constants.RANGE_START, 0);
+                exchange.getIn().setHeader(AWS2S3Constants.RANGE_END, 9);
+            }
+        });
+        assertMockEndpointsSatisfied();
+
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                String awsEndpoint = "aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange&autoCreateBucket=false";
+
+                from("direct:getObjectRange").to(awsEndpoint).process(new Processor() {
+
+                    @Override
+                    public void process(Exchange exchange) throws Exception {
+                    	ResponseInputStream<GetObjectResponse> s3 = exchange.getIn().getBody(ResponseInputStream.class);
+                    	LOG.info(readInputStream(s3));
+
+                    }
+                }).to("mock:result");
+
+            }
+        };
+    }
+
+    private String readInputStream(ResponseInputStream<GetObjectResponse> s3Object) throws IOException {
+        StringBuilder textBuilder = new StringBuilder();
+        try (Reader reader = new BufferedReader(new InputStreamReader
+          (s3Object, Charset.forName(StandardCharsets.UTF_8.name())))) {
+            int c = 0;
+            while ((c = reader.read()) != -1) {
+                textBuilder.append((char) c);
+            }
+        }
+        return textBuilder.toString();
+    }
+}
diff --git a/components/camel-aws2-s3/src/test/resources/log4j2.properties b/components/camel-aws2-s3/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..caf55f1
--- /dev/null
+++ b/components/camel-aws2-s3/src/test/resources/log4j2.properties
@@ -0,0 +1,28 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-aws-s3-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 = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = file
diff --git a/components/camel-aws2-s3/src/test/resources/org/apache/camel/component/aws2/s3/S3ComponentSpringTest-context.xml b/components/camel-aws2-s3/src/test/resources/org/apache/camel/component/aws2/s3/S3ComponentSpringTest-context.xml
new file mode 100644
index 0000000..4bf7ba6
--- /dev/null
+++ b/components/camel-aws2-s3/src/test/resources/org/apache/camel/component/aws2/s3/S3ComponentSpringTest-context.xml
@@ -0,0 +1,63 @@
+<?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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+        <route>
+            <from uri="direct:start"/>
+            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client"/>
+        </route>
+        <route>
+            <from uri="direct:copyObject"/>
+            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=copyObject"/>
+            <to uri="mock:result"/>
+        </route>
+        <route>
+            <from uri="direct:listBuckets"/>
+            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=listBuckets"/>
+            <to uri="mock:result"/>
+        </route>
+        <route>
+            <from uri="direct:deleteObject"/>
+            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=deleteObject"/>
+            <to uri="mock:result"/>
+        </route>   
+        <route>
+            <from uri="direct:downloadLink"/>
+            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=downloadLink"/>
+            <to uri="mock:result"/>
+        </route> 
+        <route>
+            <from uri="direct:listObjects"/>
+            <to uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;operation=listObjects"/>
+            <to uri="mock:result"/>
+        </route>    
+        <route>
+            <from uri="aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;maxMessagesPerPoll=5"/>
+            <to uri="mock:result"/>
+        </route>
+    </camelContext>
+
+    <bean id="amazonS3Client" class="org.apache.camel.component.aws2.s3.AmazonS3ClientMock"/>
+</beans>
\ No newline at end of file
diff --git a/core/camel-allcomponents/pom.xml b/core/camel-allcomponents/pom.xml
index 24af96b..d0e3175 100644
--- a/core/camel-allcomponents/pom.xml
+++ b/core/camel-allcomponents/pom.xml
@@ -208,6 +208,10 @@
 		</dependency>
 		<dependency>
 			<groupId>org.apache.camel</groupId>
+			<artifactId>camel-aws2-s3</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.camel</groupId>
 			<artifactId>camel-aws2-ses</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 4b786fb..8c9516d 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
@@ -610,6 +610,18 @@ public interface ComponentsBuilderFactory {
         return org.apache.camel.builder.component.dsl.Aws2MskComponentBuilderFactory.aws2Msk();
     }
     /**
+     * AWS2 S3 Storage Service (camel-aws2-s3)
+     * The aws-s3 component is used for storing and retrieving object from
+     * Amazon S3 Storage Service.
+     * 
+     * Category: cloud,file
+     * Since: 3.2
+     * Maven coordinates: org.apache.camel:camel-aws2-s3
+     */
+    static org.apache.camel.builder.component.dsl.Aws2S3ComponentBuilderFactory.Aws2S3ComponentBuilder aws2S3() {
+        return org.apache.camel.builder.component.dsl.Aws2S3ComponentBuilderFactory.aws2S3();
+    }
+    /**
      * AWS 2 Simple Email Service (camel-aws2-ses)
      * The aws2-ses component is used for sending emails with Amazon's SES
      * service.
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Aws2S3ComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Aws2S3ComponentBuilderFactory.java
new file mode 100644
index 0000000..ecfac61
--- /dev/null
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Aws2S3ComponentBuilderFactory.java
@@ -0,0 +1,616 @@
+/*
+ * 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.aws2.s3.AWS2S3Component;
+
+/**
+ * The aws-s3 component is used for storing and retrieving object from Amazon S3
+ * Storage Service.
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.ComponentDslMojo")
+public interface Aws2S3ComponentBuilderFactory {
+
+    /**
+     * AWS2 S3 Storage Service (camel-aws2-s3)
+     * The aws-s3 component is used for storing and retrieving object from
+     * Amazon S3 Storage Service.
+     * 
+     * Category: cloud,file
+     * Since: 3.2
+     * Maven coordinates: org.apache.camel:camel-aws2-s3
+     */
+    static Aws2S3ComponentBuilder aws2S3() {
+        return new Aws2S3ComponentBuilderImpl();
+    }
+
+    /**
+     * Builder for the AWS2 S3 Storage Service component.
+     */
+    interface Aws2S3ComponentBuilder
+            extends
+                ComponentBuilder<AWS2S3Component> {
+        /**
+         * Reference to a com.amazonaws.services.s3.AmazonS3 in the registry.
+         * 
+         * The option is a:
+         * <code>software.amazon.awssdk.services.s3.S3Client</code> type.
+         * 
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder amazonS3Client(
+                software.amazon.awssdk.services.s3.S3Client amazonS3Client) {
+            doSetProperty("amazonS3Client", amazonS3Client);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder autoCreateBucket(boolean autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * The component configuration.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.aws2.s3.AWS2S3Configuration</code>
+         * type.
+         * 
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder configuration(
+                org.apache.camel.component.aws2.s3.AWS2S3Configuration configuration) {
+            doSetProperty("configuration", configuration);
+            return this;
+        }
+        /**
+         * Whether or not the S3 client should use path style access.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder pathStyleAccess(boolean pathStyleAccess) {
+            doSetProperty("pathStyleAccess", pathStyleAccess);
+            return this;
+        }
+        /**
+         * The policy for this queue to set in the
+         * com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder policy(java.lang.String policy) {
+            doSetProperty("policy", policy);
+            return this;
+        }
+        /**
+         * To define a proxy host when instantiating the SQS client.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder proxyHost(java.lang.String proxyHost) {
+            doSetProperty("proxyHost", proxyHost);
+            return this;
+        }
+        /**
+         * Specify a proxy port to be used inside the client definition.
+         * 
+         * The option is a: <code>java.lang.Integer</code> type.
+         * 
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder proxyPort(java.lang.Integer proxyPort) {
+            doSetProperty("proxyPort", proxyPort);
+            return this;
+        }
+        /**
+         * To define a proxy protocol when instantiating the S3 client.
+         * 
+         * The option is a: <code>software.amazon.awssdk.core.Protocol</code>
+         * type.
+         * 
+         * Default: HTTPS
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder proxyProtocol(
+                software.amazon.awssdk.core.Protocol proxyProtocol) {
+            doSetProperty("proxyProtocol", proxyProtocol);
+            return this;
+        }
+        /**
+         * The region in which S3 client needs to work. When using this
+         * parameter, the configuration will expect the capitalized name of the
+         * region (for example AP_EAST_1) You'll need to use the name
+         * Regions.EU_WEST_1.name().
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder region(java.lang.String region) {
+            doSetProperty("region", region);
+            return this;
+        }
+        /**
+         * Set whether the S3 client should expect to load credentials on an EC2
+         * instance or to expect static credentials to be passed in.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default Aws2S3ComponentBuilder useIAMCredentials(
+                boolean useIAMCredentials) {
+            doSetProperty("useIAMCredentials", useIAMCredentials);
+            return this;
+        }
+        /**
+         * The encryption materials to use in case of Symmetric/Asymmetric
+         * client usage.
+         * 
+         * The option is a:
+         * <code>software.amazon.awssdk.services.s3.model.Encryption</code>
+         * type.
+         * 
+         * Group: common (advanced)
+         */
+        default Aws2S3ComponentBuilder encryptionMaterials(
+                software.amazon.awssdk.services.s3.model.Encryption encryptionMaterials) {
+            doSetProperty("encryptionMaterials", encryptionMaterials);
+            return this;
+        }
+        /**
+         * Define if encryption must be used or not.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default Aws2S3ComponentBuilder useEncryption(boolean useEncryption) {
+            doSetProperty("useEncryption", useEncryption);
+            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: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default Aws2S3ComponentBuilder 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: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer
+         */
+        default Aws2S3ComponentBuilder deleteAfterRead(boolean deleteAfterRead) {
+            doSetProperty("deleteAfterRead", deleteAfterRead);
+            return this;
+        }
+        /**
+         * The delimiter which is used in the
+         * com.amazonaws.services.s3.model.ListObjectsRequest to only consume
+         * objects we are interested in.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         */
+        default Aws2S3ComponentBuilder delimiter(java.lang.String delimiter) {
+            doSetProperty("delimiter", delimiter);
+            return this;
+        }
+        /**
+         * To get the object from the bucket with the given file name.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         */
+        default Aws2S3ComponentBuilder fileName(java.lang.String fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
+         * If it is true, the exchange body will be set to a stream to the
+         * contents of the file. If false, the headers will be set with the S3
+         * object metadata, but the body will be null. This option is strongly
+         * related to autocloseBody option. In case of setting includeBody to
+         * true and autocloseBody to false, it will be up to the caller to close
+         * the S3Object stream. Setting autocloseBody to true, will close the
+         * S3Object stream automatically.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer
+         */
+        default Aws2S3ComponentBuilder includeBody(boolean includeBody) {
+            doSetProperty("includeBody", includeBody);
+            return this;
+        }
+        /**
+         * The prefix which is used in the
+         * com.amazonaws.services.s3.model.ListObjectsRequest to only consume
+         * objects we are interested in.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         */
+        default Aws2S3ComponentBuilder prefix(java.lang.String prefix) {
+            doSetProperty("prefix", prefix);
+            return this;
+        }
+        /**
+         * If this option is true and includeBody is true, then the
+         * S3Object.close() method will be called on exchange completion. This
+         * option is strongly related to includeBody option. In case of setting
+         * includeBody to true and autocloseBody to false, it will be up to the
+         * caller to close the S3Object stream. Setting autocloseBody to true,
+         * will close the S3Object stream automatically.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer (advanced)
+         */
+        default Aws2S3ComponentBuilder autocloseBody(boolean autocloseBody) {
+            doSetProperty("autocloseBody", autocloseBody);
+            return this;
+        }
+        /**
+         * Delete file object after the S3 file has been uploaded.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default Aws2S3ComponentBuilder deleteAfterWrite(boolean deleteAfterWrite) {
+            doSetProperty("deleteAfterWrite", deleteAfterWrite);
+            return this;
+        }
+        /**
+         * Setting the key name for an element in the bucket through endpoint
+         * parameter.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer
+         */
+        default Aws2S3ComponentBuilder keyName(java.lang.String keyName) {
+            doSetProperty("keyName", keyName);
+            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: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default Aws2S3ComponentBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * If it is true, camel will upload the file with multi part format, the
+         * part size is decided by the option of partSize.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default Aws2S3ComponentBuilder multiPartUpload(boolean multiPartUpload) {
+            doSetProperty("multiPartUpload", multiPartUpload);
+            return this;
+        }
+        /**
+         * The operation to do in case the user don't want to do only an upload.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.aws2.s3.AWS2S3Operations</code>
+         * type.
+         * 
+         * Group: producer
+         */
+        default Aws2S3ComponentBuilder operation(
+                org.apache.camel.component.aws2.s3.AWS2S3Operations operation) {
+            doSetProperty("operation", operation);
+            return this;
+        }
+        /**
+         * Setup the partSize which is used in multi part upload, the default
+         * size is 25M.
+         * 
+         * The option is a: <code>long</code> type.
+         * 
+         * Default: 26214400
+         * Group: producer
+         */
+        default Aws2S3ComponentBuilder partSize(long partSize) {
+            doSetProperty("partSize", partSize);
+            return this;
+        }
+        /**
+         * Sets the server-side encryption algorithm when encrypting the object
+         * using AWS-managed keys. For example use AES256.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer
+         */
+        default Aws2S3ComponentBuilder serverSideEncryption(
+                java.lang.String serverSideEncryption) {
+            doSetProperty("serverSideEncryption", serverSideEncryption);
+            return this;
+        }
+        /**
+         * The storage class to set in the
+         * com.amazonaws.services.s3.model.PutObjectRequest request.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer
+         */
+        default Aws2S3ComponentBuilder storageClass(
+                java.lang.String storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * Define the id of KMS key to use in case KMS is enabled.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer (advanced)
+         */
+        default Aws2S3ComponentBuilder awsKMSKeyId(java.lang.String awsKMSKeyId) {
+            doSetProperty("awsKMSKeyId", awsKMSKeyId);
+            return this;
+        }
+        /**
+         * Define if KMS must be used or not.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default Aws2S3ComponentBuilder useAwsKMS(boolean useAwsKMS) {
+            doSetProperty("useAwsKMS", useAwsKMS);
+            return this;
+        }
+        /**
+         * Define if Accelerate Mode enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default Aws2S3ComponentBuilder accelerateModeEnabled(
+                boolean accelerateModeEnabled) {
+            doSetProperty("accelerateModeEnabled", accelerateModeEnabled);
+            return this;
+        }
+        /**
+         * Define if disabled Chunked Encoding is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default Aws2S3ComponentBuilder chunkedEncodingDisabled(
+                boolean chunkedEncodingDisabled) {
+            doSetProperty("chunkedEncodingDisabled", chunkedEncodingDisabled);
+            return this;
+        }
+        /**
+         * Define if Dualstack enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default Aws2S3ComponentBuilder dualstackEnabled(boolean dualstackEnabled) {
+            doSetProperty("dualstackEnabled", dualstackEnabled);
+            return this;
+        }
+        /**
+         * Define if Force Global Bucket Access enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default Aws2S3ComponentBuilder forceGlobalBucketAccessEnabled(
+                boolean forceGlobalBucketAccessEnabled) {
+            doSetProperty("forceGlobalBucketAccessEnabled", forceGlobalBucketAccessEnabled);
+            return this;
+        }
+        /**
+         * Define if Payload Signing enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default Aws2S3ComponentBuilder payloadSigningEnabled(
+                boolean payloadSigningEnabled) {
+            doSetProperty("payloadSigningEnabled", payloadSigningEnabled);
+            return this;
+        }
+        /**
+         * Whether the component should use basic property binding (Camel 2.x)
+         * or the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default Aws2S3ComponentBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Amazon AWS Access Key.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default Aws2S3ComponentBuilder accessKey(java.lang.String accessKey) {
+            doSetProperty("accessKey", accessKey);
+            return this;
+        }
+        /**
+         * Amazon AWS Secret Key.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default Aws2S3ComponentBuilder secretKey(java.lang.String secretKey) {
+            doSetProperty("secretKey", secretKey);
+            return this;
+        }
+    }
+
+    class Aws2S3ComponentBuilderImpl
+            extends
+                AbstractComponentBuilder<AWS2S3Component>
+            implements
+                Aws2S3ComponentBuilder {
+        @Override
+        protected AWS2S3Component buildConcreteComponent() {
+            return new AWS2S3Component();
+        }
+        private org.apache.camel.component.aws2.s3.AWS2S3Configuration getOrCreateConfiguration(
+                org.apache.camel.component.aws2.s3.AWS2S3Component component) {
+            if (component.getConfiguration() == null) {
+                component.setConfiguration(new org.apache.camel.component.aws2.s3.AWS2S3Configuration());
+            }
+            return component.getConfiguration();
+        }
+        @Override
+        protected boolean setPropertyOnComponent(
+                Component component,
+                String name,
+                Object value) {
+            switch (name) {
+            case "amazonS3Client": getOrCreateConfiguration((AWS2S3Component) component).setAmazonS3Client((software.amazon.awssdk.services.s3.S3Client) value); return true;
+            case "autoCreateBucket": getOrCreateConfiguration((AWS2S3Component) component).setAutoCreateBucket((boolean) value); return true;
+            case "configuration": ((AWS2S3Component) component).setConfiguration((org.apache.camel.component.aws2.s3.AWS2S3Configuration) value); return true;
+            case "pathStyleAccess": getOrCreateConfiguration((AWS2S3Component) component).setPathStyleAccess((boolean) value); return true;
+            case "policy": getOrCreateConfiguration((AWS2S3Component) component).setPolicy((java.lang.String) value); return true;
+            case "proxyHost": getOrCreateConfiguration((AWS2S3Component) component).setProxyHost((java.lang.String) value); return true;
+            case "proxyPort": getOrCreateConfiguration((AWS2S3Component) component).setProxyPort((java.lang.Integer) value); return true;
+            case "proxyProtocol": getOrCreateConfiguration((AWS2S3Component) component).setProxyProtocol((software.amazon.awssdk.core.Protocol) value); return true;
+            case "region": getOrCreateConfiguration((AWS2S3Component) component).setRegion((java.lang.String) value); return true;
+            case "useIAMCredentials": getOrCreateConfiguration((AWS2S3Component) component).setUseIAMCredentials((boolean) value); return true;
+            case "encryptionMaterials": getOrCreateConfiguration((AWS2S3Component) component).setEncryptionMaterials((software.amazon.awssdk.services.s3.model.Encryption) value); return true;
+            case "useEncryption": getOrCreateConfiguration((AWS2S3Component) component).setUseEncryption((boolean) value); return true;
+            case "bridgeErrorHandler": ((AWS2S3Component) component).setBridgeErrorHandler((boolean) value); return true;
+            case "deleteAfterRead": getOrCreateConfiguration((AWS2S3Component) component).setDeleteAfterRead((boolean) value); return true;
+            case "delimiter": getOrCreateConfiguration((AWS2S3Component) component).setDelimiter((java.lang.String) value); return true;
+            case "fileName": getOrCreateConfiguration((AWS2S3Component) component).setFileName((java.lang.String) value); return true;
+            case "includeBody": getOrCreateConfiguration((AWS2S3Component) component).setIncludeBody((boolean) value); return true;
+            case "prefix": getOrCreateConfiguration((AWS2S3Component) component).setPrefix((java.lang.String) value); return true;
+            case "autocloseBody": getOrCreateConfiguration((AWS2S3Component) component).setAutocloseBody((boolean) value); return true;
+            case "deleteAfterWrite": getOrCreateConfiguration((AWS2S3Component) component).setDeleteAfterWrite((boolean) value); return true;
+            case "keyName": getOrCreateConfiguration((AWS2S3Component) component).setKeyName((java.lang.String) value); return true;
+            case "lazyStartProducer": ((AWS2S3Component) component).setLazyStartProducer((boolean) value); return true;
+            case "multiPartUpload": getOrCreateConfiguration((AWS2S3Component) component).setMultiPartUpload((boolean) value); return true;
+            case "operation": getOrCreateConfiguration((AWS2S3Component) component).setOperation((org.apache.camel.component.aws2.s3.AWS2S3Operations) value); return true;
+            case "partSize": getOrCreateConfiguration((AWS2S3Component) component).setPartSize((long) value); return true;
+            case "serverSideEncryption": getOrCreateConfiguration((AWS2S3Component) component).setServerSideEncryption((java.lang.String) value); return true;
+            case "storageClass": getOrCreateConfiguration((AWS2S3Component) component).setStorageClass((java.lang.String) value); return true;
+            case "awsKMSKeyId": getOrCreateConfiguration((AWS2S3Component) component).setAwsKMSKeyId((java.lang.String) value); return true;
+            case "useAwsKMS": getOrCreateConfiguration((AWS2S3Component) component).setUseAwsKMS((boolean) value); return true;
+            case "accelerateModeEnabled": getOrCreateConfiguration((AWS2S3Component) component).setAccelerateModeEnabled((boolean) value); return true;
+            case "chunkedEncodingDisabled": getOrCreateConfiguration((AWS2S3Component) component).setChunkedEncodingDisabled((boolean) value); return true;
+            case "dualstackEnabled": getOrCreateConfiguration((AWS2S3Component) component).setDualstackEnabled((boolean) value); return true;
+            case "forceGlobalBucketAccessEnabled": getOrCreateConfiguration((AWS2S3Component) component).setForceGlobalBucketAccessEnabled((boolean) value); return true;
+            case "payloadSigningEnabled": getOrCreateConfiguration((AWS2S3Component) component).setPayloadSigningEnabled((boolean) value); return true;
+            case "basicPropertyBinding": ((AWS2S3Component) component).setBasicPropertyBinding((boolean) value); return true;
+            case "accessKey": getOrCreateConfiguration((AWS2S3Component) component).setAccessKey((java.lang.String) value); return true;
+            case "secretKey": getOrCreateConfiguration((AWS2S3Component) component).setSecretKey((java.lang.String) 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 26d83f1..bf3fc96 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -621,6 +621,26 @@
     "artifactId": "camel-aws2-msk",
     "version": "3.2.0-SNAPSHOT"
   },
+  "Aws2S3ComponentBuilderFactory": {
+    "kind": "component",
+    "scheme": "aws2-s3",
+    "extendsScheme": "",
+    "syntax": "aws2-s3:\/\/bucketNameOrArn",
+    "title": "AWS2 S3 Storage Service",
+    "description": "The aws-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.",
+    "label": "cloud,file",
+    "deprecated": false,
+    "deprecationNote": "cloud,file",
+    "async": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false,
+    "javaType": "org.apache.camel.component.aws2.s3.AWS2S3Component",
+    "firstVersion": "3.2.0",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws2-s3",
+    "version": "3.2.0-SNAPSHOT"
+  },
   "Aws2SesComponentBuilderFactory": {
     "kind": "component",
     "scheme": "aws2-ses",
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 1b52ae1..9927db2 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
@@ -31,6 +31,7 @@ public interface EndpointBuilderFactory
             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.ApnsEndpointBuilderFactory.ApnsBuilders,
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 23d192d..bac0929 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
@@ -28,6 +28,7 @@ public interface EndpointBuilders
             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.ApnsEndpointBuilderFactory,
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
new file mode 100644
index 0000000..e5aae95
--- /dev/null
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
@@ -0,0 +1,2494 @@
+/*
+ * 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;
+
+/**
+ * The aws-s3 component is used for storing and retrieving object from Amazon S3
+ * Storage Service.
+ * 
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
+public interface AWS2S3EndpointBuilderFactory {
+
+
+    /**
+     * Builder for endpoint consumers for the AWS2 S3 Storage Service component.
+     */
+    public interface AWS2S3EndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default AdvancedAWS2S3EndpointConsumerBuilder advanced() {
+            return (AdvancedAWS2S3EndpointConsumerBuilder) this;
+        }
+        /**
+         * Reference to a com.amazonaws.services.s3.AmazonS3 in the registry.
+         * 
+         * The option is a:
+         * <code>software.amazon.awssdk.services.s3.S3Client</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder amazonS3Client(
+                Object amazonS3Client) {
+            doSetProperty("amazonS3Client", amazonS3Client);
+            return this;
+        }
+        /**
+         * Reference to a com.amazonaws.services.s3.AmazonS3 in the registry.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.services.s3.S3Client</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder amazonS3Client(
+                String amazonS3Client) {
+            doSetProperty("amazonS3Client", amazonS3Client);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder autoCreateBucket(
+                boolean autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder autoCreateBucket(
+                String autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Whether or not the S3 client should use path style access.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder pathStyleAccess(
+                boolean pathStyleAccess) {
+            doSetProperty("pathStyleAccess", pathStyleAccess);
+            return this;
+        }
+        /**
+         * Whether or not the S3 client should use path style access.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder pathStyleAccess(
+                String pathStyleAccess) {
+            doSetProperty("pathStyleAccess", pathStyleAccess);
+            return this;
+        }
+        /**
+         * The policy for this queue to set in the
+         * com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder policy(String policy) {
+            doSetProperty("policy", policy);
+            return this;
+        }
+        /**
+         * To define a proxy host when instantiating the SQS client.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder proxyHost(String proxyHost) {
+            doSetProperty("proxyHost", proxyHost);
+            return this;
+        }
+        /**
+         * Specify a proxy port to be used inside the client definition.
+         * 
+         * The option is a: <code>java.lang.Integer</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder proxyPort(Integer proxyPort) {
+            doSetProperty("proxyPort", proxyPort);
+            return this;
+        }
+        /**
+         * Specify a proxy port to be used inside the client definition.
+         * 
+         * The option will be converted to a <code>java.lang.Integer</code>
+         * type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder proxyPort(String proxyPort) {
+            doSetProperty("proxyPort", proxyPort);
+            return this;
+        }
+        /**
+         * To define a proxy protocol when instantiating the S3 client.
+         * 
+         * The option is a: <code>software.amazon.awssdk.core.Protocol</code>
+         * type.
+         * 
+         * Default: HTTPS
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder proxyProtocol(
+                Protocol proxyProtocol) {
+            doSetProperty("proxyProtocol", proxyProtocol);
+            return this;
+        }
+        /**
+         * To define a proxy protocol when instantiating the S3 client.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.core.Protocol</code> type.
+         * 
+         * Default: HTTPS
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder proxyProtocol(String proxyProtocol) {
+            doSetProperty("proxyProtocol", proxyProtocol);
+            return this;
+        }
+        /**
+         * The region in which S3 client needs to work. When using this
+         * parameter, the configuration will expect the capitalized name of the
+         * region (for example AP_EAST_1) You'll need to use the name
+         * Regions.EU_WEST_1.name().
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder region(String region) {
+            doSetProperty("region", region);
+            return this;
+        }
+        /**
+         * Set whether the S3 client should expect to load credentials on an EC2
+         * instance or to expect static credentials to be passed in.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder useIAMCredentials(
+                boolean useIAMCredentials) {
+            doSetProperty("useIAMCredentials", useIAMCredentials);
+            return this;
+        }
+        /**
+         * Set whether the S3 client should expect to load credentials on an EC2
+         * instance or to expect static credentials to be passed in.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointConsumerBuilder useIAMCredentials(
+                String useIAMCredentials) {
+            doSetProperty("useIAMCredentials", useIAMCredentials);
+            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: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder deleteAfterRead(
+                String deleteAfterRead) {
+            doSetProperty("deleteAfterRead", deleteAfterRead);
+            return this;
+        }
+        /**
+         * The delimiter which is used in the
+         * com.amazonaws.services.s3.model.ListObjectsRequest to only consume
+         * objects we are interested in.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder delimiter(String delimiter) {
+            doSetProperty("delimiter", delimiter);
+            return this;
+        }
+        /**
+         * To get the object from the bucket with the given file name.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder fileName(String fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
+         * If it is true, the exchange body will be set to a stream to the
+         * contents of the file. If false, the headers will be set with the S3
+         * object metadata, but the body will be null. This option is strongly
+         * related to autocloseBody option. In case of setting includeBody to
+         * true and autocloseBody to false, it will be up to the caller to close
+         * the S3Object stream. Setting autocloseBody to true, will close the
+         * S3Object stream automatically.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder includeBody(boolean includeBody) {
+            doSetProperty("includeBody", includeBody);
+            return this;
+        }
+        /**
+         * If it is true, the exchange body will be set to a stream to the
+         * contents of the file. If false, the headers will be set with the S3
+         * object metadata, but the body will be null. This option is strongly
+         * related to autocloseBody option. In case of setting includeBody to
+         * true and autocloseBody to false, it will be up to the caller to close
+         * the S3Object stream. Setting autocloseBody to true, will close the
+         * S3Object stream automatically.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder includeBody(String includeBody) {
+            doSetProperty("includeBody", includeBody);
+            return this;
+        }
+        /**
+         * Set the maxConnections parameter in the S3 client configuration.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Default: 60
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder maxConnections(int maxConnections) {
+            doSetProperty("maxConnections", maxConnections);
+            return this;
+        }
+        /**
+         * Set the maxConnections parameter in the S3 client configuration.
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Default: 60
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder maxConnections(
+                String maxConnections) {
+            doSetProperty("maxConnections", maxConnections);
+            return this;
+        }
+        /**
+         * Gets the maximum number of messages as a limit to poll at each
+         * polling. Gets the maximum number of messages as a limit to poll at
+         * each polling. The default value is 10. Use 0 or a negative number to
+         * set it as unlimited.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Default: 10
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder maxMessagesPerPoll(
+                int maxMessagesPerPoll) {
+            doSetProperty("maxMessagesPerPoll", maxMessagesPerPoll);
+            return this;
+        }
+        /**
+         * Gets the maximum number of messages as a limit to poll at each
+         * polling. Gets the maximum number of messages as a limit to poll at
+         * each polling. The default value is 10. Use 0 or a negative number to
+         * set it as unlimited.
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Default: 10
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder maxMessagesPerPoll(
+                String maxMessagesPerPoll) {
+            doSetProperty("maxMessagesPerPoll", maxMessagesPerPoll);
+            return this;
+        }
+        /**
+         * The prefix which is used in the
+         * com.amazonaws.services.s3.model.ListObjectsRequest to only consume
+         * objects we are interested in.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder prefix(String prefix) {
+            doSetProperty("prefix", prefix);
+            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: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>int</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>int</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>int</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>int</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>int</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>int</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder backoffMultiplier(
+                String backoffMultiplier) {
+            doSetProperty("backoffMultiplier", backoffMultiplier);
+            return this;
+        }
+        /**
+         * Milliseconds before the next poll. You can also specify time values
+         * using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
+         * seconds), and 1h (1 hour).
+         * 
+         * The option is a: <code>long</code> type.
+         * 
+         * Default: 500
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder delay(long delay) {
+            doSetProperty("delay", delay);
+            return this;
+        }
+        /**
+         * Milliseconds before the next poll. You can also specify time values
+         * using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
+         * seconds), and 1h (1 hour).
+         * 
+         * The option will be converted to a <code>long</code> type.
+         * 
+         * Default: 500
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder greedy(String greedy) {
+            doSetProperty("greedy", greedy);
+            return this;
+        }
+        /**
+         * Milliseconds before the first poll starts. You can also specify time
+         * values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
+         * seconds), and 1h (1 hour).
+         * 
+         * The option is a: <code>long</code> type.
+         * 
+         * Default: 1000
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder initialDelay(long initialDelay) {
+            doSetProperty("initialDelay", initialDelay);
+            return this;
+        }
+        /**
+         * Milliseconds before the first poll starts. You can also specify time
+         * values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
+         * seconds), and 1h (1 hour).
+         * 
+         * The option will be converted to a <code>long</code> type.
+         * 
+         * Default: 1000
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>long</code> type.
+         * 
+         * Default: 0
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>long</code> type.
+         * 
+         * Default: 0
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>org.apache.camel.LoggingLevel</code> type.
+         * 
+         * Default: TRACE
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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
+         * <code>org.apache.camel.LoggingLevel</code> type.
+         * 
+         * Default: TRACE
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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:
+         * <code>java.util.concurrent.ScheduledExecutorService</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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
+         * <code>java.util.concurrent.ScheduledExecutorService</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder scheduledExecutorService(
+                String scheduledExecutorService) {
+            doSetProperty("scheduledExecutorService", scheduledExecutorService);
+            return this;
+        }
+        /**
+         * To use a cron scheduler from either camel-spring or camel-quartz
+         * component.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Default: none
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder schedulerProperties(
+                Map<String, Object> schedulerProperties) {
+            doSetProperty("schedulerProperties", schedulerProperties);
+            return this;
+        }
+        /**
+         * To configure additional properties when using a custom scheduler or
+         * any of the Quartz, Spring based scheduler.
+         * 
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
+         * 
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder schedulerProperties(
+                String schedulerProperties) {
+            doSetProperty("schedulerProperties", schedulerProperties);
+            return this;
+        }
+        /**
+         * Whether the scheduler should be auto started.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder startScheduler(
+                boolean startScheduler) {
+            doSetProperty("startScheduler", startScheduler);
+            return this;
+        }
+        /**
+         * Whether the scheduler should be auto started.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder startScheduler(
+                String startScheduler) {
+            doSetProperty("startScheduler", startScheduler);
+            return this;
+        }
+        /**
+         * Time unit for initialDelay and delay options.
+         * 
+         * The option is a: <code>java.util.concurrent.TimeUnit</code> type.
+         * 
+         * Default: MILLISECONDS
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder timeUnit(TimeUnit timeUnit) {
+            doSetProperty("timeUnit", timeUnit);
+            return this;
+        }
+        /**
+         * Time unit for initialDelay and delay options.
+         * 
+         * The option will be converted to a
+         * <code>java.util.concurrent.TimeUnit</code> type.
+         * 
+         * Default: MILLISECONDS
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder 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 <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: scheduler
+         */
+        default AWS2S3EndpointConsumerBuilder useFixedDelay(String useFixedDelay) {
+            doSetProperty("useFixedDelay", useFixedDelay);
+            return this;
+        }
+        /**
+         * Amazon AWS Access Key.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default AWS2S3EndpointConsumerBuilder accessKey(String accessKey) {
+            doSetProperty("accessKey", accessKey);
+            return this;
+        }
+        /**
+         * Amazon AWS Secret Key.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default AWS2S3EndpointConsumerBuilder secretKey(String secretKey) {
+            doSetProperty("secretKey", secretKey);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint consumers for the AWS2 S3 Storage Service
+     * component.
+     */
+    public interface AdvancedAWS2S3EndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default AWS2S3EndpointConsumerBuilder basic() {
+            return (AWS2S3EndpointConsumerBuilder) this;
+        }
+        /**
+         * The encryption materials to use in case of Symmetric/Asymmetric
+         * client usage.
+         * 
+         * The option is a:
+         * <code>software.amazon.awssdk.services.s3.model.Encryption</code>
+         * type.
+         * 
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder encryptionMaterials(
+                Object encryptionMaterials) {
+            doSetProperty("encryptionMaterials", encryptionMaterials);
+            return this;
+        }
+        /**
+         * The encryption materials to use in case of Symmetric/Asymmetric
+         * client usage.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.services.s3.model.Encryption</code>
+         * type.
+         * 
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder encryptionMaterials(
+                String encryptionMaterials) {
+            doSetProperty("encryptionMaterials", encryptionMaterials);
+            return this;
+        }
+        /**
+         * Define if encryption must be used or not.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder useEncryption(
+                boolean useEncryption) {
+            doSetProperty("useEncryption", useEncryption);
+            return this;
+        }
+        /**
+         * Define if encryption must be used or not.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder useEncryption(
+                String useEncryption) {
+            doSetProperty("useEncryption", useEncryption);
+            return this;
+        }
+        /**
+         * If this option is true and includeBody is true, then the
+         * S3Object.close() method will be called on exchange completion. This
+         * option is strongly related to includeBody option. In case of setting
+         * includeBody to true and autocloseBody to false, it will be up to the
+         * caller to close the S3Object stream. Setting autocloseBody to true,
+         * will close the S3Object stream automatically.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder autocloseBody(
+                boolean autocloseBody) {
+            doSetProperty("autocloseBody", autocloseBody);
+            return this;
+        }
+        /**
+         * If this option is true and includeBody is true, then the
+         * S3Object.close() method will be called on exchange completion. This
+         * option is strongly related to includeBody option. In case of setting
+         * includeBody to true and autocloseBody to false, it will be up to the
+         * caller to close the S3Object stream. Setting autocloseBody to true,
+         * will close the S3Object stream automatically.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder autocloseBody(
+                String autocloseBody) {
+            doSetProperty("autocloseBody", autocloseBody);
+            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 is a: <code>org.apache.camel.spi.ExceptionHandler</code>
+         * type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder 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
+         * <code>org.apache.camel.spi.ExceptionHandler</code> type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder exceptionHandler(
+                String exceptionHandler) {
+            doSetProperty("exceptionHandler", exceptionHandler);
+            return this;
+        }
+        /**
+         * Sets the exchange pattern when the consumer creates an exchange.
+         * 
+         * The option is a: <code>org.apache.camel.ExchangePattern</code> type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder 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
+         * <code>org.apache.camel.ExchangePattern</code> type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder 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:
+         * <code>org.apache.camel.spi.PollingConsumerPollStrategy</code> type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder 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
+         * <code>org.apache.camel.spi.PollingConsumerPollStrategy</code> type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder pollStrategy(
+                String pollStrategy) {
+            doSetProperty("pollStrategy", pollStrategy);
+            return this;
+        }
+        /**
+         * Define if Accelerate Mode enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder accelerateModeEnabled(
+                boolean accelerateModeEnabled) {
+            doSetProperty("accelerateModeEnabled", accelerateModeEnabled);
+            return this;
+        }
+        /**
+         * Define if Accelerate Mode enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder accelerateModeEnabled(
+                String accelerateModeEnabled) {
+            doSetProperty("accelerateModeEnabled", accelerateModeEnabled);
+            return this;
+        }
+        /**
+         * Define if disabled Chunked Encoding is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder chunkedEncodingDisabled(
+                boolean chunkedEncodingDisabled) {
+            doSetProperty("chunkedEncodingDisabled", chunkedEncodingDisabled);
+            return this;
+        }
+        /**
+         * Define if disabled Chunked Encoding is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder chunkedEncodingDisabled(
+                String chunkedEncodingDisabled) {
+            doSetProperty("chunkedEncodingDisabled", chunkedEncodingDisabled);
+            return this;
+        }
+        /**
+         * Define if Dualstack enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder dualstackEnabled(
+                boolean dualstackEnabled) {
+            doSetProperty("dualstackEnabled", dualstackEnabled);
+            return this;
+        }
+        /**
+         * Define if Dualstack enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder dualstackEnabled(
+                String dualstackEnabled) {
+            doSetProperty("dualstackEnabled", dualstackEnabled);
+            return this;
+        }
+        /**
+         * Define if Force Global Bucket Access enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder forceGlobalBucketAccessEnabled(
+                boolean forceGlobalBucketAccessEnabled) {
+            doSetProperty("forceGlobalBucketAccessEnabled", forceGlobalBucketAccessEnabled);
+            return this;
+        }
+        /**
+         * Define if Force Global Bucket Access enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder forceGlobalBucketAccessEnabled(
+                String forceGlobalBucketAccessEnabled) {
+            doSetProperty("forceGlobalBucketAccessEnabled", forceGlobalBucketAccessEnabled);
+            return this;
+        }
+        /**
+         * Define if Payload Signing enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder payloadSigningEnabled(
+                boolean payloadSigningEnabled) {
+            doSetProperty("payloadSigningEnabled", payloadSigningEnabled);
+            return this;
+        }
+        /**
+         * Define if Payload Signing enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder payloadSigningEnabled(
+                String payloadSigningEnabled) {
+            doSetProperty("payloadSigningEnabled", payloadSigningEnabled);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder synchronous(
+                boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointConsumerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+    }
+
+    /**
+     * Builder for endpoint producers for the AWS2 S3 Storage Service component.
+     */
+    public interface AWS2S3EndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default AdvancedAWS2S3EndpointProducerBuilder advanced() {
+            return (AdvancedAWS2S3EndpointProducerBuilder) this;
+        }
+        /**
+         * Reference to a com.amazonaws.services.s3.AmazonS3 in the registry.
+         * 
+         * The option is a:
+         * <code>software.amazon.awssdk.services.s3.S3Client</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder amazonS3Client(
+                Object amazonS3Client) {
+            doSetProperty("amazonS3Client", amazonS3Client);
+            return this;
+        }
+        /**
+         * Reference to a com.amazonaws.services.s3.AmazonS3 in the registry.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.services.s3.S3Client</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder amazonS3Client(
+                String amazonS3Client) {
+            doSetProperty("amazonS3Client", amazonS3Client);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder autoCreateBucket(
+                boolean autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder autoCreateBucket(
+                String autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Whether or not the S3 client should use path style access.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder pathStyleAccess(
+                boolean pathStyleAccess) {
+            doSetProperty("pathStyleAccess", pathStyleAccess);
+            return this;
+        }
+        /**
+         * Whether or not the S3 client should use path style access.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder pathStyleAccess(
+                String pathStyleAccess) {
+            doSetProperty("pathStyleAccess", pathStyleAccess);
+            return this;
+        }
+        /**
+         * The policy for this queue to set in the
+         * com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder policy(String policy) {
+            doSetProperty("policy", policy);
+            return this;
+        }
+        /**
+         * To define a proxy host when instantiating the SQS client.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder proxyHost(String proxyHost) {
+            doSetProperty("proxyHost", proxyHost);
+            return this;
+        }
+        /**
+         * Specify a proxy port to be used inside the client definition.
+         * 
+         * The option is a: <code>java.lang.Integer</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder proxyPort(Integer proxyPort) {
+            doSetProperty("proxyPort", proxyPort);
+            return this;
+        }
+        /**
+         * Specify a proxy port to be used inside the client definition.
+         * 
+         * The option will be converted to a <code>java.lang.Integer</code>
+         * type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder proxyPort(String proxyPort) {
+            doSetProperty("proxyPort", proxyPort);
+            return this;
+        }
+        /**
+         * To define a proxy protocol when instantiating the S3 client.
+         * 
+         * The option is a: <code>software.amazon.awssdk.core.Protocol</code>
+         * type.
+         * 
+         * Default: HTTPS
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder proxyProtocol(
+                Protocol proxyProtocol) {
+            doSetProperty("proxyProtocol", proxyProtocol);
+            return this;
+        }
+        /**
+         * To define a proxy protocol when instantiating the S3 client.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.core.Protocol</code> type.
+         * 
+         * Default: HTTPS
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder proxyProtocol(String proxyProtocol) {
+            doSetProperty("proxyProtocol", proxyProtocol);
+            return this;
+        }
+        /**
+         * The region in which S3 client needs to work. When using this
+         * parameter, the configuration will expect the capitalized name of the
+         * region (for example AP_EAST_1) You'll need to use the name
+         * Regions.EU_WEST_1.name().
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder region(String region) {
+            doSetProperty("region", region);
+            return this;
+        }
+        /**
+         * Set whether the S3 client should expect to load credentials on an EC2
+         * instance or to expect static credentials to be passed in.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder useIAMCredentials(
+                boolean useIAMCredentials) {
+            doSetProperty("useIAMCredentials", useIAMCredentials);
+            return this;
+        }
+        /**
+         * Set whether the S3 client should expect to load credentials on an EC2
+         * instance or to expect static credentials to be passed in.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointProducerBuilder useIAMCredentials(
+                String useIAMCredentials) {
+            doSetProperty("useIAMCredentials", useIAMCredentials);
+            return this;
+        }
+        /**
+         * Delete file object after the S3 file has been uploaded.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder deleteAfterWrite(
+                boolean deleteAfterWrite) {
+            doSetProperty("deleteAfterWrite", deleteAfterWrite);
+            return this;
+        }
+        /**
+         * Delete file object after the S3 file has been uploaded.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder deleteAfterWrite(
+                String deleteAfterWrite) {
+            doSetProperty("deleteAfterWrite", deleteAfterWrite);
+            return this;
+        }
+        /**
+         * Setting the key name for an element in the bucket through endpoint
+         * parameter.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder keyName(String keyName) {
+            doSetProperty("keyName", keyName);
+            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: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder 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 <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder lazyStartProducer(
+                String lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * If it is true, camel will upload the file with multi part format, the
+         * part size is decided by the option of partSize.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder multiPartUpload(
+                boolean multiPartUpload) {
+            doSetProperty("multiPartUpload", multiPartUpload);
+            return this;
+        }
+        /**
+         * If it is true, camel will upload the file with multi part format, the
+         * part size is decided by the option of partSize.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder multiPartUpload(
+                String multiPartUpload) {
+            doSetProperty("multiPartUpload", multiPartUpload);
+            return this;
+        }
+        /**
+         * The operation to do in case the user don't want to do only an upload.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.aws2.s3.AWS2S3Operations</code>
+         * type.
+         * 
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder operation(
+                AWS2S3Operations operation) {
+            doSetProperty("operation", operation);
+            return this;
+        }
+        /**
+         * The operation to do in case the user don't want to do only an upload.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.component.aws2.s3.AWS2S3Operations</code>
+         * type.
+         * 
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder operation(String operation) {
+            doSetProperty("operation", operation);
+            return this;
+        }
+        /**
+         * Setup the partSize which is used in multi part upload, the default
+         * size is 25M.
+         * 
+         * The option is a: <code>long</code> type.
+         * 
+         * Default: 26214400
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder partSize(long partSize) {
+            doSetProperty("partSize", partSize);
+            return this;
+        }
+        /**
+         * Setup the partSize which is used in multi part upload, the default
+         * size is 25M.
+         * 
+         * The option will be converted to a <code>long</code> type.
+         * 
+         * Default: 26214400
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder partSize(String partSize) {
+            doSetProperty("partSize", partSize);
+            return this;
+        }
+        /**
+         * Sets the server-side encryption algorithm when encrypting the object
+         * using AWS-managed keys. For example use AES256.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder serverSideEncryption(
+                String serverSideEncryption) {
+            doSetProperty("serverSideEncryption", serverSideEncryption);
+            return this;
+        }
+        /**
+         * The storage class to set in the
+         * com.amazonaws.services.s3.model.PutObjectRequest request.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer
+         */
+        default AWS2S3EndpointProducerBuilder storageClass(String storageClass) {
+            doSetProperty("storageClass", storageClass);
+            return this;
+        }
+        /**
+         * Amazon AWS Access Key.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default AWS2S3EndpointProducerBuilder accessKey(String accessKey) {
+            doSetProperty("accessKey", accessKey);
+            return this;
+        }
+        /**
+         * Amazon AWS Secret Key.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default AWS2S3EndpointProducerBuilder secretKey(String secretKey) {
+            doSetProperty("secretKey", secretKey);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint producers for the AWS2 S3 Storage Service
+     * component.
+     */
+    public interface AdvancedAWS2S3EndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default AWS2S3EndpointProducerBuilder basic() {
+            return (AWS2S3EndpointProducerBuilder) this;
+        }
+        /**
+         * The encryption materials to use in case of Symmetric/Asymmetric
+         * client usage.
+         * 
+         * The option is a:
+         * <code>software.amazon.awssdk.services.s3.model.Encryption</code>
+         * type.
+         * 
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder encryptionMaterials(
+                Object encryptionMaterials) {
+            doSetProperty("encryptionMaterials", encryptionMaterials);
+            return this;
+        }
+        /**
+         * The encryption materials to use in case of Symmetric/Asymmetric
+         * client usage.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.services.s3.model.Encryption</code>
+         * type.
+         * 
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder encryptionMaterials(
+                String encryptionMaterials) {
+            doSetProperty("encryptionMaterials", encryptionMaterials);
+            return this;
+        }
+        /**
+         * Define if encryption must be used or not.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder useEncryption(
+                boolean useEncryption) {
+            doSetProperty("useEncryption", useEncryption);
+            return this;
+        }
+        /**
+         * Define if encryption must be used or not.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder useEncryption(
+                String useEncryption) {
+            doSetProperty("useEncryption", useEncryption);
+            return this;
+        }
+        /**
+         * Define the id of KMS key to use in case KMS is enabled.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer (advanced)
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder awsKMSKeyId(
+                String awsKMSKeyId) {
+            doSetProperty("awsKMSKeyId", awsKMSKeyId);
+            return this;
+        }
+        /**
+         * Define if KMS must be used or not.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder useAwsKMS(
+                boolean useAwsKMS) {
+            doSetProperty("useAwsKMS", useAwsKMS);
+            return this;
+        }
+        /**
+         * Define if KMS must be used or not.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder useAwsKMS(String useAwsKMS) {
+            doSetProperty("useAwsKMS", useAwsKMS);
+            return this;
+        }
+        /**
+         * Define if Accelerate Mode enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder accelerateModeEnabled(
+                boolean accelerateModeEnabled) {
+            doSetProperty("accelerateModeEnabled", accelerateModeEnabled);
+            return this;
+        }
+        /**
+         * Define if Accelerate Mode enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder accelerateModeEnabled(
+                String accelerateModeEnabled) {
+            doSetProperty("accelerateModeEnabled", accelerateModeEnabled);
+            return this;
+        }
+        /**
+         * Define if disabled Chunked Encoding is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder chunkedEncodingDisabled(
+                boolean chunkedEncodingDisabled) {
+            doSetProperty("chunkedEncodingDisabled", chunkedEncodingDisabled);
+            return this;
+        }
+        /**
+         * Define if disabled Chunked Encoding is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder chunkedEncodingDisabled(
+                String chunkedEncodingDisabled) {
+            doSetProperty("chunkedEncodingDisabled", chunkedEncodingDisabled);
+            return this;
+        }
+        /**
+         * Define if Dualstack enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder dualstackEnabled(
+                boolean dualstackEnabled) {
+            doSetProperty("dualstackEnabled", dualstackEnabled);
+            return this;
+        }
+        /**
+         * Define if Dualstack enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder dualstackEnabled(
+                String dualstackEnabled) {
+            doSetProperty("dualstackEnabled", dualstackEnabled);
+            return this;
+        }
+        /**
+         * Define if Force Global Bucket Access enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder forceGlobalBucketAccessEnabled(
+                boolean forceGlobalBucketAccessEnabled) {
+            doSetProperty("forceGlobalBucketAccessEnabled", forceGlobalBucketAccessEnabled);
+            return this;
+        }
+        /**
+         * Define if Force Global Bucket Access enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder forceGlobalBucketAccessEnabled(
+                String forceGlobalBucketAccessEnabled) {
+            doSetProperty("forceGlobalBucketAccessEnabled", forceGlobalBucketAccessEnabled);
+            return this;
+        }
+        /**
+         * Define if Payload Signing enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder payloadSigningEnabled(
+                boolean payloadSigningEnabled) {
+            doSetProperty("payloadSigningEnabled", payloadSigningEnabled);
+            return this;
+        }
+        /**
+         * Define if Payload Signing enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder payloadSigningEnabled(
+                String payloadSigningEnabled) {
+            doSetProperty("payloadSigningEnabled", payloadSigningEnabled);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder synchronous(
+                boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointProducerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+    }
+
+    /**
+     * Builder for endpoint for the AWS2 S3 Storage Service component.
+     */
+    public interface AWS2S3EndpointBuilder
+            extends
+                AWS2S3EndpointConsumerBuilder,
+                AWS2S3EndpointProducerBuilder {
+        default AdvancedAWS2S3EndpointBuilder advanced() {
+            return (AdvancedAWS2S3EndpointBuilder) this;
+        }
+        /**
+         * Reference to a com.amazonaws.services.s3.AmazonS3 in the registry.
+         * 
+         * The option is a:
+         * <code>software.amazon.awssdk.services.s3.S3Client</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder amazonS3Client(Object amazonS3Client) {
+            doSetProperty("amazonS3Client", amazonS3Client);
+            return this;
+        }
+        /**
+         * Reference to a com.amazonaws.services.s3.AmazonS3 in the registry.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.services.s3.S3Client</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder amazonS3Client(String amazonS3Client) {
+            doSetProperty("amazonS3Client", amazonS3Client);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder autoCreateBucket(boolean autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Setting the autocreation of the bucket.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder autoCreateBucket(String autoCreateBucket) {
+            doSetProperty("autoCreateBucket", autoCreateBucket);
+            return this;
+        }
+        /**
+         * Whether or not the S3 client should use path style access.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder pathStyleAccess(boolean pathStyleAccess) {
+            doSetProperty("pathStyleAccess", pathStyleAccess);
+            return this;
+        }
+        /**
+         * Whether or not the S3 client should use path style access.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder pathStyleAccess(String pathStyleAccess) {
+            doSetProperty("pathStyleAccess", pathStyleAccess);
+            return this;
+        }
+        /**
+         * The policy for this queue to set in the
+         * com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder policy(String policy) {
+            doSetProperty("policy", policy);
+            return this;
+        }
+        /**
+         * To define a proxy host when instantiating the SQS client.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder proxyHost(String proxyHost) {
+            doSetProperty("proxyHost", proxyHost);
+            return this;
+        }
+        /**
+         * Specify a proxy port to be used inside the client definition.
+         * 
+         * The option is a: <code>java.lang.Integer</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder proxyPort(Integer proxyPort) {
+            doSetProperty("proxyPort", proxyPort);
+            return this;
+        }
+        /**
+         * Specify a proxy port to be used inside the client definition.
+         * 
+         * The option will be converted to a <code>java.lang.Integer</code>
+         * type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder proxyPort(String proxyPort) {
+            doSetProperty("proxyPort", proxyPort);
+            return this;
+        }
+        /**
+         * To define a proxy protocol when instantiating the S3 client.
+         * 
+         * The option is a: <code>software.amazon.awssdk.core.Protocol</code>
+         * type.
+         * 
+         * Default: HTTPS
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder proxyProtocol(Protocol proxyProtocol) {
+            doSetProperty("proxyProtocol", proxyProtocol);
+            return this;
+        }
+        /**
+         * To define a proxy protocol when instantiating the S3 client.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.core.Protocol</code> type.
+         * 
+         * Default: HTTPS
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder proxyProtocol(String proxyProtocol) {
+            doSetProperty("proxyProtocol", proxyProtocol);
+            return this;
+        }
+        /**
+         * The region in which S3 client needs to work. When using this
+         * parameter, the configuration will expect the capitalized name of the
+         * region (for example AP_EAST_1) You'll need to use the name
+         * Regions.EU_WEST_1.name().
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder region(String region) {
+            doSetProperty("region", region);
+            return this;
+        }
+        /**
+         * Set whether the S3 client should expect to load credentials on an EC2
+         * instance or to expect static credentials to be passed in.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder useIAMCredentials(
+                boolean useIAMCredentials) {
+            doSetProperty("useIAMCredentials", useIAMCredentials);
+            return this;
+        }
+        /**
+         * Set whether the S3 client should expect to load credentials on an EC2
+         * instance or to expect static credentials to be passed in.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default AWS2S3EndpointBuilder useIAMCredentials(String useIAMCredentials) {
+            doSetProperty("useIAMCredentials", useIAMCredentials);
+            return this;
+        }
+        /**
+         * Amazon AWS Access Key.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default AWS2S3EndpointBuilder accessKey(String accessKey) {
+            doSetProperty("accessKey", accessKey);
+            return this;
+        }
+        /**
+         * Amazon AWS Secret Key.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default AWS2S3EndpointBuilder secretKey(String secretKey) {
+            doSetProperty("secretKey", secretKey);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint for the AWS2 S3 Storage Service component.
+     */
+    public interface AdvancedAWS2S3EndpointBuilder
+            extends
+                AdvancedAWS2S3EndpointConsumerBuilder,
+                AdvancedAWS2S3EndpointProducerBuilder {
+        default AWS2S3EndpointBuilder basic() {
+            return (AWS2S3EndpointBuilder) this;
+        }
+        /**
+         * The encryption materials to use in case of Symmetric/Asymmetric
+         * client usage.
+         * 
+         * The option is a:
+         * <code>software.amazon.awssdk.services.s3.model.Encryption</code>
+         * type.
+         * 
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointBuilder encryptionMaterials(
+                Object encryptionMaterials) {
+            doSetProperty("encryptionMaterials", encryptionMaterials);
+            return this;
+        }
+        /**
+         * The encryption materials to use in case of Symmetric/Asymmetric
+         * client usage.
+         * 
+         * The option will be converted to a
+         * <code>software.amazon.awssdk.services.s3.model.Encryption</code>
+         * type.
+         * 
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointBuilder encryptionMaterials(
+                String encryptionMaterials) {
+            doSetProperty("encryptionMaterials", encryptionMaterials);
+            return this;
+        }
+        /**
+         * Define if encryption must be used or not.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointBuilder useEncryption(
+                boolean useEncryption) {
+            doSetProperty("useEncryption", useEncryption);
+            return this;
+        }
+        /**
+         * Define if encryption must be used or not.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedAWS2S3EndpointBuilder useEncryption(String useEncryption) {
+            doSetProperty("useEncryption", useEncryption);
+            return this;
+        }
+        /**
+         * Define if Accelerate Mode enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder accelerateModeEnabled(
+                boolean accelerateModeEnabled) {
+            doSetProperty("accelerateModeEnabled", accelerateModeEnabled);
+            return this;
+        }
+        /**
+         * Define if Accelerate Mode enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder accelerateModeEnabled(
+                String accelerateModeEnabled) {
+            doSetProperty("accelerateModeEnabled", accelerateModeEnabled);
+            return this;
+        }
+        /**
+         * Define if disabled Chunked Encoding is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder chunkedEncodingDisabled(
+                boolean chunkedEncodingDisabled) {
+            doSetProperty("chunkedEncodingDisabled", chunkedEncodingDisabled);
+            return this;
+        }
+        /**
+         * Define if disabled Chunked Encoding is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder chunkedEncodingDisabled(
+                String chunkedEncodingDisabled) {
+            doSetProperty("chunkedEncodingDisabled", chunkedEncodingDisabled);
+            return this;
+        }
+        /**
+         * Define if Dualstack enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder dualstackEnabled(
+                boolean dualstackEnabled) {
+            doSetProperty("dualstackEnabled", dualstackEnabled);
+            return this;
+        }
+        /**
+         * Define if Dualstack enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder dualstackEnabled(
+                String dualstackEnabled) {
+            doSetProperty("dualstackEnabled", dualstackEnabled);
+            return this;
+        }
+        /**
+         * Define if Force Global Bucket Access enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder forceGlobalBucketAccessEnabled(
+                boolean forceGlobalBucketAccessEnabled) {
+            doSetProperty("forceGlobalBucketAccessEnabled", forceGlobalBucketAccessEnabled);
+            return this;
+        }
+        /**
+         * Define if Force Global Bucket Access enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder forceGlobalBucketAccessEnabled(
+                String forceGlobalBucketAccessEnabled) {
+            doSetProperty("forceGlobalBucketAccessEnabled", forceGlobalBucketAccessEnabled);
+            return this;
+        }
+        /**
+         * Define if Payload Signing enabled is true or false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder payloadSigningEnabled(
+                boolean payloadSigningEnabled) {
+            doSetProperty("payloadSigningEnabled", payloadSigningEnabled);
+            return this;
+        }
+        /**
+         * Define if Payload Signing enabled is true or false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group:  advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder payloadSigningEnabled(
+                String payloadSigningEnabled) {
+            doSetProperty("payloadSigningEnabled", payloadSigningEnabled);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder synchronous(boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedAWS2S3EndpointBuilder synchronous(String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+    }
+
+    /**
+     * Proxy enum for <code>software.amazon.awssdk.core.Protocol</code> enum.
+     */
+    enum Protocol {
+        HTTP,
+        HTTPS;
+    }
+
+    /**
+     * Proxy enum for
+     * <code>org.apache.camel.component.aws2.s3.AWS2S3Operations</code> enum.
+     */
+    enum AWS2S3Operations {
+        copyObject,
+        listObjects,
+        deleteObject,
+        deleteBucket,
+        listBuckets,
+        downloadLink,
+        getObject,
+        getObjectRange;
+    }
+
+    public interface AWS2S3Builders {
+        /**
+         * AWS2 S3 Storage Service (camel-aws2-s3)
+         * The aws-s3 component is used for storing and retrieving object from
+         * Amazon S3 Storage Service.
+         * 
+         * Category: cloud,file
+         * Since: 3.2
+         * Maven coordinates: org.apache.camel:camel-aws2-s3
+         * 
+         * Syntax: <code>aws2-s3://bucketNameOrArn</code>
+         * 
+         * Path parameter: bucketNameOrArn (required)
+         * Bucket name or ARN
+         */
+        default AWS2S3EndpointBuilder aws2S3(String path) {
+            return AWS2S3EndpointBuilderFactory.aws2S3(path);
+        }
+    }
+    /**
+     * AWS2 S3 Storage Service (camel-aws2-s3)
+     * The aws-s3 component is used for storing and retrieving object from
+     * Amazon S3 Storage Service.
+     * 
+     * Category: cloud,file
+     * Since: 3.2
+     * Maven coordinates: org.apache.camel:camel-aws2-s3
+     * 
+     * Syntax: <code>aws2-s3://bucketNameOrArn</code>
+     * 
+     * Path parameter: bucketNameOrArn (required)
+     * Bucket name or ARN
+     */
+    static AWS2S3EndpointBuilder aws2S3(String path) {
+        class AWS2S3EndpointBuilderImpl extends AbstractEndpointBuilder implements AWS2S3EndpointBuilder, AdvancedAWS2S3EndpointBuilder {
+            public AWS2S3EndpointBuilderImpl(String path) {
+                super("aws2-s3", path);
+            }
+        }
+        return new AWS2S3EndpointBuilderImpl(path);
+    }
+}
\ No newline at end of file


[camel] 14/14: 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 057cb6ae14647f11b4ffa1f5733e03c00212de57
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 10:58:49 2020 +0100

    Regen docs
---
 docs/components/modules/ROOT/nav.adoc                     | 1 -
 docs/components/modules/ROOT/pages/aws2-s3-component.adoc | 8 ++++----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index 9c4258b..a076f6a 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -57,7 +57,6 @@
 * xref:aws2-mq-component.adoc[AWS 2 MQ Component]
 * xref:aws2-msk-component.adoc[AWS 2 MSK Component]
 * xref:aws2-s3-component.adoc[AWS2 S3 Storage Service Component]
-* xref:aws2-s3-component.adoc[AWS2 S3 Storage Service Component]
 * xref:aws2-ses-component.adoc[AWS 2 Simple Email Service Component]
 * xref:aws2-sns-component.adoc[AWS 2 Simple Notification System Component]
 * xref:aws2-sqs-component.adoc[AWS 2 Simple Queue Service Component]
diff --git a/docs/components/modules/ROOT/pages/aws2-s3-component.adoc b/docs/components/modules/ROOT/pages/aws2-s3-component.adoc
index 0e9607b..a0cf2b0 100644
--- a/docs/components/modules/ROOT/pages/aws2-s3-component.adoc
+++ b/docs/components/modules/ROOT/pages/aws2-s3-component.adoc
@@ -1,6 +1,6 @@
 [[aws2-s3-component]]
 = AWS2 S3 Storage Service Component
-:page-source: components/camel-aws2-s3/bin/src/main/docs/aws2-s3-component.adoc
+:page-source: components/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
 
 *Since Camel 3.2*
 
@@ -59,7 +59,7 @@ The AWS2 S3 Storage Service component supports 37 options, which are listed belo
 | *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
 | *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
 | *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
-| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
 | *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
 | *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | Encryption
 | *useEncryption* (common) | Define if encryption must be used or not | false | boolean
@@ -133,7 +133,7 @@ with the following path and query parameters:
 | *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
 | *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
 | *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
-| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
 | *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
 | *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | Encryption
 | *useEncryption* (common) | Define if encryption must be used or not | false | boolean
@@ -526,4 +526,4 @@ Maven users will need to add the following dependency to their pom.xml.
 where `$\{camel-version\}` must be replaced by the actual version of Camel.
 
 
-include::camel-spring-boot::page$aws-s3-starter.adoc[]
\ No newline at end of file
+include::camel-spring-boot::page$aws2-s3-starter.adoc[]


[camel] 02/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, 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 08be2c9951ff1667e28055534f86e5dc7e449be3
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 08:27:52 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, docs
---
 .../src/main/docs/aws-s3-component.adoc            | 541 ---------------------
 1 file changed, 541 deletions(-)

diff --git a/components/camel-aws2-s3/src/main/docs/aws-s3-component.adoc b/components/camel-aws2-s3/src/main/docs/aws-s3-component.adoc
deleted file mode 100644
index 6ce409d..0000000
--- a/components/camel-aws2-s3/src/main/docs/aws-s3-component.adoc
+++ /dev/null
@@ -1,541 +0,0 @@
-[[aws-s3-component]]
-= AWS S3 Storage Service Component
-
-*Since Camel 2.8*
-
-// HEADER START
-*Both producer and consumer is supported*
-// HEADER END
-
-The S3 component supports storing and retrieving objects from/to
-https://aws.amazon.com/s3[Amazon's S3] service.
-
-Prerequisites
-
-You must have a valid Amazon Web Services developer account, and be
-signed up to use Amazon S3. More information is available at
-https://aws.amazon.com/s3[Amazon S3].
-
-== URI Format
-
-[source,java]
-------------------------------
-aws-s3://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("aws-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt")
-  .to("file:/var/downloaded");
---------------------------------------------------------------------------------
-
-
-== URI Options
-
-
-// component options: START
-The AWS S3 Storage Service component supports 37 options, which are listed below.
-
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *amazonS3Client* (common) | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. |  | AmazonS3
-| *autoCreateBucket* (common) | Setting the autocreation of the bucket | true | boolean
-| *configuration* (common) | The component configuration |  | S3Configuration
-| *pathStyleAccess* (common) | Whether or not the S3 client should use path style access | false | boolean
-| *policy* (common) | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
-| *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
-| *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
-| *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
-| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
-| *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
-| *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | EncryptionMaterials
-| *useEncryption* (common) | Define if encryption must be used or not | false | boolean
-| *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 S3Constants#BUCKET_NAME and S3Constants#KEY headers, or only the S3Constants#KEY [...]
-| *delimiter* (consumer) | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
-| *fileName* (consumer) | To get the object from the bucket with the given file name |  | String
-| *includeBody* (consumer) | If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
-| *prefix* (consumer) | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
-| *autocloseBody* (consumer) | If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
-| *deleteAfterWrite* (producer) | Delete file object after the S3 file has been uploaded | false | boolean
-| *keyName* (producer) | Setting the key name for an element in the bucket through endpoint parameter |  | String
-| *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 [...]
-| *multiPartUpload* (producer) | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | boolean
-| *operation* (producer) | The operation to do in case the user don't want to do only an upload. The value can be one of: copyObject, deleteBucket, listBuckets, downloadLink |  | S3Operations
-| *partSize* (producer) | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | long
-| *serverSideEncryption* (producer) | Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256. |  | String
-| *storageClass* (producer) | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
-| *awsKMSKeyId* (producer) | Define the id of KMS key to use in case KMS is enabled |  | String
-| *useAwsKMS* (producer) | Define if KMS must be used or not | false | boolean
-| *accelerateModeEnabled* ( advanced) | Define if Accelerate Mode enabled is true or false | false | boolean
-| *chunkedEncodingDisabled* ( advanced) | Define if disabled Chunked Encoding is true or false | false | boolean
-| *dualstackEnabled* ( advanced) | Define if Dualstack enabled is true or false | false | boolean
-| *forceGlobalBucketAccessEnabled* ( advanced) | Define if Force Global Bucket Access enabled is true or false | false | boolean
-| *payloadSigningEnabled* ( advanced) | Define if Payload Signing enabled is true or false | false | boolean
-| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
-| *accessKey* (security) | Amazon AWS Access Key |  | String
-| *secretKey* (security) | Amazon AWS Secret Key |  | String
-|===
-// component options: END
-
-
-
-
-
-
-
-
-
-
-
-// endpoint options: START
-The AWS S3 Storage Service endpoint is configured using URI syntax:
-
-----
-aws-s3://bucketNameOrArn
-----
-
-with the following path and query parameters:
-
-=== Path Parameters (1 parameters):
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *bucketNameOrArn* | *Required* Bucket name or ARN |  | String
-|===
-
-
-=== Query Parameters (57 parameters):
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *amazonS3Client* (common) | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. |  | AmazonS3
-| *autoCreateBucket* (common) | Setting the autocreation of the bucket | true | boolean
-| *pathStyleAccess* (common) | Whether or not the S3 client should use path style access | false | boolean
-| *policy* (common) | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
-| *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
-| *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
-| *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
-| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
-| *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
-| *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | EncryptionMaterials
-| *useEncryption* (common) | Define if encryption must be used or not | false | boolean
-| *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 S3Constants#BUCKET_NAME and S3Constants#KEY headers, or only the S3Constants#KEY [...]
-| *delimiter* (consumer) | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
-| *fileName* (consumer) | To get the object from the bucket with the given file name |  | String
-| *includeBody* (consumer) | If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
-| *maxConnections* (consumer) | Set the maxConnections parameter in the S3 client configuration | 60 | int
-| *maxMessagesPerPoll* (consumer) | Gets the maximum number of messages as a limit to poll at each polling. Gets the maximum number of messages as a limit to poll at each polling. The default value is 10. Use 0 or a negative number to set it as unlimited. | 10 | int
-| *prefix* (consumer) | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
-| *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
-| *autocloseBody* (consumer) | If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | 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. 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
-| *deleteAfterWrite* (producer) | Delete file object after the S3 file has been uploaded | false | boolean
-| *keyName* (producer) | Setting the key name for an element in the bucket through endpoint parameter |  | String
-| *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 [...]
-| *multiPartUpload* (producer) | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | boolean
-| *operation* (producer) | The operation to do in case the user don't want to do only an upload. The value can be one of: copyObject, deleteBucket, listBuckets, downloadLink |  | S3Operations
-| *partSize* (producer) | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | long
-| *serverSideEncryption* (producer) | Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256. |  | String
-| *storageClass* (producer) | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
-| *awsKMSKeyId* (producer) | Define the id of KMS key to use in case KMS is enabled |  | String
-| *useAwsKMS* (producer) | Define if KMS must be used or not | false | boolean
-| *accelerateModeEnabled* ( advanced) | Define if Accelerate Mode enabled is true or false | false | boolean
-| *chunkedEncodingDisabled* ( advanced) | Define if disabled Chunked Encoding is true or false | false | boolean
-| *dualstackEnabled* ( advanced) | Define if Dualstack enabled is true or false | false | boolean
-| *forceGlobalBucketAccessEnabled* ( advanced) | Define if Force Global Bucket Access enabled is true or false | false | boolean
-| *payloadSigningEnabled* ( advanced) | Define if Payload Signing enabled is true or false | false | boolean
-| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
-| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
-| *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. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 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. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 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. 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. The value can be one of: none, spring, quartz | none | String
-| *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. 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
-| *accessKey* (security) | Amazon AWS Access Key |  | String
-| *secretKey* (security) | Amazon AWS Secret Key |  | String
-|===
-// endpoint options: END
-
-
-
-
-
-
-
-
-
-
-Required S3 component options
-
-You have to provide the amazonS3Client in the
-Registry or your accessKey and secretKey to access
-the https://aws.amazon.com/s3[Amazon's S3].
-
-== Batch Consumer
-
-This component implements the Batch Consumer.
-
-This allows you for instance to know how many messages exists in this
-batch and for instance let the Aggregator
-aggregate this number of messages.
-
-== Usage
-
-=== Message headers evaluated by the S3 producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsS3BucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
-
-|`CamelAwsS3BucketDestinationName` |`String` |The bucket Destination Name which will be used for the current operation
-
-|`CamelAwsS3ContentLength` |`Long` |The content length of this object.
-
-|`CamelAwsS3ContentType` |`String` |The content type of this object.
-
-|`CamelAwsS3ContentControl` |`String` |The content control of this object.
-
-|`CamelAwsS3ContentDisposition` |`String` |The content disposition of this object.
-
-|`CamelAwsS3ContentEncoding` |`String` |The content encoding of this object.
-
-|`CamelAwsS3ContentMD5` |`String` |The md5 checksum of this object.
-
-|`CamelAwsS3DestinationKey` |`String` |The Destination key which will be used for the current operation
-
-|`CamelAwsS3Key` |`String` |The key under which this object will be stored or which will be used for the current operation
-
-|`CamelAwsS3LastModified` |`java.util.Date` |The last modified timestamp of this object.
-
-|`CamelAwsS3Operation` |`String` |The operation to perform. Permitted values are copyObject, deleteObject, listBuckets, deleteBucket, downloadLink, listObjects
-
-|`CamelAwsS3StorageClass` |`String` |The storage class of this object.
-
-|`CamelAwsS3CannedAcl` |`String` |The canned acl that will be applied to the object. see
-`com.amazonaws.services.s3.model.CannedAccessControlList` for allowed
-values.
-
-|`CamelAwsS3Acl` |`com.amazonaws.services.s3.model.AccessControlList` |A well constructed Amazon S3 Access Control List object.
-see `com.amazonaws.services.s3.model.AccessControlList` for more details
-
-|`CamelAwsS3Headers` |`Map<String,String>` |Support to get or set custom objectMetadata headers.
-
-|`CamelAwsS3ServerSideEncryption` |String |Sets the server-side encryption algorithm when encrypting
-the object using AWS-managed keys. For example use AES256.
-
-|`CamelAwsS3VersionId` |`String` |The version Id of the object to be stored or returned from the current operation
-|=======================================================================
-
-=== Message headers set by the S3 producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-|`CamelAwsS3ETag` |`String` |The ETag value for the newly uploaded object.
-
-|`CamelAwsS3VersionId` |`String` |The *optional* version ID of the newly uploaded object.
-
-|`CamelAwsS3DownloadLinkExpiration` | `String` | The expiration (millis) of URL download link. The link will be stored into *CamelAwsS3DownloadLink* response header.
-
-|=======================================================================
-
-=== Message headers set by the S3 consumer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsS3Key` |`String` |The key under which this object is stored.
-
-|`CamelAwsS3BucketName` |`String` |The name of the bucket in which this object is contained.
-
-|`CamelAwsS3ETag` |`String` |The hex encoded 128-bit MD5 digest of the associated object according to
-RFC 1864. This data is used as an integrity check to verify that the
-data received by the caller is the same data that was sent by Amazon S3.
-
-|`CamelAwsS3LastModified` |`Date` |The value of the Last-Modified header, indicating the date and time at
-which Amazon S3 last recorded a modification to the associated object.
-
-|`CamelAwsS3VersionId` |`String` |The version ID of the associated Amazon S3 object if available. Version
-IDs are only assigned to objects when an object is uploaded to an Amazon
-S3 bucket that has object versioning enabled.
-
-|`CamelAwsS3ContentType` |`String` |The Content-Type HTTP header, which indicates the type of content stored
-in the associated object. The value of this header is a standard MIME
-type.
-
-|`CamelAwsS3ContentMD5` |`String` |The base64 encoded 128-bit MD5 digest of the associated object (content
-- not including headers) according to RFC 1864. This data is used as a
-message integrity check to verify that the data received by Amazon S3 is
-the same data that the caller sent.
-
-|`CamelAwsS3ContentLength` |`Long` |The Content-Length HTTP header indicating the size of the associated
-object in bytes.
-
-|`CamelAwsS3ContentEncoding` |`String` |The *optional* Content-Encoding HTTP header specifying what content
-encodings have been applied to the object and what decoding mechanisms
-must be applied in order to obtain the media-type referenced by the
-Content-Type field.
-
-|`CamelAwsS3ContentDisposition` |`String` |The *optional* Content-Disposition HTTP header, which specifies
-presentational information such as the recommended filename for the
-object to be saved as.
-
-|`CamelAwsS3ContentControl` |`String` |The *optional* Cache-Control HTTP header which allows the user to
-specify caching behavior along the HTTP request/reply chain.
-
-|`CamelAwsS3ServerSideEncryption` |String |The server-side encryption algorithm when encrypting the
-object using AWS-managed keys.
-|=======================================================================
-
-=== S3 Producer operations
-
-Camel-AWS s3 component provides the following operation on the producer side:
-
-- copyObject
-- deleteObject
-- listBuckets
-- deleteBucket
-- downloadLink
-- listObjects
-- getObject (this will return an S3Object instance)
-- getObjectRange (this will return an S3Object instance)
-
-=== Advanced AmazonS3 configuration
-
-If your Camel Application is running behind a firewall or if you need to
-have more control over the `AmazonS3` instance configuration, you can
-create your own instance:
-
-[source,java]
---------------------------------------------------------------------------------------
-AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
-
-ClientConfiguration clientConfiguration = new ClientConfiguration();
-clientConfiguration.setProxyHost("http://myProxyHost");
-clientConfiguration.setProxyPort(8080);
-
-AmazonS3 client = new AmazonS3Client(awsCredentials, clientConfiguration);
-
-registry.bind("client", client);
---------------------------------------------------------------------------------------
-
-and refer to it in your Camel aws-s3 component configuration:
-
-[source,java]
---------------------------------------------------------------------------------
-from("aws-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
-.to("mock:result");
---------------------------------------------------------------------------------
-
-=== Use KMS with the S3 component
-
-To use AWS KMS to encrypt/decrypt data by using AWS infrastructure you can use the options introduced in 2.21.x like in the following example
-
-[source,java]
---------------------------------------------------------------------------------
-from("file:tmp/test?fileName=test.txt")
-     .setHeader(S3Constants.KEY, constant("testFile"))
-     .to("aws-s3://mybucket?amazonS3Client=#client&useAwsKMS=true&awsKMSKeyId=3f0637ad-296a-3dfe-a796-e60654fb128c");
---------------------------------------------------------------------------------
-
-In this way you'll ask to S3, to use the KMS key 3f0637ad-296a-3dfe-a796-e60654fb128c, to encrypt the file test.txt. When you'll ask to download this file, the decryption will be done directly before the download.
-
-=== Use "useIAMCredentials" with the s3 component
-
-To use AWS IAM credentials, you must first verify that the EC2 in which you are launching the Camel application on has an IAM role associated with it containing the appropriate policies attached to run effectively.
-Keep in mind that this feature should only be set to "true" on remote instances. To clarify even further, you must still use static credentials locally since IAM is an AWS specific component,
-but AWS environments should now be easier to manage. After this is implemented and understood, you can set the query parameter "useIAMCredentials" to "true" for AWS environments! To effectively toggle this
-on and off based on local and remote environments, you can consider enabling this query parameter with system environment variables. For example, your code could set the "useIAMCredentials" query parameter to "true",
-when the system environment variable called "isRemote" is set to true (there are many other ways to do this and this should act as a simple example). Although it doesn't take away the need for static credentials completely,
-using IAM credentials on AWS environments takes away the need to refresh on remote environments and adds a major security boost (IAM credentials are refreshed automatically every 6 hours and update when their
-policies are updated). This is the AWS recommended way to manage credentials and therefore should be used as often as possible.
-
-=== S3 Producer Operation examples
-
-- 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("aws-s3://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("aws-s3://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("aws-s3://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("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will delete the bucket mycamelbucket
-
-- DownloadLink: this operation create a download link for the file specified in the key header
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start").process(new Processor() {
-                    
-      @Override
-      public void process(Exchange exchange) throws Exception {
-          exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); 
-      }
-  })
-  .to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=downloadLink")
-  .to("mock:result");
---------------------------------------------------------------------------------
-
-This operation will create a downloadLink for the file camelKey in the bucket mycamelbucket
-
-- ListObjects: this operation list object in a specific bucket
-
-[source,java]
---------------------------------------------------------------------------------
-  from("direct:start")
-  .to("aws-s3://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("aws-s3://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("aws-s3://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.
-
-== 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.
-
-== Automatic detection of AmazonS3 client in registry
-
-The component is capable of detecting the presence of an AmazonS3 bean into the registry.
-If it's the only instance of that type it will be used as client and you won't have to define it as uri parameter, like the example above.
-This may be really useful for smarter configuration of the endpoint.
-
-== 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.
-
-== Dependencies
-
-Maven users will need to add the following dependency to their pom.xml.
-
-*pom.xml*
-
-[source,xml]
----------------------------------------
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-aws-s3</artifactId>
-    <version>${camel-version}</version>
-</dependency>
----------------------------------------
-
-where `$\{camel-version\}` must be replaced by the actual version of Camel.
-
-
-include::camel-spring-boot::page$aws-s3-starter.adoc[]


[camel] 07/14: 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 99eef59471a086640b27b981c6dae81e4aeb56d7
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 09:29:03 2020 +0100

    Regen
---
 docs/components/modules/ROOT/nav.adoc              |   2 +
 .../modules/ROOT/pages/aws2-s3-component.adoc      | 529 +++++++++++++++++++++
 docs/components/modules/ROOT/pages/index.adoc      |   4 +-
 3 files changed, 534 insertions(+), 1 deletion(-)

diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index 58f3244..9c4258b 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -56,6 +56,8 @@
 * xref:aws2-lambda-component.adoc[AWS Lambda Component]
 * xref:aws2-mq-component.adoc[AWS 2 MQ Component]
 * xref:aws2-msk-component.adoc[AWS 2 MSK Component]
+* xref:aws2-s3-component.adoc[AWS2 S3 Storage Service Component]
+* xref:aws2-s3-component.adoc[AWS2 S3 Storage Service Component]
 * xref:aws2-ses-component.adoc[AWS 2 Simple Email Service Component]
 * xref:aws2-sns-component.adoc[AWS 2 Simple Notification System Component]
 * xref:aws2-sqs-component.adoc[AWS 2 Simple Queue Service Component]
diff --git a/docs/components/modules/ROOT/pages/aws2-s3-component.adoc b/docs/components/modules/ROOT/pages/aws2-s3-component.adoc
new file mode 100644
index 0000000..0e9607b
--- /dev/null
+++ b/docs/components/modules/ROOT/pages/aws2-s3-component.adoc
@@ -0,0 +1,529 @@
+[[aws2-s3-component]]
+= AWS2 S3 Storage Service Component
+:page-source: components/camel-aws2-s3/bin/src/main/docs/aws2-s3-component.adoc
+
+*Since Camel 3.2*
+
+*Since Camel 3.2*
+
+
+// HEADER START
+*Both producer and consumer is supported*
+// HEADER END
+
+The S3 component supports storing and retrieving objects from/to
+https://aws.amazon.com/s3[Amazon's S3] service.
+
+Prerequisites
+
+You must have a valid Amazon Web Services developer account, and be
+signed up to use Amazon S3. More information is available at
+https://aws.amazon.com/s3[Amazon S3].
+
+== URI Format
+
+[source,java]
+------------------------------
+aws2-s3://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("aws2-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt")
+  .to("file:/var/downloaded");
+--------------------------------------------------------------------------------
+
+
+== URI Options
+
+
+// component options: START
+The AWS2 S3 Storage Service component supports 37 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *amazonS3Client* (common) | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. |  | S3Client
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket | true | boolean
+| *configuration* (common) | The component configuration |  | AWS2S3Configuration
+| *pathStyleAccess* (common) | Whether or not the S3 client should use path style access | false | boolean
+| *policy* (common) | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
+| *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
+| *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
+| *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
+| *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | Encryption
+| *useEncryption* (common) | Define if encryption must be used or not | false | boolean
+| *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 [...]
+| *delimiter* (consumer) | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *fileName* (consumer) | To get the object from the bucket with the given file name |  | String
+| *includeBody* (consumer) | If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *prefix* (consumer) | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *autocloseBody* (consumer) | If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *deleteAfterWrite* (producer) | Delete file object after the S3 file has been uploaded | false | boolean
+| *keyName* (producer) | Setting the key name for an element in the bucket through endpoint parameter |  | String
+| *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 [...]
+| *multiPartUpload* (producer) | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | boolean
+| *operation* (producer) | The operation to do in case the user don't want to do only an upload. The value can be one of: copyObject, deleteBucket, listBuckets, downloadLink |  | AWS2S3Operations
+| *partSize* (producer) | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | long
+| *serverSideEncryption* (producer) | Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256. |  | String
+| *storageClass* (producer) | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
+| *awsKMSKeyId* (producer) | Define the id of KMS key to use in case KMS is enabled |  | String
+| *useAwsKMS* (producer) | Define if KMS must be used or not | false | boolean
+| *accelerateModeEnabled* ( advanced) | Define if Accelerate Mode enabled is true or false | false | boolean
+| *chunkedEncodingDisabled* ( advanced) | Define if disabled Chunked Encoding is true or false | false | boolean
+| *dualstackEnabled* ( advanced) | Define if Dualstack enabled is true or false | false | boolean
+| *forceGlobalBucketAccessEnabled* ( advanced) | Define if Force Global Bucket Access enabled is true or false | false | boolean
+| *payloadSigningEnabled* ( advanced) | Define if Payload Signing enabled is true or false | false | boolean
+| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *accessKey* (security) | Amazon AWS Access Key |  | String
+| *secretKey* (security) | Amazon AWS Secret Key |  | String
+|===
+// component options: END
+
+
+
+
+
+
+
+
+
+
+
+// endpoint options: START
+The AWS2 S3 Storage Service endpoint is configured using URI syntax:
+
+----
+aws2-s3://bucketNameOrArn
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *bucketNameOrArn* | *Required* Bucket name or ARN |  | String
+|===
+
+
+=== Query Parameters (57 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *amazonS3Client* (common) | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. |  | S3Client
+| *autoCreateBucket* (common) | Setting the autocreation of the bucket | true | boolean
+| *pathStyleAccess* (common) | Whether or not the S3 client should use path style access | false | boolean
+| *policy* (common) | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
+| *proxyHost* (common) | To define a proxy host when instantiating the SQS client |  | String
+| *proxyPort* (common) | Specify a proxy port to be used inside the client definition. |  | Integer
+| *proxyProtocol* (common) | To define a proxy protocol when instantiating the S3 client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
+| *region* (common) | The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
+| *useIAMCredentials* (common) | Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. | false | boolean
+| *encryptionMaterials* (common) | The encryption materials to use in case of Symmetric/Asymmetric client usage |  | Encryption
+| *useEncryption* (common) | Define if encryption must be used or not | false | boolean
+| *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 [...]
+| *delimiter* (consumer) | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *fileName* (consumer) | To get the object from the bucket with the given file name |  | String
+| *includeBody* (consumer) | If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | boolean
+| *maxConnections* (consumer) | Set the maxConnections parameter in the S3 client configuration | 60 | int
+| *maxMessagesPerPoll* (consumer) | Gets the maximum number of messages as a limit to poll at each polling. Gets the maximum number of messages as a limit to poll at each polling. The default value is 10. Use 0 or a negative number to set it as unlimited. | 10 | int
+| *prefix* (consumer) | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
+| *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
+| *autocloseBody* (consumer) | If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | 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. 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
+| *deleteAfterWrite* (producer) | Delete file object after the S3 file has been uploaded | false | boolean
+| *keyName* (producer) | Setting the key name for an element in the bucket through endpoint parameter |  | String
+| *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 [...]
+| *multiPartUpload* (producer) | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | boolean
+| *operation* (producer) | The operation to do in case the user don't want to do only an upload. The value can be one of: copyObject, deleteBucket, listBuckets, downloadLink |  | AWS2S3Operations
+| *partSize* (producer) | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | long
+| *serverSideEncryption* (producer) | Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256. |  | String
+| *storageClass* (producer) | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
+| *awsKMSKeyId* (producer) | Define the id of KMS key to use in case KMS is enabled |  | String
+| *useAwsKMS* (producer) | Define if KMS must be used or not | false | boolean
+| *accelerateModeEnabled* ( advanced) | Define if Accelerate Mode enabled is true or false | false | boolean
+| *chunkedEncodingDisabled* ( advanced) | Define if disabled Chunked Encoding is true or false | false | boolean
+| *dualstackEnabled* ( advanced) | Define if Dualstack enabled is true or false | false | boolean
+| *forceGlobalBucketAccessEnabled* ( advanced) | Define if Force Global Bucket Access enabled is true or false | false | boolean
+| *payloadSigningEnabled* ( advanced) | Define if Payload Signing enabled is true or false | false | boolean
+| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+| *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. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 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. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 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. 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. The value can be one of: none, spring, quartz | none | String
+| *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. 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
+| *accessKey* (security) | Amazon AWS Access Key |  | String
+| *secretKey* (security) | Amazon AWS Secret Key |  | String
+|===
+// endpoint options: END
+
+
+
+
+
+
+
+
+
+
+Required S3 component options
+
+You have to provide the amazonS3Client in the
+Registry or your accessKey and secretKey to access
+the https://aws.amazon.com/s3[Amazon's S3].
+
+== Batch Consumer
+
+This component implements the Batch Consumer.
+
+This allows you for instance to know how many messages exists in this
+batch and for instance let the Aggregator
+aggregate this number of messages.
+
+== Usage
+
+=== Message headers evaluated by the S3 producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelAwsS3BucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
+
+|`CamelAwsS3BucketDestinationName` |`String` |The bucket Destination Name which will be used for the current operation
+
+|`CamelAwsS3ContentLength` |`Long` |The content length of this object.
+
+|`CamelAwsS3ContentType` |`String` |The content type of this object.
+
+|`CamelAwsS3ContentControl` |`String` |The content control of this object.
+
+|`CamelAwsS3ContentDisposition` |`String` |The content disposition of this object.
+
+|`CamelAwsS3ContentEncoding` |`String` |The content encoding of this object.
+
+|`CamelAwsS3ContentMD5` |`String` |The md5 checksum of this object.
+
+|`CamelAwsS3DestinationKey` |`String` |The Destination key which will be used for the current operation
+
+|`CamelAwsS3Key` |`String` |The key under which this object will be stored or which will be used for the current operation
+
+|`CamelAwsS3LastModified` |`java.util.Date` |The last modified timestamp of this object.
+
+|`CamelAwsS3Operation` |`String` |The operation to perform. Permitted values are copyObject, deleteObject, listBuckets, deleteBucket, downloadLink, listObjects
+
+|`CamelAwsS3StorageClass` |`String` |The storage class of this object.
+
+|`CamelAwsS3CannedAcl` |`String` |The canned acl that will be applied to the object. see
+`com.amazonaws.services.s3.model.CannedAccessControlList` for allowed
+values.
+
+|`CamelAwsS3Acl` |`com.amazonaws.services.s3.model.AccessControlList` |A well constructed Amazon S3 Access Control List object.
+see `com.amazonaws.services.s3.model.AccessControlList` for more details
+
+|`CamelAwsS3Headers` |`Map<String,String>` |Support to get or set custom objectMetadata headers.
+
+|`CamelAwsS3ServerSideEncryption` |String |Sets the server-side encryption algorithm when encrypting
+the object using AWS-managed keys. For example use AES256.
+
+|`CamelAwsS3VersionId` |`String` |The version Id of the object to be stored or returned from the current operation
+|=======================================================================
+
+=== Message headers set by the S3 producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+|`CamelAwsS3ETag` |`String` |The ETag value for the newly uploaded object.
+
+|`CamelAwsS3VersionId` |`String` |The *optional* version ID of the newly uploaded object.
+
+|`CamelAwsS3DownloadLinkExpiration` | `String` | The expiration (millis) of URL download link. The link will be stored into *CamelAwsS3DownloadLink* response header.
+
+|=======================================================================
+
+=== Message headers set by the S3 consumer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelAwsS3Key` |`String` |The key under which this object is stored.
+
+|`CamelAwsS3BucketName` |`String` |The name of the bucket in which this object is contained.
+
+|`CamelAwsS3ETag` |`String` |The hex encoded 128-bit MD5 digest of the associated object according to
+RFC 1864. This data is used as an integrity check to verify that the
+data received by the caller is the same data that was sent by Amazon S3.
+
+|`CamelAwsS3LastModified` |`Date` |The value of the Last-Modified header, indicating the date and time at
+which Amazon S3 last recorded a modification to the associated object.
+
+|`CamelAwsS3VersionId` |`String` |The version ID of the associated Amazon S3 object if available. Version
+IDs are only assigned to objects when an object is uploaded to an Amazon
+S3 bucket that has object versioning enabled.
+
+|`CamelAwsS3ContentType` |`String` |The Content-Type HTTP header, which indicates the type of content stored
+in the associated object. The value of this header is a standard MIME
+type.
+
+|`CamelAwsS3ContentMD5` |`String` |The base64 encoded 128-bit MD5 digest of the associated object (content
+- not including headers) according to RFC 1864. This data is used as a
+message integrity check to verify that the data received by Amazon S3 is
+the same data that the caller sent.
+
+|`CamelAwsS3ContentLength` |`Long` |The Content-Length HTTP header indicating the size of the associated
+object in bytes.
+
+|`CamelAwsS3ContentEncoding` |`String` |The *optional* Content-Encoding HTTP header specifying what content
+encodings have been applied to the object and what decoding mechanisms
+must be applied in order to obtain the media-type referenced by the
+Content-Type field.
+
+|`CamelAwsS3ContentDisposition` |`String` |The *optional* Content-Disposition HTTP header, which specifies
+presentational information such as the recommended filename for the
+object to be saved as.
+
+|`CamelAwsS3ContentControl` |`String` |The *optional* Cache-Control HTTP header which allows the user to
+specify caching behavior along the HTTP request/reply chain.
+
+|`CamelAwsS3ServerSideEncryption` |String |The server-side encryption algorithm when encrypting the
+object using AWS-managed keys.
+|=======================================================================
+
+=== S3 Producer operations
+
+Camel-AWS s3 component provides the following operation on the producer side:
+
+- copyObject
+- deleteObject
+- listBuckets
+- deleteBucket
+- listObjects
+- getObject (this will return an S3Object instance)
+- getObjectRange (this will return an S3Object instance)
+
+=== Advanced AmazonS3 configuration
+
+If your Camel Application is running behind a firewall or if you need to
+have more control over the `S3Client` instance configuration, you can
+create your own instance and refer to it in your Camel aws2-s3 component configuration:
+
+[source,java]
+--------------------------------------------------------------------------------
+from("aws2-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
+.to("mock:result");
+--------------------------------------------------------------------------------
+
+=== Use KMS with the S3 component
+
+To use AWS KMS to encrypt/decrypt data by using AWS infrastructure you can use the options introduced in 2.21.x like in the following example
+
+[source,java]
+--------------------------------------------------------------------------------
+from("file:tmp/test?fileName=test.txt")
+     .setHeader(S3Constants.KEY, constant("testFile"))
+     .to("aws2-s3://mybucket?amazonS3Client=#client&useAwsKMS=true&awsKMSKeyId=3f0637ad-296a-3dfe-a796-e60654fb128c");
+--------------------------------------------------------------------------------
+
+In this way you'll ask to S3, to use the KMS key 3f0637ad-296a-3dfe-a796-e60654fb128c, to encrypt the file test.txt. When you'll ask to download this file, the decryption will be done directly before the download.
+
+=== Use "useIAMCredentials" with the s3 component
+
+To use AWS IAM credentials, you must first verify that the EC2 in which you are launching the Camel application on has an IAM role associated with it containing the appropriate policies attached to run effectively.
+Keep in mind that this feature should only be set to "true" on remote instances. To clarify even further, you must still use static credentials locally since IAM is an AWS specific component,
+but AWS environments should now be easier to manage. After this is implemented and understood, you can set the query parameter "useIAMCredentials" to "true" for AWS environments! To effectively toggle this
+on and off based on local and remote environments, you can consider enabling this query parameter with system environment variables. For example, your code could set the "useIAMCredentials" query parameter to "true",
+when the system environment variable called "isRemote" is set to true (there are many other ways to do this and this should act as a simple example). Although it doesn't take away the need for static credentials completely,
+using IAM credentials on AWS environments takes away the need to refresh on remote environments and adds a major security boost (IAM credentials are refreshed automatically every 6 hours and update when their
+policies are updated). This is the AWS recommended way to manage credentials and therefore should be used as often as possible.
+
+=== S3 Producer Operation examples
+
+- 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("aws2-s3://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("aws2-s3://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("aws2-s3://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("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will delete the bucket mycamelbucket
+
+- DownloadLink: this operation create a download link for the file specified in the key header
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start").process(new Processor() {
+                    
+      @Override
+      public void process(Exchange exchange) throws Exception {
+          exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); 
+      }
+  })
+  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=downloadLink")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
+This operation will create a downloadLink for the file camelKey in the bucket mycamelbucket
+
+- ListObjects: this operation list object in a specific bucket
+
+[source,java]
+--------------------------------------------------------------------------------
+  from("direct:start")
+  .to("aws2-s3://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("aws2-s3://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("aws2-s3://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.
+
+== 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.
+
+== Automatic detection of AmazonS3 client in registry
+
+The component is capable of detecting the presence of an AmazonS3 bean into the registry.
+If it's the only instance of that type it will be used as client and you won't have to define it as uri parameter, like the example above.
+This may be really useful for smarter configuration of the endpoint.
+
+== 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.
+
+== Dependencies
+
+Maven users will need to add the following dependency to their pom.xml.
+
+*pom.xml*
+
+[source,xml]
+---------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-aws2-s3</artifactId>
+    <version>${camel-version}</version>
+</dependency>
+---------------------------------------
+
+where `$\{camel-version\}` must be replaced by the actual version of Camel.
+
+
+include::camel-spring-boot::page$aws-s3-starter.adoc[]
\ No newline at end of file
diff --git a/docs/components/modules/ROOT/pages/index.adoc b/docs/components/modules/ROOT/pages/index.adoc
index ee76c61..a641037 100644
--- a/docs/components/modules/ROOT/pages/index.adoc
+++ b/docs/components/modules/ROOT/pages/index.adoc
@@ -6,7 +6,7 @@ The following Apache Camel artifacts are provided:
 == Components
 
 // components: START
-Number of Components: 331 in 264 JAR artifacts (1 deprecated)
+Number of Components: 332 in 265 JAR artifacts (1 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -120,6 +120,8 @@ Number of Components: 331 in 264 JAR artifacts (1 deprecated)
 
 | xref:aws-translate-component.adoc[AWS Translate] (camel-aws-translate) | 3.0 | The aws-translate component is used for managing Amazon Translate
 
+| xref:aws2-s3-component.adoc[AWS2 S3 Storage Service] (camel-aws2-s3) | 3.2 | The aws-s3 component is used for storing and retrieving object from Amazon S3 Storage Service.
+
 | xref:azure-blob-component.adoc[Azure Storage Blob Service] (camel-azure) | 2.19 | The azure-blob component is used for storing and retrieving blobs from Azure Storage Blob Service.
 
 | xref:azure-queue-component.adoc[Azure Storage Queue Service] (camel-azure) | 2.19 | The azure-queue component is used for storing and retrieving messages from Azure Storage Queue Service.


[camel] 06/14: CAMEL-14555 - Create an AWS-S3 component based on SDK v2, fixed CS

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 1a5ff48e9124c864b3d9bb8991087eb1c507668b
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 6 08:45:40 2020 +0100

    CAMEL-14555 - Create an AWS-S3 component based on SDK v2, fixed CS
---
 .../camel/component/aws2/s3/AWS2S3Component.java   |  1 -
 .../aws2/s3/AWS2S3ComponentVerifierExtension.java  |  1 -
 .../component/aws2/s3/AWS2S3Configuration.java     |  5 +--
 .../camel/component/aws2/s3/AWS2S3Consumer.java    | 30 ++++++--------
 .../camel/component/aws2/s3/AWS2S3Endpoint.java    | 46 +++++++++++-----------
 .../camel/component/aws2/s3/AWS2S3Producer.java    | 37 ++++++-----------
 .../aws2/s3/client/AWS2S3ClientFactory.java        |  4 +-
 .../client/impl/AWS2S3ClientIAMOptimizedImpl.java  | 11 ++----
 .../s3/client/impl/AWS2S3ClientStandardImpl.java   | 23 +++++------
 .../component/aws2/s3/AWSS3ClientFactoryTest.java  |  8 ++--
 .../s3/integration/S3ComponentIntegrationTest.java |  8 ++--
 .../S3ObjectRangeOperationIntegrationTest.java     | 24 ++++++-----
 12 files changed, 80 insertions(+), 118 deletions(-)

diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Component.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Component.java
index 97b7bc0..87fb256 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Component.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Component.java
@@ -24,7 +24,6 @@ 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 software.amazon.awssdk.services.s3.S3Client;
 
 @Component("aws2-s3")
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentVerifierExtension.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentVerifierExtension.java
index 5278b05..c0aee32 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentVerifierExtension.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3ComponentVerifierExtension.java
@@ -22,7 +22,6 @@ import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExt
 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 software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
 import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
 import software.amazon.awssdk.core.exception.SdkClientException;
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
index 370f042..9a4ff5f 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Configuration.java
@@ -20,7 +20,6 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.util.ObjectHelper;
-
 import software.amazon.awssdk.core.Protocol;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.s3.model.Encryption;
@@ -245,8 +244,8 @@ public class AWS2S3Configuration implements Cloneable {
      * 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.
+     * 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;
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
index c0c2fe7..fdf5e52 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
@@ -16,29 +16,12 @@
  */
 package org.apache.camel.component.aws2.s3;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Queue;
 
-import software.amazon.awssdk.awscore.exception.AwsServiceException;
-import software.amazon.awssdk.core.ResponseInputStream;
-import software.amazon.awssdk.core.sync.ResponseTransformer;
-import software.amazon.awssdk.services.s3.S3Client;
-import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
-import software.amazon.awssdk.services.s3.model.GetObjectRequest;
-import software.amazon.awssdk.services.s3.model.GetObjectResponse;
-import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
-import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
-import software.amazon.awssdk.services.s3.model.S3Object;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedExchange;
@@ -52,6 +35,16 @@ import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import software.amazon.awssdk.awscore.exception.AwsServiceException;
+import software.amazon.awssdk.core.ResponseInputStream;
+import software.amazon.awssdk.core.sync.ResponseTransformer;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
+import software.amazon.awssdk.services.s3.model.S3Object;
 
 /**
  * A Consumer of messages from the Amazon Web Service Simple Storage Service
@@ -135,7 +128,8 @@ public class AWS2S3Consumer extends ScheduledBatchPollingConsumer {
         Queue<Exchange> answer = new LinkedList<>();
         try {
             for (S3Object s3ObjectSummary : s3ObjectSummaries) {
-                ResponseInputStream<GetObjectResponse> s3Object = getAmazonS3Client().getObject(GetObjectRequest.builder().bucket(getConfiguration().getBucketName()).key(s3ObjectSummary.key()).build(), ResponseTransformer.toInputStream());
+                ResponseInputStream<GetObjectResponse> s3Object = getAmazonS3Client()
+                    .getObject(GetObjectRequest.builder().bucket(getConfiguration().getBucketName()).key(s3ObjectSummary.key()).build(), ResponseTransformer.toInputStream());
                 s3Objects.add(s3Object);
 
                 Exchange exchange = getEndpoint().createExchange(s3Object, s3ObjectSummary.key());
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
index 9088ac2..a7c1c42 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
@@ -16,22 +16,12 @@
  */
 package org.apache.camel.component.aws2.s3;
 
-import software.amazon.awssdk.awscore.exception.AwsServiceException;
-import software.amazon.awssdk.core.ResponseInputStream;
-import software.amazon.awssdk.services.s3.S3Client;
-import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
-import software.amazon.awssdk.services.s3.model.GetObjectResponse;
-import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
-import software.amazon.awssdk.services.s3.model.PutBucketPolicyRequest;
-import software.amazon.awssdk.services.s3.model.S3Object;
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
-import java.util.Map;
 
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
@@ -52,6 +42,14 @@ import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import software.amazon.awssdk.awscore.exception.AwsServiceException;
+import software.amazon.awssdk.core.ResponseInputStream;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.PutBucketPolicyRequest;
+import software.amazon.awssdk.services.s3.model.S3Object;
 
 /**
  * The aws-s3 component is used for storing and retrieving object from Amazon S3
@@ -96,7 +94,8 @@ public class AWS2S3Endpoint extends ScheduledPollEndpoint {
     public void doStart() throws Exception {
         super.doStart();
 
-        s3Client = configuration.getAmazonS3Client() != null ? configuration.getAmazonS3Client() : AWS2S3ClientFactory.getAWSS3Client(configuration, getMaxConnections()).getS3Client();
+        s3Client = configuration.getAmazonS3Client() != null
+            ? configuration.getAmazonS3Client() : AWS2S3ClientFactory.getAWSS3Client(configuration).getS3Client();
 
         String fileName = getConfiguration().getFileName();
 
@@ -111,10 +110,10 @@ public class AWS2S3Endpoint extends ScheduledPollEndpoint {
         String prefix = getConfiguration().getPrefix();
 
         try {
-        	ListObjectsRequest.Builder builder = ListObjectsRequest.builder();
-        	builder.bucket(bucketName);
-        	builder.prefix(prefix);
-        	builder.maxKeys(maxMessagesPerPoll);
+            ListObjectsRequest.Builder builder = ListObjectsRequest.builder();
+            builder.bucket(bucketName);
+            builder.prefix(prefix);
+            builder.maxKeys(maxMessagesPerPoll);
             s3Client.listObjects(builder.build());
             LOG.trace("Bucket [{}] already exists", bucketName);
             return;
@@ -171,11 +170,11 @@ public class AWS2S3Endpoint extends ScheduledPollEndpoint {
 
         if (configuration.isIncludeBody()) {
             try {
-				message.setBody(readInputStream(s3Object));
-			} catch (IOException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
+                message.setBody(readInputStream(s3Object));
+            } catch (IOException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
         } else {
             message.setBody(null);
         }
@@ -258,14 +257,13 @@ public class AWS2S3Endpoint extends ScheduledPollEndpoint {
     public void setMaxConnections(int maxConnections) {
         this.maxConnections = maxConnections;
     }
-    
+
     private String readInputStream(ResponseInputStream<GetObjectResponse> s3Object) throws IOException {
         StringBuilder textBuilder = new StringBuilder();
-        try (Reader reader = new BufferedReader(new InputStreamReader
-          (s3Object, Charset.forName(StandardCharsets.UTF_8.name())))) {
+        try (Reader reader = new BufferedReader(new InputStreamReader(s3Object, Charset.forName(StandardCharsets.UTF_8.name())))) {
             int c = 0;
             while ((c = reader.read()) != -1) {
-                textBuilder.append((char) c);
+                textBuilder.append((char)c);
             }
         }
         return textBuilder.toString();
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
index 533be73..f6c199b 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
@@ -22,11 +22,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.Endpoint;
@@ -34,27 +30,20 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.WrappedFile;
 import org.apache.camel.support.DefaultProducer;
-import org.apache.camel.util.CastUtils;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import software.amazon.awssdk.core.ResponseInputStream;
 import software.amazon.awssdk.core.SdkBytes;
 import software.amazon.awssdk.core.sync.RequestBody;
 import software.amazon.awssdk.core.sync.ResponseTransformer;
 import software.amazon.awssdk.services.s3.S3Client;
-import software.amazon.awssdk.services.s3.model.AccessControlPolicy;
-import software.amazon.awssdk.services.s3.model.Bucket;
 import software.amazon.awssdk.services.s3.model.BucketCannedACL;
-import software.amazon.awssdk.services.s3.model.CompletedMultipartUpload;
 import software.amazon.awssdk.services.s3.model.CopyObjectRequest;
 import software.amazon.awssdk.services.s3.model.CopyObjectResponse;
-import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
-import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse;
 import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
 import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
 import software.amazon.awssdk.services.s3.model.GetObjectRequest;
@@ -65,10 +54,6 @@ import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
 import software.amazon.awssdk.services.s3.model.ObjectCannedACL;
 import software.amazon.awssdk.services.s3.model.PutObjectRequest;
 import software.amazon.awssdk.services.s3.model.PutObjectResponse;
-import software.amazon.awssdk.services.s3.model.S3Object;
-import software.amazon.awssdk.services.s3.model.StorageClass;
-import software.amazon.awssdk.services.s3.model.UploadPartRequest;
-
 /**
  * A Producer which sends messages to the Amazon Web Service Simple Storage
  * Service <a href="http://aws.amazon.com/s3/">AWS S3</a>
@@ -87,7 +72,7 @@ public class AWS2S3Producer extends DefaultProducer {
     public void process(final Exchange exchange) throws Exception {
         AWS2S3Operations operation = determineOperation(exchange);
         if (ObjectHelper.isEmpty(operation)) {
-                processSingleOp(exchange);
+            processSingleOp(exchange);
         } else {
             switch (operation) {
                 case copyObject:
@@ -135,7 +120,7 @@ public class AWS2S3Producer extends DefaultProducer {
             is = new FileInputStream(filePayload);
         } else {
             is = exchange.getIn().getMandatoryBody(InputStream.class);
-            if (objectMetadata.get("Content-Length") == "0" && ObjectHelper.isEmpty(exchange.getProperty(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");
                 baos = determineLengthInputStream(is);
                 objectMetadata.put("Content-Length", String.valueOf(baos.size()));
@@ -208,12 +193,12 @@ public class AWS2S3Producer extends DefaultProducer {
             throw new IllegalArgumentException("Destination Key must be specified for copyObject Operation");
         }
         CopyObjectRequest.Builder copyObjectRequest = CopyObjectRequest.builder();
-            copyObjectRequest = CopyObjectRequest.builder().destinationBucket(bucketNameDestination).destinationKey(destinationKey).copySource(bucketName + "/" + sourceKey);
+        copyObjectRequest = CopyObjectRequest.builder().destinationBucket(bucketNameDestination).destinationKey(destinationKey).copySource(bucketName + "/" + sourceKey);
 
         if (getConfiguration().isUseAwsKMS()) {
             if (ObjectHelper.isNotEmpty(getConfiguration().getAwsKMSKeyId())) {
                 copyObjectRequest.ssekmsKeyId(getConfiguration().getAwsKMSKeyId());
-            } 
+            }
         }
 
         CopyObjectResponse copyObjectResult = s3Client.copyObject(copyObjectRequest.build());
@@ -295,7 +280,7 @@ public class AWS2S3Producer extends DefaultProducer {
     }
 
     private Map<String, String> determineMetadata(final Exchange exchange) {
-    	Map<String, String> objectMetadata = new HashMap<String, String>();
+        Map<String, String> objectMetadata = new HashMap<String, String>();
 
         Long contentLength = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_LENGTH, Long.class);
         if (contentLength != null) {
@@ -304,27 +289,27 @@ public class AWS2S3Producer extends DefaultProducer {
 
         String contentType = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_TYPE, String.class);
         if (contentType != null) {
-        	objectMetadata.put("Content-Type", String.valueOf(contentType));
+            objectMetadata.put("Content-Type", String.valueOf(contentType));
         }
 
         String cacheControl = exchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL, String.class);
         if (cacheControl != null) {
-        	objectMetadata.put("Cache-Control", String.valueOf(cacheControl));
+            objectMetadata.put("Cache-Control", String.valueOf(cacheControl));
         }
 
         String contentDisposition = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION, String.class);
         if (contentDisposition != null) {
-        	objectMetadata.put("Content-Disposition", String.valueOf(contentDisposition));
+            objectMetadata.put("Content-Disposition", String.valueOf(contentDisposition));
         }
 
         String contentEncoding = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING, String.class);
         if (contentEncoding != null) {
-        	objectMetadata.put("Content-Encoding", String.valueOf(contentEncoding));
+            objectMetadata.put("Content-Encoding", String.valueOf(contentEncoding));
         }
 
         String contentMD5 = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_MD5, String.class);
         if (contentMD5 != null) {
-        	objectMetadata.put("Content-Md5", String.valueOf(contentMD5));
+            objectMetadata.put("Content-Md5", String.valueOf(contentMD5));
         }
 
         return objectMetadata;
@@ -341,7 +326,7 @@ public class AWS2S3Producer extends DefaultProducer {
     private String determineBucketName(final Exchange exchange) {
         String bucketName = exchange.getIn().getHeader(AWS2S3Constants.BUCKET_NAME, String.class);
 
-        if (ObjectHelper.isEmpty(bucketName)) { 
+        if (ObjectHelper.isEmpty(bucketName)) {
             bucketName = getConfiguration().getBucketName();
             LOG.trace("AWS S3 Bucket name header is missing, using default one [{}]", bucketName);
         }
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2S3ClientFactory.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2S3ClientFactory.java
index 0b3c478..9edba33 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2S3ClientFactory.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/AWS2S3ClientFactory.java
@@ -36,7 +36,7 @@ public final class AWS2S3ClientFactory {
      * @param maxConnections max connections
      * @return AWSS3Client
      */
-    public static AWS2CamelS3InternalClient getAWSS3Client(AWS2S3Configuration configuration, int maxConnections) {
-        return configuration.isUseIAMCredentials() ? new AWS2S3ClientIAMOptimizedImpl(configuration, maxConnections) : new AWS2S3ClientStandardImpl(configuration, maxConnections);
+    public static AWS2CamelS3InternalClient getAWSS3Client(AWS2S3Configuration configuration) {
+        return configuration.isUseIAMCredentials() ? new AWS2S3ClientIAMOptimizedImpl(configuration) : new AWS2S3ClientStandardImpl(configuration);
     }
 }
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientIAMOptimizedImpl.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientIAMOptimizedImpl.java
index 5395aec..1f8be57 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientIAMOptimizedImpl.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientIAMOptimizedImpl.java
@@ -23,10 +23,7 @@ import org.apache.camel.component.aws2.s3.client.AWS2CamelS3InternalClient;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
 import software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider;
-import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
 import software.amazon.awssdk.http.apache.ApacheHttpClient;
 import software.amazon.awssdk.http.apache.ProxyConfiguration;
 import software.amazon.awssdk.regions.Region;
@@ -41,15 +38,13 @@ import software.amazon.awssdk.services.s3.S3ClientBuilder;
 public class AWS2S3ClientIAMOptimizedImpl implements AWS2CamelS3InternalClient {
     private static final Logger LOG = LoggerFactory.getLogger(AWS2S3ClientIAMOptimizedImpl.class);
     private AWS2S3Configuration configuration;
-    private int maxConnections;
 
     /**
      * Constructor that uses the config file.
      */
-    public AWS2S3ClientIAMOptimizedImpl(AWS2S3Configuration configuration, int maxConnections) {
+    public AWS2S3ClientIAMOptimizedImpl(AWS2S3Configuration configuration) {
         LOG.trace("Creating an AWS S3 client for an ec2 instance with IAM temporary credentials (normal for ec2s).");
         this.configuration = configuration;
-        this.maxConnections = maxConnections;
     }
 
     /**
@@ -59,8 +54,8 @@ public class AWS2S3ClientIAMOptimizedImpl implements AWS2CamelS3InternalClient {
      */
     @Override
     public S3Client getS3Client() {
-    	S3Client client = null;
-    	S3ClientBuilder clientBuilder = S3Client.builder();
+        S3Client client = null;
+        S3ClientBuilder clientBuilder = S3Client.builder();
         ProxyConfiguration.Builder proxyConfig = null;
         ApacheHttpClient.Builder httpClientBuilder = null;
         boolean isClientConfigFound = false;
diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientStandardImpl.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientStandardImpl.java
index 6fd055b..ff6d639 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientStandardImpl.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/client/impl/AWS2S3ClientStandardImpl.java
@@ -16,14 +16,6 @@
  */
 package org.apache.camel.component.aws2.s3.client.impl;
 
-import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
-import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
-import software.amazon.awssdk.http.apache.ApacheHttpClient;
-import software.amazon.awssdk.http.apache.ProxyConfiguration;
-import software.amazon.awssdk.regions.Region;
-import software.amazon.awssdk.services.s3.S3Client;
-import software.amazon.awssdk.services.s3.S3ClientBuilder;
-
 import java.net.URI;
 
 import org.apache.camel.component.aws2.s3.AWS2S3Configuration;
@@ -31,6 +23,13 @@ import org.apache.camel.component.aws2.s3.client.AWS2CamelS3InternalClient;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.http.apache.ApacheHttpClient;
+import software.amazon.awssdk.http.apache.ProxyConfiguration;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.S3ClientBuilder;
 
 /**
  * Manage an AWS s3 client for all users to use. This implementation is for
@@ -39,15 +38,13 @@ import org.slf4j.LoggerFactory;
 public class AWS2S3ClientStandardImpl implements AWS2CamelS3InternalClient {
     private static final Logger LOG = LoggerFactory.getLogger(AWS2S3ClientStandardImpl.class);
     private AWS2S3Configuration configuration;
-    private int maxConnections;
 
     /**
      * Constructor that uses the config file.
      */
-    public AWS2S3ClientStandardImpl(AWS2S3Configuration configuration, int maxConnections) {
+    public AWS2S3ClientStandardImpl(AWS2S3Configuration configuration) {
         LOG.trace("Creating an AWS S3 manager using static credentials.");
         this.configuration = configuration;
-        this.maxConnections = maxConnections;
     }
 
     /**
@@ -57,8 +54,8 @@ public class AWS2S3ClientStandardImpl implements AWS2CamelS3InternalClient {
      */
     @Override
     public S3Client getS3Client() {
-    	S3Client client = null;
-    	S3ClientBuilder clientBuilder = S3Client.builder();
+        S3Client client = null;
+        S3ClientBuilder clientBuilder = S3Client.builder();
         ProxyConfiguration.Builder proxyConfig = null;
         ApacheHttpClient.Builder httpClientBuilder = null;
         boolean isClientConfigFound = false;
diff --git a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/AWSS3ClientFactoryTest.java b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/AWSS3ClientFactoryTest.java
index 5b0d7b1..e4484f2 100644
--- a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/AWSS3ClientFactoryTest.java
+++ b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/AWSS3ClientFactoryTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.aws2.s3;
 
-import org.apache.camel.component.aws2.s3.AWS2S3Configuration;
 import org.apache.camel.component.aws2.s3.client.AWS2CamelS3InternalClient;
 import org.apache.camel.component.aws2.s3.client.AWS2S3ClientFactory;
 import org.apache.camel.component.aws2.s3.client.impl.AWS2S3ClientIAMOptimizedImpl;
@@ -25,12 +24,11 @@ import org.junit.Assert;
 import org.junit.Test;
 
 public class AWSS3ClientFactoryTest {
-    private static final int MAX_CONNECTIONS = 1;
 
     @Test
     public void getStandardS3ClientDefault() {
         AWS2S3Configuration s3Configuration = new AWS2S3Configuration();
-        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration, MAX_CONNECTIONS);
+        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration);
         Assert.assertTrue(awss3Client instanceof AWS2S3ClientStandardImpl);
     }
 
@@ -38,7 +36,7 @@ public class AWSS3ClientFactoryTest {
     public void getStandardS3Client() {
         AWS2S3Configuration s3Configuration = new AWS2S3Configuration();
         s3Configuration.setUseIAMCredentials(false);
-        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration, MAX_CONNECTIONS);
+        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration);
         Assert.assertTrue(awss3Client instanceof AWS2S3ClientStandardImpl);
     }
 
@@ -46,7 +44,7 @@ public class AWSS3ClientFactoryTest {
     public void getIAMOptimizedS3Client() {
         AWS2S3Configuration s3Configuration = new AWS2S3Configuration();
         s3Configuration.setUseIAMCredentials(true);
-        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration, MAX_CONNECTIONS);
+        AWS2CamelS3InternalClient awss3Client = AWS2S3ClientFactory.getAWSS3Client(s3Configuration);
         Assert.assertTrue(awss3Client instanceof AWS2S3ClientIAMOptimizedImpl);
     }
 }
diff --git a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ComponentIntegrationTest.java b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ComponentIntegrationTest.java
index 951f7b3..c45f67c 100644
--- a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ComponentIntegrationTest.java
+++ b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ComponentIntegrationTest.java
@@ -89,10 +89,10 @@ public class S3ComponentIntegrationTest extends CamelTestSupport {
         assertEquals("mycamelbucket", resultExchange.getIn().getHeader(AWS2S3Constants.BUCKET_NAME));
         assertTrue(resultExchange.getIn().getHeader(AWS2S3Constants.KEY, String.class).startsWith("CamelUnitTest"));
         assertNull(resultExchange.getIn().getHeader(AWS2S3Constants.VERSION_ID)); // not
-                                                                              // enabled
-                                                                              // on
-                                                                              // this
-                                                                              // bucket
+        // enabled
+        // on
+        // this
+        // bucket
         assertNotNull(resultExchange.getIn().getHeader(AWS2S3Constants.LAST_MODIFIED));
         assertEquals("application/octet-stream", resultExchange.getIn().getHeader(AWS2S3Constants.CONTENT_TYPE));
         assertNull(resultExchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING));
diff --git a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ObjectRangeOperationIntegrationTest.java b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ObjectRangeOperationIntegrationTest.java
index fed3648..19e9a8e 100644
--- a/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ObjectRangeOperationIntegrationTest.java
+++ b/components/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3ObjectRangeOperationIntegrationTest.java
@@ -23,13 +23,6 @@ import java.io.Reader;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 
-import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
-import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
-import software.amazon.awssdk.core.ResponseInputStream;
-import software.amazon.awssdk.regions.Region;
-import software.amazon.awssdk.services.s3.S3Client;
-import software.amazon.awssdk.services.s3.model.GetObjectResponse;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -43,10 +36,16 @@ import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.core.ResponseInputStream;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
 
 @Ignore("Must be manually tested. Provide your own accessKey and secretKey!")
 public class S3ObjectRangeOperationIntegrationTest extends CamelTestSupport {
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(S3ObjectRangeOperationIntegrationTest.class);
 
     @BindToRegistry("amazonS3Client")
@@ -86,8 +85,8 @@ public class S3ObjectRangeOperationIntegrationTest extends CamelTestSupport {
 
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                    	ResponseInputStream<GetObjectResponse> s3 = exchange.getIn().getBody(ResponseInputStream.class);
-                    	LOG.info(readInputStream(s3));
+                        ResponseInputStream<GetObjectResponse> s3 = exchange.getIn().getBody(ResponseInputStream.class);
+                        LOG.info(readInputStream(s3));
 
                     }
                 }).to("mock:result");
@@ -98,11 +97,10 @@ public class S3ObjectRangeOperationIntegrationTest extends CamelTestSupport {
 
     private String readInputStream(ResponseInputStream<GetObjectResponse> s3Object) throws IOException {
         StringBuilder textBuilder = new StringBuilder();
-        try (Reader reader = new BufferedReader(new InputStreamReader
-          (s3Object, Charset.forName(StandardCharsets.UTF_8.name())))) {
+        try (Reader reader = new BufferedReader(new InputStreamReader(s3Object, Charset.forName(StandardCharsets.UTF_8.name())))) {
             int c = 0;
             while ((c = reader.read()) != -1) {
-                textBuilder.append((char) c);
+                textBuilder.append((char)c);
             }
         }
         return textBuilder.toString();