This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch CAMEL-21262 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 6a4d05ee36253e12cc8df8cc200a45c15e3499e6 Author: Andrea Cosentino <[email protected]> AuthorDate: Wed Oct 9 15:42:00 2024 +0200 CAMEL-21262 - Camel-AWS2-S3: Explicitly add Producer operations HeadObject and HeadBucket - HeadObject Signed-off-by: Andrea Cosentino <[email protected]> --- .../camel/component/aws2/s3/AWS2S3Operations.java | 3 ++- .../camel/component/aws2/s3/AWS2S3Producer.java | 16 +++++++++++++ .../aws2/s3/integration/S3HeadBucketIT.java | 2 +- .../{S3HeadBucketIT.java => S3HeadObjectIT.java} | 28 ++++++++++++++++------ 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java index 1dc575c427f..b4e12b1ef85 100644 --- a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java +++ b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java @@ -26,5 +26,6 @@ public enum AWS2S3Operations { getObject, getObjectRange, createDownloadLink, - headBucket + headBucket, + headObject } diff --git a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java index 38bfc5bc6b0..b7edba14061 100644 --- a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java +++ b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java @@ -104,6 +104,9 @@ public class AWS2S3Producer extends DefaultProducer { case headBucket: headBucket(getEndpoint().getS3Client(), exchange); break; + case headObject: + headObject(getEndpoint().getS3Client(), exchange); + break; default: throw new IllegalArgumentException("Unsupported operation"); } @@ -712,6 +715,19 @@ public class AWS2S3Producer extends DefaultProducer { message.setBody(headBucketResponse); } + private void headObject(S3Client s3Client, Exchange exchange) { + String key = exchange.getIn().getHeader(AWS2S3Constants.KEY, String.class); + if (ObjectHelper.isEmpty(key)) { + throw new IllegalArgumentException( + "Head Object operation requires to specify a bucket name via Header"); + } + HeadObjectResponse headObjectResponse = s3Client.headObject(HeadObjectRequest.builder() + .bucket(AWS2S3Utils.determineBucketName(exchange, getConfiguration())).key(key).build()); + + Message message = getMessageForResponse(exchange); + message.setBody(headObjectResponse); + } + private AWS2S3Operations determineOperation(Exchange exchange) { AWS2S3Operations operation = exchange.getIn().getHeader(AWS2S3Constants.S3_OPERATION, AWS2S3Operations.class); if (operation == null) { diff --git a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java index 5c65e517f2b..4bc0b7427c9 100644 --- a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java +++ b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java @@ -33,7 +33,7 @@ public class S3HeadBucketIT extends Aws2S3Base { private MockEndpoint result; @Test - public void sendInWithUserMetadata() throws InterruptedException { + public void sendInHeadBucket() throws InterruptedException { result.expectedMessageCount(1); template.send("direct:headBucket", exchange -> { diff --git a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadObjectIT.java similarity index 62% copy from components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java copy to components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadObjectIT.java index 5c65e517f2b..34b170f3d69 100644 --- a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java +++ b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadObjectIT.java @@ -17,6 +17,8 @@ package org.apache.camel.component.aws2.s3.integration; 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; @@ -24,7 +26,7 @@ import org.apache.camel.component.aws2.s3.AWS2S3Operations; import org.apache.camel.component.mock.MockEndpoint; import org.junit.jupiter.api.Test; -public class S3HeadBucketIT extends Aws2S3Base { +public class S3HeadObjectIT extends Aws2S3Base { @EndpointInject private ProducerTemplate template; @@ -33,12 +35,22 @@ public class S3HeadBucketIT extends Aws2S3Base { private MockEndpoint result; @Test - public void sendInWithUserMetadata() throws InterruptedException { + public void sendInHeadObject() throws InterruptedException { result.expectedMessageCount(1); - template.send("direct:headBucket", exchange -> { - exchange.getIn().setHeader(AWS2S3Constants.S3_OPERATION, AWS2S3Operations.headBucket); - exchange.getIn().setHeader(AWS2S3Constants.BUCKET_NAME, "mycamel"); + template.send("direct:putObject", new Processor() { + + @Override + public void process(Exchange exchange) { + exchange.getIn().setHeader(AWS2S3Constants.KEY, "camel.txt"); + exchange.getIn().setHeader(AWS2S3Constants.CONTENT_TYPE, "application/text"); + exchange.getIn().setBody("Camel rocks!"); + } + }); + + template.send("direct:headObject", exchange -> { + exchange.getIn().setHeader(AWS2S3Constants.S3_OPERATION, AWS2S3Operations.headObject); + exchange.getIn().setHeader(AWS2S3Constants.KEY, "camel.txt"); }); result.assertIsSatisfied(); @@ -49,9 +61,11 @@ public class S3HeadBucketIT extends Aws2S3Base { return new RouteBuilder() { @Override public void configure() { - String awsEndpoint = "aws2-s3://test-ss3-s3"; + String awsEndpoint = "aws2-s3://" + name.get(); + String awsEndpointCreate = "aws2-s3://" + name.get() + "?autoCreateBucket=true"; - from("direct:headBucket").to(awsEndpoint).log("${body}").to("mock:result"); + from("direct:putObject").to(awsEndpointCreate); + from("direct:headObject").to(awsEndpoint).log("${body}").to("mock:result"); } };
