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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 25628a8  (chores) fix resource leaks in camel-grape and camel-minio 
(#6005)
25628a8 is described below

commit 25628a8919c403b25ce89dd485fe59278b7effd7
Author: Otavio Rodolfo Piske <orpi...@users.noreply.github.com>
AuthorDate: Mon Aug 30 10:56:11 2021 +0200

    (chores) fix resource leaks in camel-grape and camel-minio (#6005)
---
 .../component/grape/FilePatchesRepository.java     |   4 +-
 .../camel/component/minio/MinioProducer.java       | 103 +++++++++++++--------
 2 files changed, 67 insertions(+), 40 deletions(-)

diff --git 
a/components/camel-grape/src/main/java/org/apache/camel/component/grape/FilePatchesRepository.java
 
b/components/camel-grape/src/main/java/org/apache/camel/component/grape/FilePatchesRepository.java
index ed50910..fc75039 100644
--- 
a/components/camel-grape/src/main/java/org/apache/camel/component/grape/FilePatchesRepository.java
+++ 
b/components/camel-grape/src/main/java/org/apache/camel/component/grape/FilePatchesRepository.java
@@ -62,8 +62,8 @@ public class FilePatchesRepository implements 
PatchesRepository {
 
     @Override
     public List<String> listPatches() {
-        try {
-            return IOUtils.readLines(new FileReader(repository));
+        try (FileReader reader = new FileReader(repository)) {
+            return IOUtils.readLines(reader);
         } catch (IOException e) {
             throw new IOError(e);
         }
diff --git 
a/components/camel-minio/src/main/java/org/apache/camel/component/minio/MinioProducer.java
 
b/components/camel-minio/src/main/java/org/apache/camel/component/minio/MinioProducer.java
index 5ed607a..a0a1c29 100644
--- 
a/components/camel-minio/src/main/java/org/apache/camel/component/minio/MinioProducer.java
+++ 
b/components/camel-minio/src/main/java/org/apache/camel/component/minio/MinioProducer.java
@@ -22,6 +22,8 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -37,6 +39,12 @@ import io.minio.RemoveBucketArgs;
 import io.minio.RemoveObjectArgs;
 import io.minio.RemoveObjectsArgs;
 import io.minio.Result;
+import io.minio.errors.ErrorResponseException;
+import io.minio.errors.InsufficientDataException;
+import io.minio.errors.InternalException;
+import io.minio.errors.InvalidResponseException;
+import io.minio.errors.ServerException;
+import io.minio.errors.XmlParserException;
 import io.minio.messages.Bucket;
 import io.minio.messages.Item;
 import org.apache.camel.Endpoint;
@@ -128,62 +136,81 @@ public class MinioProducer extends DefaultProducer {
             Map<String, String> extraHeaders = determineExtraHeaders(exchange);
 
             File filePayload = null;
-            InputStream inputStream;
-            ByteArrayOutputStream baos;
+
             Object object = exchange.getIn().getMandatoryBody();
 
             // Need to check if the message body is WrappedFile
             if (object instanceof WrappedFile) {
                 object = ((WrappedFile<?>) object).getFile();
             }
-            if (object instanceof File) {
-                filePayload = (File) object;
-                inputStream = new FileInputStream(filePayload);
-            } else {
-                inputStream = 
exchange.getIn().getMandatoryBody(InputStream.class);
-                if (objectMetadata.containsKey(Exchange.CONTENT_LENGTH)) {
-                    if (objectMetadata.get("Content-Length").equals("0")
-                            && 
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(inputStream);
-                        objectMetadata.put("Content-Length", 
String.valueOf(baos.size()));
-                        inputStream = new 
ByteArrayInputStream(baos.toByteArray());
-                    } else {
-                        if 
(isNotEmpty(exchange.getProperty(Exchange.CONTENT_LENGTH))) {
-                            objectMetadata.put("Content-Length", 
exchange.getProperty(Exchange.CONTENT_LENGTH, String.class));
-                        }
-                    }
+
+            InputStream inputStream = null;
+            try {
+                if (object instanceof File) {
+                    filePayload = (File) object;
+                    inputStream = new FileInputStream(filePayload);
+                } else {
+                    inputStream = getInputStreamFromExchange(exchange, 
objectMetadata);
                 }
+
+                doPutObject(exchange, bucketName, objectName, objectMetadata, 
extraHeaders, inputStream);
+            } finally {
+                IOHelper.close(inputStream);
             }
-            PutObjectArgs.Builder putObjectRequest = PutObjectArgs.builder()
-                    .stream(inputStream, inputStream.available(), -1)
-                    .bucket(bucketName)
-                    .object(objectName)
-                    .userMetadata(objectMetadata);
 
-            if (!extraHeaders.isEmpty()) {
-                putObjectRequest.extraHeaders(extraHeaders);
+            if (getConfiguration().isDeleteAfterWrite() && 
isNotEmpty(filePayload)) {
+                FileUtil.deleteFile(filePayload);
             }
+        }
+    }
 
-            LOG.trace("Put object from exchange...");
+    private void doPutObject(
+            Exchange exchange, String bucketName, String objectName, 
Map<String, String> objectMetadata,
+            Map<String, String> extraHeaders, InputStream inputStream)
+            throws IOException, ErrorResponseException, 
InsufficientDataException, InternalException, InvalidKeyException,
+            InvalidResponseException, NoSuchAlgorithmException, 
ServerException, XmlParserException {
+        PutObjectArgs.Builder putObjectRequest = PutObjectArgs.builder()
+                .stream(inputStream, inputStream.available(), -1)
+                .bucket(bucketName)
+                .object(objectName)
+                .userMetadata(objectMetadata);
+
+        if (!extraHeaders.isEmpty()) {
+            putObjectRequest.extraHeaders(extraHeaders);
+        }
 
-            ObjectWriteResponse putObjectResult = 
getEndpoint().getMinioClient().putObject(putObjectRequest.build());
+        LOG.trace("Put object from exchange...");
 
-            LOG.trace("Received result...");
+        ObjectWriteResponse putObjectResult = 
getEndpoint().getMinioClient().putObject(putObjectRequest.build());
 
-            Message message = getMessageForResponse(exchange);
-            message.setHeader(MinioConstants.E_TAG, putObjectResult.etag());
-            if (isNotEmpty(putObjectResult.versionId())) {
-                message.setHeader(MinioConstants.VERSION_ID, 
putObjectResult.versionId());
-            }
+        LOG.trace("Received result...");
 
-            IOHelper.close(inputStream);
+        Message message = getMessageForResponse(exchange);
+        message.setHeader(MinioConstants.E_TAG, putObjectResult.etag());
+        if (isNotEmpty(putObjectResult.versionId())) {
+            message.setHeader(MinioConstants.VERSION_ID, 
putObjectResult.versionId());
+        }
+    }
 
-            if (getConfiguration().isDeleteAfterWrite() && 
isNotEmpty(filePayload)) {
-                FileUtil.deleteFile(filePayload);
+    private InputStream getInputStreamFromExchange(Exchange exchange, 
Map<String, String> objectMetadata)
+            throws InvalidPayloadException, IOException {
+        InputStream inputStream = 
exchange.getIn().getMandatoryBody(InputStream.class);
+
+        if (objectMetadata.containsKey(Exchange.CONTENT_LENGTH)) {
+            if (objectMetadata.get("Content-Length").equals("0")
+                    && 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");
+                ByteArrayOutputStream baos = 
determineLengthInputStream(inputStream);
+                objectMetadata.put("Content-Length", 
String.valueOf(baos.size()));
+                inputStream = new ByteArrayInputStream(baos.toByteArray());
+            } else {
+                if (isNotEmpty(exchange.getProperty(Exchange.CONTENT_LENGTH))) 
{
+                    objectMetadata.put("Content-Length", 
exchange.getProperty(Exchange.CONTENT_LENGTH, String.class));
+                }
             }
         }
+        return inputStream;
     }
 
     private Map<String, String> determineExtraHeaders(Exchange exchange) {

Reply via email to