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 <[email protected]> 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();
