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