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) {
