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 e60884f12773b5b5b8199a16746b4aa943c8616d
Author: Andrea Cosentino <[email protected]>
AuthorDate: Thu Apr 16 13:27:11 2020 +0200

    CAMEL-14868 - Camel-AWS2-*: Where possible, give the possiblity to the end 
user to pass an AWS Request pojo as body, aws2-s3 copy object
---
 .../camel/component/aws2/s3/AWS2S3Configuration.java   | 13 +++++++++++++
 .../apache/camel/component/aws2/s3/AWS2S3Producer.java | 18 ++++++++++++++++--
 2 files changed, 29 insertions(+), 2 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 5e02c6f..17055cc 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
@@ -81,6 +81,8 @@ public class AWS2S3Configuration implements Cloneable {
     private boolean overrideEndpoint;
     @UriParam
     private String uriEndpointOverride;
+    @UriParam(defaultValue = "false")
+    private boolean pojoRequest;
 
     public long getPartSize() {
         return partSize;
@@ -425,6 +427,17 @@ public class AWS2S3Configuration implements Cloneable {
     public void setUriEndpointOverride(String uriEndpointOverride) {
         this.uriEndpointOverride = uriEndpointOverride;
     }
+    
+    public boolean isPojoRequest() {
+        return pojoRequest;
+    }
+
+    /**
+     * If we want to use a POJO request as body or not
+     */
+    public void setPojoRequest(boolean pojoRequest) {
+        this.pojoRequest = pojoRequest;
+    }
 
     // *************************************************
     //
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 acd8047..f8fc5ce 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
@@ -29,6 +29,7 @@ import java.util.Map;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.Message;
 import org.apache.camel.WrappedFile;
 import org.apache.camel.support.DefaultProducer;
@@ -38,10 +39,14 @@ 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.SdkBytes;
 import software.amazon.awssdk.core.sync.RequestBody;
 import software.amazon.awssdk.core.sync.ResponseTransformer;
+import software.amazon.awssdk.services.kafka.model.ListClustersRequest;
+import software.amazon.awssdk.services.kafka.model.ListClustersResponse;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.s3.model.AbortMultipartUploadRequest;
 import software.amazon.awssdk.services.s3.model.BucketCannedACL;
@@ -292,12 +297,20 @@ public class AWS2S3Producer extends DefaultProducer {
         }
     }
 
-    private void copyObject(S3Client s3Client, Exchange exchange) {
+    private void copyObject(S3Client s3Client, Exchange exchange) throws 
InvalidPayloadException {
         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 (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof CopyObjectRequest) {
+               CopyObjectResponse result;
+                result = s3Client.copyObject((CopyObjectRequest) payload);
+                Message message = getMessageForResponse(exchange);
+                message.setBody(result);
+            }
+        } else {
         if (ObjectHelper.isEmpty(bucketNameDestination)) {
             throw new IllegalArgumentException("Bucket Name Destination must 
be specified for copyObject Operation");
         }
@@ -319,6 +332,7 @@ public class AWS2S3Producer extends DefaultProducer {
         if (copyObjectResult.versionId() != null) {
             message.setHeader(AWS2S3Constants.VERSION_ID, 
copyObjectResult.versionId());
         }
+        }
     }
 
     private void deleteObject(S3Client s3Client, Exchange exchange) {

Reply via email to