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 2022/11/22 07:04:20 UTC

[camel] branch camel-3.18.x updated: [CAMEL-18722] Fixed metadata handling

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch camel-3.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.18.x by this push:
     new 073661b665d [CAMEL-18722] Fixed metadata handling
073661b665d is described below

commit 073661b665dd9c387d0a28c9ced01cf6a6418b55
Author: Henrik Karlsson <he...@redpill-linpro.com>
AuthorDate: Mon Nov 14 21:38:54 2022 +0100

    [CAMEL-18722] Fixed metadata handling
---
 .../camel/component/aws2/s3/AWS2S3Producer.java    | 83 +++++++++++-----------
 1 file changed, 42 insertions(+), 41 deletions(-)

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 dcc59ee63dc..bccea839205 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
@@ -141,13 +141,12 @@ public class AWS2S3Producer extends DefaultProducer {
         }
 
         Map<String, String> objectMetadata = determineMetadata(exchange);
-        if (objectMetadata.containsKey("Content-Length")) {
-            if (objectMetadata.get("Content-Length").equalsIgnoreCase("0")) {
-                objectMetadata.put("Content-Length", String.valueOf(filePayload.length()));
-            }
-        } else {
-            objectMetadata.put("Content-Length", String.valueOf(filePayload.length()));
+
+        Long contentLength = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_LENGTH, Long.class);
+        if (contentLength == null || contentLength == 0) {
+            contentLength = filePayload.length();
         }
+        objectMetadata.put("Content-Length", contentLength.toString());
 
         final String keyName = AWS2S3Utils.determineKey(exchange, getConfiguration());
         CreateMultipartUploadRequest.Builder createMultipartUploadRequest
@@ -177,13 +176,28 @@ public class AWS2S3Producer extends DefaultProducer {
             createMultipartUploadRequest.contentType(contentType);
         }
 
+        String cacheControl = exchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL, String.class);
+        if (cacheControl != null) {
+            createMultipartUploadRequest.cacheControl(cacheControl);
+        }
+
+        String contentDisposition = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION, String.class);
+        if (contentDisposition != null) {
+            createMultipartUploadRequest.contentDisposition(contentDisposition);
+        }
+
+        String contentEncoding = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING, String.class);
+        if (contentEncoding != null) {
+            createMultipartUploadRequest.contentEncoding(contentEncoding);
+        }
+
         AWS2S3Utils.setEncryption(createMultipartUploadRequest, getConfiguration());
 
         LOG.trace("Initiating multipart upload [{}] from exchange [{}]...", createMultipartUploadRequest, exchange);
 
         CreateMultipartUploadResponse initResponse
                 = getEndpoint().getS3Client().createMultipartUpload(createMultipartUploadRequest.build());
-        final long contentLength = Long.parseLong(objectMetadata.get("Content-Length"));
+        //final long contentLength = Long.parseLong(objectMetadata.get("Content-Length"));
         List<CompletedPart> completedParts = new ArrayList<CompletedPart>();
         long partSize = getConfiguration().getPartSize();
         CompleteMultipartUploadResponse uploadResult = null;
@@ -245,7 +259,7 @@ public class AWS2S3Producer extends DefaultProducer {
         Map<String, String> objectMetadata = determineMetadata(exchange);
 
         // the content-length may already be known
-        long contentLength = Long.parseLong(objectMetadata.getOrDefault(Exchange.CONTENT_LENGTH, "-1"));
+        long contentLength = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_LENGTH, -1, Long.class);
 
         Object obj = exchange.getIn().getMandatoryBody();
         InputStream inputStream = null;
@@ -277,9 +291,7 @@ public class AWS2S3Producer extends DefaultProducer {
                     }
                 }
             }
-            if (contentLength > 0) {
-                objectMetadata.put(Exchange.CONTENT_LENGTH, String.valueOf(contentLength));
-            }
+
             doPutObject(exchange, putObjectRequest, objectMetadata, filePayload, inputStream, contentLength);
         } finally {
             IOHelper.close(inputStream);
@@ -313,6 +325,25 @@ public class AWS2S3Producer extends DefaultProducer {
             putObjectRequest.contentType(contentType);
         }
 
+        String cacheControl = exchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL, String.class);
+        if (cacheControl != null) {
+            putObjectRequest.cacheControl(cacheControl);
+        }
+
+        String contentDisposition = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION, String.class);
+        if (contentDisposition != null) {
+            putObjectRequest.contentDisposition(contentDisposition);
+        }
+
+        String contentEncoding = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING, String.class);
+        if (contentEncoding != null) {
+            putObjectRequest.contentEncoding(contentEncoding);
+        }
+
+        if (contentLength > 0) {
+            putObjectRequest.contentLength(contentLength);
+        }
+
         BucketCannedACL acl = exchange.getIn().getHeader(AWS2S3Constants.ACL, BucketCannedACL.class);
         if (acl != null) {
             // note: if cannedacl and acl are both specified the last one will
@@ -610,36 +641,6 @@ public class AWS2S3Producer extends DefaultProducer {
     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(Exchange.CONTENT_LENGTH, String.valueOf(contentLength));
-        }
-
-        String contentType = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_TYPE, String.class);
-        if (contentType != null) {
-            objectMetadata.put("Content-Type", contentType);
-        }
-
-        String cacheControl = exchange.getIn().getHeader(AWS2S3Constants.CACHE_CONTROL, String.class);
-        if (cacheControl != null) {
-            objectMetadata.put("Cache-Control", cacheControl);
-        }
-
-        String contentDisposition = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_DISPOSITION, String.class);
-        if (contentDisposition != null) {
-            objectMetadata.put("Content-Disposition", contentDisposition);
-        }
-
-        String contentEncoding = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_ENCODING, String.class);
-        if (contentEncoding != null) {
-            objectMetadata.put("Content-Encoding", contentEncoding);
-        }
-
-        String contentMD5 = exchange.getIn().getHeader(AWS2S3Constants.CONTENT_MD5, String.class);
-        if (contentMD5 != null) {
-            objectMetadata.put("Content-Md5", contentMD5);
-        }
-
         Map<String, String> metadata = exchange.getIn().getHeader(AWS2S3Constants.METADATA, Map.class);
         if (metadata != null) {
             objectMetadata.putAll(metadata);