You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2022/10/13 17:15:03 UTC

[camel] branch main updated: CAMEL-16484: camel-dropbox - Bump to Dropbox 5.4.2 (#8547)

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

nfilotto 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 d71058254ce CAMEL-16484: camel-dropbox - Bump to Dropbox 5.4.2 (#8547)
d71058254ce is described below

commit d71058254ce7246069de795797958acce3a744e6
Author: Nicolas Filotto <es...@users.noreply.github.com>
AuthorDate: Thu Oct 13 19:14:56 2022 +0200

    CAMEL-16484: camel-dropbox - Bump to Dropbox 5.4.2 (#8547)
    
    ## Motivation
    
    The version of Dropbox used is outdated (3.2.0) so it needs to be upgraded to the latest version.
    
    ## Modifications:
    
    * Fix the existing doc and tests
    * Fix the warnings and deprecated code
    * Upgrade Dropbox to 5.4.2
---
 camel-dependencies/pom.xml                         |   2 +-
 .../apache/camel/component/dropbox/dropbox.json    |   2 +-
 .../src/main/docs/dropbox-component.adoc           |  13 +--
 .../dropbox/DropboxComponentVerifierExtension.java |   5 +-
 .../component/dropbox/DropboxConfiguration.java    |   2 +-
 .../component/dropbox/core/DropboxAPIFacade.java   | 109 +++++++++------------
 .../component/dropbox/dto/DropboxSearchResult.java |   8 +-
 .../consumer/DropboxScheduledPollConsumer.java     |   4 +-
 .../DropboxScheduledPollSearchConsumer.java        |  10 +-
 .../integration/producer/DropboxGetProducer.java   |   4 +-
 .../integration/producer/DropboxProducer.java      |   8 +-
 .../integration/producer/DropboxPutProducer.java   |   4 +-
 .../producer/DropboxSearchProducer.java            |  10 +-
 .../dropbox/integration/DropboxTestSupport.java    |  17 ++--
 .../consumer/DropboxConsumerGetSingleIT.java       |  20 ++--
 .../consumer/DropboxConsumerSearchQueryIT.java     |  20 ++--
 .../producer/DropboxProducerGetFolderIT.java       |  11 ++-
 .../producer/DropboxProducerPutSingleFileIT.java   |  19 ++--
 parent/pom.xml                                     |   2 +-
 19 files changed, 127 insertions(+), 143 deletions(-)

diff --git a/camel-dependencies/pom.xml b/camel-dependencies/pom.xml
index 0650428be3a..7961773bdec 100644
--- a/camel-dependencies/pom.xml
+++ b/camel-dependencies/pom.xml
@@ -174,7 +174,7 @@
     <dnsjava-version>3.5.1</dnsjava-version>
     <docker-java-version>3.2.13</docker-java-version>
     <dozer-version>6.5.2</dozer-version>
-    <dropbox-version>3.2.0</dropbox-version>
+    <dropbox-version>5.4.2</dropbox-version>
     <eddsa-version>0.3.0</eddsa-version>
     <egit-github-core-version>2.1.5</egit-github-core-version>
     <ehcache3-version>3.10.1</ehcache3-version>
diff --git a/components/camel-dropbox/src/generated/resources/org/apache/camel/component/dropbox/dropbox.json b/components/camel-dropbox/src/generated/resources/org/apache/camel/component/dropbox/dropbox.json
index 03f023a154c..626adb07be2 100644
--- a/components/camel-dropbox/src/generated/resources/org/apache/camel/component/dropbox/dropbox.json
+++ b/components/camel-dropbox/src/generated/resources/org/apache/camel/component/dropbox/dropbox.json
@@ -53,7 +53,7 @@
     "newRemotePath": { "kind": "parameter", "displayName": "New Remote Path", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "Destination file or folder" },
     "uploadMode": { "kind": "parameter", "displayName": "Upload Mode", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.dropbox.util.DropboxUploadMode", "enum": [ "add", "force" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "Which mode to upload. in case of add the new fi [...]
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may other [...]
-    "client": { "kind": "parameter", "displayName": "Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "com.dropbox.core.v2.DbxClientV2", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "To use an existing DbxClient instance as DropBox client." },
+    "client": { "kind": "parameter", "displayName": "Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "com.dropbox.core.v2.DbxClientV2", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "To use an existing DbxClient instance as Dropbox client." },
     "accessToken": { "kind": "parameter", "displayName": "Access Token", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "The access token to make API requests for a specific Dropbox user" },
     "apiKey": { "kind": "parameter", "displayName": "Api Key", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "The apiKey to make API requests for a specific Dropbox user" },
     "apiSecret": { "kind": "parameter", "displayName": "Api Secret", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.dropbox.DropboxConfiguration", "configurationField": "configuration", "description": "The apiSecret to make API requests for a specific Dropbox user" },
diff --git a/components/camel-dropbox/src/main/docs/dropbox-component.adoc b/components/camel-dropbox/src/main/docs/dropbox-component.adoc
index eb5d89c370d..608a49f9c3a 100644
--- a/components/camel-dropbox/src/main/docs/dropbox-component.adoc
+++ b/components/camel-dropbox/src/main/docs/dropbox-component.adoc
@@ -173,9 +173,9 @@ The following objects are set on message body result:
 |===
 |Object type |Description
 
-|`ByteArrayOutputStream` |in case of single file download, stream representing the file downloaded
+|`byte[]` or `CachedOutputStream`  if stream caching is enabled |in case of single file download, stream representing the file downloaded
 
-|`Map<String, ByteArrayOutputStream>` |in case of multiple files download, a map with as key the path of the
+|`Map<String, byte[]>` or `Map<String, CachedOutputStream>` if stream caching is enabled |in case of multiple files download, a map with as key the path of the
 remote file downloaded and as value the stream representing the file
 downloaded
 |===
@@ -335,13 +335,8 @@ The following objects are set on message body result:
 |===
 |Object type |Description
 
-|`List<DbxEntry>` |list of file path founded. For more information on this object refer to
-Dropbox documentation,
+|`List<com.dropbox.core.v2.files.SearchMatchV2>` |list of file path founded. For more information on this object refer to
+https://javadoc.io/doc/com.dropbox.core/dropbox-core-sdk/latest/com/dropbox/core/v2/files/SearchMatchV2.html[Dropbox documentation].
 |===
 
-
-
- 
-
-
 include::spring-boot:partial$starter.adoc[]
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
index cd3bc740b83..a993eec2902 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
@@ -64,10 +64,11 @@ public class DropboxComponentVerifierExtension extends DefaultComponentVerifierE
 
         try {
             // Create Dropbox client
-            DbxRequestConfig config = new DbxRequestConfig(clientId, Locale.getDefault().toString());
+            DbxRequestConfig config = DbxRequestConfig.newBuilder(clientId)
+                    .withUserLocaleFrom(Locale.getDefault())
+                    .build();
             DbxClientV2 client = new DbxClientV2(config, token);
             client.users().getCurrentAccount();
-            client = null;
         } catch (Exception e) {
             builder.error(ResultErrorBuilder
                     .withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxConfiguration.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxConfiguration.java
index 45dd768de62..67020218fe9 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxConfiguration.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxConfiguration.java
@@ -74,7 +74,7 @@ public class DropboxConfiguration {
     private DbxClientV2 client;
 
     /**
-     * To use an existing DbxClient instance as DropBox client.
+     * To use an existing DbxClient instance as Dropbox client.
      */
     public void setClient(DbxClientV2 client) {
         this.client = client;
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/core/DropboxAPIFacade.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/core/DropboxAPIFacade.java
index a168f29b756..9a4da2686e2 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/core/DropboxAPIFacade.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/core/DropboxAPIFacade.java
@@ -23,10 +23,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.AbstractMap;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
 
 import com.dropbox.core.DbxDownloader;
@@ -36,8 +34,8 @@ import com.dropbox.core.v2.files.FileMetadata;
 import com.dropbox.core.v2.files.ListFolderErrorException;
 import com.dropbox.core.v2.files.ListFolderResult;
 import com.dropbox.core.v2.files.Metadata;
-import com.dropbox.core.v2.files.SearchMatch;
-import com.dropbox.core.v2.files.SearchResult;
+import com.dropbox.core.v2.files.SearchOptions;
+import com.dropbox.core.v2.files.SearchV2Result;
 import com.dropbox.core.v2.files.WriteMode;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.dropbox.dto.DropboxDelResult;
@@ -50,7 +48,6 @@ import org.apache.camel.component.dropbox.util.DropboxException;
 import org.apache.camel.component.dropbox.util.DropboxResultCode;
 import org.apache.camel.component.dropbox.util.DropboxUploadMode;
 import org.apache.camel.support.builder.OutputStreamBuilder;
-import org.apache.camel.util.IOHelper;
 import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -83,7 +80,7 @@ public final class DropboxAPIFacade {
      *                          case a file with the same name already exists on dropbox. in case of "force" the file
      *                          already existing with the same name will be overridden.
      * @return                  a result object reporting for each remote path the result of the operation.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxFileUploadResult put(String localPath, String remotePath, DropboxUploadMode mode) throws DropboxException {
         // in case the remote path is not specified, the remotePath = localPath
@@ -114,10 +111,8 @@ public final class DropboxAPIFacade {
             }
             // in case the entry not exists on dropbox check if the filename
             // should be appended
-            if (!isPresent) {
-                if (dropboxPath.endsWith(DropboxConstants.DROPBOX_FILE_SEPARATOR)) {
-                    dropboxPath = dropboxPath + fileLocalPath.getName();
-                }
+            if (!isPresent && dropboxPath.endsWith(DropboxConstants.DROPBOX_FILE_SEPARATOR)) {
+                dropboxPath = dropboxPath + fileLocalPath.getName();
             }
 
             LOG.debug("Uploading: {},{}", fileLocalPath, dropboxPath);
@@ -192,10 +187,8 @@ public final class DropboxAPIFacade {
 
         // in case the entry not exists on dropbox check if the filename should
         // be appended
-        if (!isPresent) {
-            if (dropboxPath.endsWith(DropboxConstants.DROPBOX_FILE_SEPARATOR)) {
-                dropboxPath = dropboxPath + name;
-            }
+        if (!isPresent && dropboxPath.endsWith(DropboxConstants.DROPBOX_FILE_SEPARATOR)) {
+            dropboxPath = dropboxPath + name;
         }
 
         LOG.debug("Uploading message body: {}", dropboxPath);
@@ -215,87 +208,69 @@ public final class DropboxAPIFacade {
     }
 
     private FileMetadata putSingleFile(File inputFile, String dropboxPath, DropboxUploadMode mode) throws Exception {
-        FileInputStream inputStream = new FileInputStream(inputFile);
-        FileMetadata uploadedFile;
-        try {
+        try (FileInputStream inputStream = new FileInputStream(inputFile)) {
             WriteMode uploadMode;
             if (mode == DropboxUploadMode.force) {
                 uploadMode = WriteMode.OVERWRITE;
             } else {
                 uploadMode = WriteMode.ADD;
             }
-            uploadedFile = client.files().uploadBuilder(dropboxPath).withMode(uploadMode).uploadAndFinish(inputStream,
+            return client.files().uploadBuilder(dropboxPath).withMode(uploadMode).uploadAndFinish(inputStream,
                     inputFile.length());
-            return uploadedFile;
-        } finally {
-            IOHelper.close(inputStream);
         }
     }
 
     private FileMetadata putSingleBody(Exchange exchange, String dropboxPath, DropboxUploadMode mode) throws Exception {
         byte[] data = exchange.getIn().getMandatoryBody(byte[].class);
-        InputStream is = new ByteArrayInputStream(data);
-        try {
-            FileMetadata uploadedFile;
-            WriteMode uploadMode;
+        try (InputStream is = new ByteArrayInputStream(data)) {
+            final WriteMode uploadMode;
             if (mode == DropboxUploadMode.force) {
                 uploadMode = WriteMode.OVERWRITE;
             } else {
                 uploadMode = WriteMode.ADD;
             }
-            uploadedFile = client.files().uploadBuilder(dropboxPath).withMode(uploadMode).uploadAndFinish(is, data.length);
-            return uploadedFile;
-        } finally {
-            IOHelper.close(is);
+            return client.files().uploadBuilder(dropboxPath).withMode(uploadMode).uploadAndFinish(is, data.length);
         }
     }
 
     /**
-     * Search inside a remote path including its sub directories. The query param can be null.
+     * Search inside a remote path including its subdirectories. The query param can be null.
      *
      * @param  remotePath       the remote path where starting the search from
      * @param  query            a space-separated list of substrings to search for. A file matches only if it contains
      *                          all the substrings
      * @return                  a result object containing all the files found.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxSearchResult search(String remotePath, String query) throws DropboxException {
-        SearchResult listing;
-        List<SearchMatch> searchMatches;
         if (query == null) {
             LOG.debug("Search no query");
-            try {
-                listing = client.files().search(remotePath, null);
-                searchMatches = listing.getMatches();
-                return new DropboxSearchResult(searchMatches);
-            } catch (DbxException e) {
-                throw new DropboxException(remotePath + " does not exist or cannot obtain metadata", e);
-            }
         } else {
             LOG.debug("Search by query: {}", query);
-            try {
-                listing = client.files().search(remotePath, query);
-                searchMatches = listing.getMatches();
-                return new DropboxSearchResult(searchMatches);
-            } catch (DbxException e) {
-                throw new DropboxException(remotePath + " does not exist or cannot obtain metadata", e);
-            }
+        }
+        try {
+            SearchV2Result listing = client.files().searchV2Builder(query)
+                    .withOptions(SearchOptions.newBuilder().withPath(remotePath).build())
+                    .start();
+            return new DropboxSearchResult(listing.getMatches());
+        } catch (DbxException e) {
+            throw new DropboxException(String.format("%s does not exist or cannot obtain metadata", remotePath), e);
         }
     }
 
     /**
-     * Delete every files and subdirectories inside the remote directory. In case the remotePath is a file, delete the
+     * Delete every file and subdirectory inside the remote directory. In case the remotePath is a file, delete the
      * file.
      *
      * @param  remotePath       the remote location to delete
      * @return                  a result object with the result of the delete operation.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxDelResult del(String remotePath) throws DropboxException {
         try {
             client.files().deleteV2(remotePath);
         } catch (DbxException e) {
-            throw new DropboxException(remotePath + " does not exist or cannot obtain metadata", e);
+            throw new DropboxException(String.format("%s does not exist or cannot obtain metadata", remotePath), e);
         }
         return new DropboxDelResult(remotePath);
     }
@@ -306,7 +281,7 @@ public final class DropboxAPIFacade {
      * @param  remotePath       the existing remote path to be renamed
      * @param  newRemotePath    the new remote path substituting the old one
      * @return                  a result object with the result of the move operation.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxMoveResult move(String remotePath, String newRemotePath) throws DropboxException {
         try {
@@ -323,7 +298,7 @@ public final class DropboxAPIFacade {
      * @param  remotePath       the remote path where to download from
      * @return                  a result object with the content (ByteArrayOutputStream) of every files inside the
      *                          remote path.
-     * @throws DropboxException
+     * @throws DropboxException if an error occurs
      */
     public DropboxFileDownloadResult get(String remotePath) throws DropboxException {
         return new DropboxFileDownloadResult(downloadFilesInFolder(remotePath));
@@ -334,18 +309,24 @@ public final class DropboxAPIFacade {
             ListFolderResult folderResult = client.files().listFolder(path.equals("/") ? "" : path);
             Map<String, Object> returnMap = new LinkedHashMap<>();
             for (Metadata entry : folderResult.getEntries()) {
-                returnMap.put(entry.getPathDisplay(), downloadSingleFile(entry.getPathDisplay()).getValue());
+                Map.Entry<String, Object> singleFile = downloadSingleFile(entry.getPathDisplay());
+                if (singleFile == null) {
+                    continue;
+                }
+                returnMap.put(entry.getPathDisplay(), singleFile.getValue());
             }
             return returnMap;
         } catch (ListFolderErrorException e) {
-            try {
-                DbxDownloader<FileMetadata> listing = client.files().download(path);
+            try (DbxDownloader<FileMetadata> listing = client.files().download(path)) {
                 if (listing == null) {
-                    return Collections.emptyMap();
+                    return Map.of();
                 } else {
                     LOG.debug("downloading a single file...");
                     Map.Entry<String, Object> entry = downloadSingleFile(path);
-                    return Collections.singletonMap(entry.getKey(), entry.getValue());
+                    if (entry == null) {
+                        return Map.of();
+                    }
+                    return Map.of(entry.getKey(), entry.getValue());
                 }
             } catch (DbxException dbxException) {
                 throw new DropboxException(dbxException);
@@ -356,16 +337,14 @@ public final class DropboxAPIFacade {
     }
 
     private Map.Entry<String, Object> downloadSingleFile(String path) throws DropboxException {
-        try {
-            OutputStreamBuilder target = OutputStreamBuilder.withExchange(exchange);
-            DbxDownloader<FileMetadata> downloadedFile = client.files().download(path);
-            if (downloadedFile != null) {
-                downloadedFile.download(target);
-                LOG.debug("downloaded path={}", path);
-                return new AbstractMap.SimpleEntry<>(path, target.build());
-            } else {
+        try (OutputStreamBuilder target = OutputStreamBuilder.withExchange(exchange);
+             DbxDownloader<FileMetadata> downloadedFile = client.files().download(path)) {
+            if (downloadedFile == null) {
                 return null;
             }
+            downloadedFile.download(target);
+            LOG.debug("downloaded path={}", path);
+            return new AbstractMap.SimpleEntry<>(path, target.build());
         } catch (DbxException e) {
             throw new DropboxException(path + " does not exist or cannot obtain metadata", e);
         } catch (IOException e) {
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxSearchResult.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxSearchResult.java
index ce54a6f8841..cab9f9abaa5 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxSearchResult.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxSearchResult.java
@@ -20,17 +20,17 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import com.dropbox.core.v2.files.SearchMatch;
+import com.dropbox.core.v2.files.SearchMatchV2;
 
 public class DropboxSearchResult {
 
-    private final List<SearchMatch> found;
+    private final List<SearchMatchV2> found;
 
-    public DropboxSearchResult(List<SearchMatch> found) {
+    public DropboxSearchResult(List<SearchMatchV2> found) {
         this.found = new ArrayList<>(found);
     }
 
-    public List<SearchMatch> getFound() {
+    public List<SearchMatchV2> getFound() {
         return Collections.unmodifiableList(found);
     }
 
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
index 36f82524e5c..91e328fc9ca 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
@@ -47,7 +47,7 @@ public abstract class DropboxScheduledPollConsumer extends ScheduledPollConsumer
             //create dropbox client
             configuration.createClient();
 
-            LOG.debug("Consumer DropBox client created");
+            LOG.debug("Consumer Dropbox client created");
         }
 
         super.doStart();
@@ -61,7 +61,7 @@ public abstract class DropboxScheduledPollConsumer extends ScheduledPollConsumer
         if (configuration.getClient() == null) {
             configuration.setClient(null);
 
-            LOG.debug("Consumer DropBox client deleted");
+            LOG.debug("Consumer Dropbox client deleted");
         }
         super.doStop();
     }
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollSearchConsumer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollSearchConsumer.java
index 0e2beadf3a0..7a92cb82a5e 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollSearchConsumer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollSearchConsumer.java
@@ -16,7 +16,8 @@
  */
 package org.apache.camel.component.dropbox.integration.consumer;
 
-import com.dropbox.core.v2.files.SearchMatch;
+import com.dropbox.core.v2.files.Metadata;
+import com.dropbox.core.v2.files.SearchMatchV2;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.dropbox.DropboxConfiguration;
@@ -45,9 +46,10 @@ public class DropboxScheduledPollSearchConsumer extends DropboxScheduledPollCons
                     .search(configuration.getRemotePath(), configuration.getQuery());
 
             StringBuilder fileExtracted = new StringBuilder();
-            for (SearchMatch entry : result.getFound()) {
-                fileExtracted.append(entry.getMetadata().getName()).append("-").append(entry.getMetadata().getPathDisplay())
-                        .append("\n");
+            for (SearchMatchV2 entry : result.getFound()) {
+                Metadata metadata = entry.getMetadata().getMetadataValue();
+                fileExtracted.append(metadata.getName()).append('-').append(metadata.getPathDisplay())
+                        .append('\n');
             }
 
             exchange.getIn().setHeader(DropboxConstants.FOUND_FILES, fileExtracted.toString());
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxGetProducer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxGetProducer.java
index 457d0a40c9a..95ae5337c0a 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxGetProducer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxGetProducer.java
@@ -30,7 +30,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class DropboxGetProducer extends DropboxProducer {
-    private static final transient Logger LOG = LoggerFactory.getLogger(DropboxGetProducer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DropboxGetProducer.class);
 
     public DropboxGetProducer(DropboxEndpoint endpoint, DropboxConfiguration configuration) {
         super(endpoint, configuration);
@@ -53,7 +53,7 @@ public class DropboxGetProducer extends DropboxProducer {
         } else {
             StringBuilder pathsExtracted = new StringBuilder();
             for (Map.Entry<String, Object> entry : map.entrySet()) {
-                pathsExtracted.append(entry.getKey()).append("\n");
+                pathsExtracted.append(entry.getKey()).append('\n');
             }
             exchange.getIn().setHeader(DropboxConstants.DOWNLOADED_FILES, pathsExtracted.toString());
             exchange.getIn().setBody(map);
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducer.java
index ce7599fae98..8aa07605095 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducer.java
@@ -24,12 +24,12 @@ import org.slf4j.LoggerFactory;
 
 public abstract class DropboxProducer extends DefaultProducer {
 
-    private static final transient Logger LOG = LoggerFactory.getLogger(DropboxProducer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DropboxProducer.class);
 
     protected final DropboxEndpoint endpoint;
     protected final DropboxConfiguration configuration;
 
-    public DropboxProducer(DropboxEndpoint endpoint, DropboxConfiguration configuration) {
+    protected DropboxProducer(DropboxEndpoint endpoint, DropboxConfiguration configuration) {
         super(endpoint);
         this.endpoint = endpoint;
         this.configuration = configuration;
@@ -41,7 +41,7 @@ public abstract class DropboxProducer extends DefaultProducer {
             //create dropbox client
             configuration.createClient();
 
-            LOG.debug("Producer DropBox client created");
+            LOG.debug("Producer Dropbox client created");
         }
 
         super.doStart();
@@ -52,7 +52,7 @@ public abstract class DropboxProducer extends DefaultProducer {
         if (configuration.getClient() == null) {
             configuration.setClient(null);
 
-            LOG.debug("Producer DropBox client deleted");
+            LOG.debug("Producer Dropbox client deleted");
         }
         super.doStop();
     }
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxPutProducer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxPutProducer.java
index 03cbc54e176..b551f18629a 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxPutProducer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxPutProducer.java
@@ -32,7 +32,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class DropboxPutProducer extends DropboxProducer {
-    private static final transient Logger LOG = LoggerFactory.getLogger(DropboxPutProducer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DropboxPutProducer.class);
 
     public DropboxPutProducer(DropboxEndpoint endpoint, DropboxConfiguration configuration) {
         super(endpoint, configuration);
@@ -59,7 +59,7 @@ public class DropboxPutProducer extends DropboxProducer {
         } else {
             StringBuilder pathsExtracted = new StringBuilder();
             for (Map.Entry<String, DropboxResultCode> entry : map.entrySet()) {
-                pathsExtracted.append(entry.getKey()).append("\n");
+                pathsExtracted.append(entry.getKey()).append('\n');
             }
             exchange.getIn().setHeader(DropboxConstants.UPLOADED_FILES, pathsExtracted.toString());
             exchange.getIn().setBody(map);
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxSearchProducer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxSearchProducer.java
index e0847c1bc82..8823be60942 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxSearchProducer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/producer/DropboxSearchProducer.java
@@ -16,7 +16,8 @@
  */
 package org.apache.camel.component.dropbox.integration.producer;
 
-import com.dropbox.core.v2.files.SearchMatch;
+import com.dropbox.core.v2.files.Metadata;
+import com.dropbox.core.v2.files.SearchMatchV2;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.dropbox.DropboxConfiguration;
 import org.apache.camel.component.dropbox.DropboxEndpoint;
@@ -43,9 +44,10 @@ public class DropboxSearchProducer extends DropboxProducer {
                 .search(remotePath, query);
 
         StringBuilder fileExtracted = new StringBuilder();
-        for (SearchMatch entry : result.getFound()) {
-            fileExtracted.append(entry.getMetadata().getName()).append("-").append(entry.getMetadata().getPathDisplay())
-                    .append("\n");
+        for (SearchMatchV2 entry : result.getFound()) {
+            Metadata metadataValue = entry.getMetadata().getMetadataValue();
+            fileExtracted.append(metadataValue.getName()).append('-').append(metadataValue.getPathDisplay())
+                    .append('\n');
         }
         exchange.getIn().setHeader(DropboxConstants.FOUND_FILES, fileExtracted.toString());
         exchange.getIn().setBody(result.getFound());
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
index 4664a6b684b..01963ca4471 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
@@ -45,7 +45,7 @@ public class DropboxTestSupport extends CamelTestSupport {
     protected String refreshToken;
     protected Long expireIn;
 
-    private DbxClientV2 client;
+    private final DbxClientV2 client;
 
     protected DropboxTestSupport() {
         properties = loadProperties();
@@ -91,12 +91,12 @@ public class DropboxTestSupport extends CamelTestSupport {
         try {
             removeDir(name);
         } finally {
-            client.files().createFolder(name);
+            client.files().createFolderV2(name);
         }
     }
 
     protected void removeDir(String name) throws DbxException {
-        client.files().delete(name);
+        client.files().deleteV2(name);
     }
 
     protected void createFile(String fileName, String content) throws IOException {
@@ -113,12 +113,13 @@ public class DropboxTestSupport extends CamelTestSupport {
     }
 
     protected String getFileContent(String path) throws DbxException, IOException {
-        ByteArrayOutputStream target = new ByteArrayOutputStream();
-        DbxDownloader<FileMetadata> downloadedFile = client.files().download(path);
-        if (downloadedFile != null) {
-            downloadedFile.download(target);
+        try (ByteArrayOutputStream target = new ByteArrayOutputStream();
+             DbxDownloader<FileMetadata> downloadedFile = client.files().download(path)) {
+            if (downloadedFile != null) {
+                downloadedFile.download(target);
+            }
+            return target.toString();
         }
-        return new String(target.toByteArray());
     }
 
     @Override
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerGetSingleIT.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerGetSingleIT.java
index dad8edc993a..89cf369fdcc 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerGetSingleIT.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerGetSingleIT.java
@@ -24,21 +24,21 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
 @EnabledIf("org.apache.camel.component.dropbox.integration.DropboxTestSupport#hasCredentials")
-public class DropboxConsumerGetSingleIT extends DropboxTestSupport {
+class DropboxConsumerGetSingleIT extends DropboxTestSupport {
 
     public static final String FILE_NAME = "myFile.txt";
 
     @Test
-    public void testCamelDropbox() throws Exception {
+    void testCamelDropbox() throws Exception {
         final String content = "Hi camels";
         createFile(FILE_NAME, content);
 
-        context.start();
-
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived(content);
         mock.expectedHeaderReceived(DropboxResultHeader.DOWNLOADED_FILE.name(), String.format("%s/%s", workdir, FILE_NAME));
+
+        context.getRouteController().startRoute("consumer");
         mock.assertIsSatisfied();
     }
 
@@ -46,12 +46,12 @@ public class DropboxConsumerGetSingleIT extends DropboxTestSupport {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from(String.format("dropbox://get?accessToken={{accessToken}}" +
-                                   "&expireIn={{expireIn}}" +
-                                   "&refreshToken={{refreshToken}}" +
-                                   "&apiKey={{apiKey}}&apiSecret={{apiSecret}}" +
-                                   "&remotePath=%s/%s",
-                        workdir, FILE_NAME))
+                fromF("dropbox://get?accessToken={{accessToken}}" +
+                      "&expireIn={{expireIn}}" +
+                      "&refreshToken={{refreshToken}}" +
+                      "&apiKey={{apiKey}}&apiSecret={{apiSecret}}" +
+                      "&remotePath=%s/%s",
+                        workdir, FILE_NAME)
                                 .autoStartup(false).id("consumer")
                                 .to("mock:result");
             }
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerSearchQueryIT.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerSearchQueryIT.java
index bc6b83c29f4..925d6ec0177 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerSearchQueryIT.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/consumer/DropboxConsumerSearchQueryIT.java
@@ -24,20 +24,20 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
 @EnabledIf("org.apache.camel.component.dropbox.integration.DropboxTestSupport#hasCredentials")
-public class DropboxConsumerSearchQueryIT extends DropboxTestSupport {
+class DropboxConsumerSearchQueryIT extends DropboxTestSupport {
 
     public static final String FILE_NAME = "myTestFile.txt";
 
     @Test
-    public void testCamelDropbox() throws Exception {
+    void testCamelDropbox() throws Exception {
         final String content = "Hi camels";
         createFile(FILE_NAME, content);
 
-        context.start();
-
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
         mock.message(0).header(DropboxResultHeader.FOUND_FILES.name()).contains(String.format("%s/%s", workdir, FILE_NAME));
+
+        context.getRouteController().startRoute("consumer");
         mock.assertIsSatisfied();
     }
 
@@ -45,12 +45,12 @@ public class DropboxConsumerSearchQueryIT extends DropboxTestSupport {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from(String.format("dropbox://search?accessToken={{accessToken}}" +
-                                   "&expireIn={{expireIn}}" +
-                                   "&refreshToken={{refreshToken}}" +
-                                   "&apiKey={{apiKey}}&apiSecret={{apiSecret}}" +
-                                   "&remotePath=%s&query=%s",
-                        workdir, FILE_NAME))
+                fromF("dropbox://search?accessToken={{accessToken}}" +
+                      "&expireIn={{expireIn}}" +
+                      "&refreshToken={{refreshToken}}" +
+                      "&apiKey={{apiKey}}&apiSecret={{apiSecret}}" +
+                      "&remotePath=%s&query=%s",
+                        workdir, FILE_NAME)
                                 .id("consumer").autoStartup(false)
                                 .to("mock:result");
             }
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderIT.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderIT.java
index efbca85bea8..a270cd16b34 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderIT.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderIT.java
@@ -31,7 +31,7 @@ import org.junit.jupiter.api.condition.EnabledIf;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @EnabledIf("org.apache.camel.component.dropbox.integration.DropboxTestSupport#hasCredentials")
-public class DropboxProducerGetFolderIT extends DropboxTestSupport {
+class DropboxProducerGetFolderIT extends DropboxTestSupport {
 
     public static final String FILE_NAME1 = "myFile.txt";
     public static final String FILE_NAME2 = "myFile2.txt";
@@ -45,17 +45,17 @@ public class DropboxProducerGetFolderIT extends DropboxTestSupport {
     }
 
     @Test
-    public void testCamelDropbox() throws Exception {
+    void testCamelDropbox() throws Exception {
         test("direct:start");
     }
 
     @Test
-    public void testCamelDropboxWithOptionInHeader() throws Exception {
+    void testCamelDropboxWithOptionInHeader() throws Exception {
         test("direct:start2");
     }
 
     @Test
-    public void testCamelDropboxHeaderHasPriorityOnParameter() throws Exception {
+    void testCamelDropboxHeaderHasPriorityOnParameter() throws Exception {
         test("direct:start3");
     }
 
@@ -79,6 +79,7 @@ public class DropboxProducerGetFolderIT extends DropboxTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:start")
+                        .noStreamCaching()
                         .to("dropbox://get?accessToken={{accessToken}}" +
                             "&expireIn={{expireIn}}" +
                             "&refreshToken={{refreshToken}}" +
@@ -87,6 +88,7 @@ public class DropboxProducerGetFolderIT extends DropboxTestSupport {
                         .to("mock:result");
 
                 from("direct:start2")
+                        .noStreamCaching()
                         .setHeader(DropboxConstants.HEADER_REMOTE_PATH, constant(workdir))
                         .to("dropbox://get?accessToken={{accessToken}}" +
                             "&expireIn={{expireIn}}" +
@@ -95,6 +97,7 @@ public class DropboxProducerGetFolderIT extends DropboxTestSupport {
                         .to("mock:result");
 
                 from("direct:start3")
+                        .noStreamCaching()
                         .setHeader(DropboxConstants.HEADER_REMOTE_PATH, constant(workdir))
                         .to("dropbox://get?accessToken={{accessToken}}" +
                             "&expireIn={{expireIn}}" +
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileIT.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileIT.java
index f869ce66e88..7613ee7cf11 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileIT.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileIT.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.dropbox.integration.DropboxTestSupport;
 import org.apache.camel.component.dropbox.util.DropboxConstants;
@@ -35,14 +36,14 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 
 @EnabledIf("org.apache.camel.component.dropbox.integration.DropboxTestSupport#hasCredentials")
-public class DropboxProducerPutSingleFileIT extends DropboxTestSupport {
+class DropboxProducerPutSingleFileIT extends DropboxTestSupport {
     public static final String FILENAME = "newFile.txt";
 
     @Test
-    public void testCamelDropboxWithOptionInHeader() throws Exception {
+    void testCamelDropboxWithOptionInHeader() throws Exception {
         final Path file = Files.createTempFile("camel", ".txt");
         final Map<String, Object> headers = new HashMap<>();
         headers.put(DropboxConstants.HEADER_LOCAL_PATH, file.toAbsolutePath().toString());
@@ -53,25 +54,25 @@ public class DropboxProducerPutSingleFileIT extends DropboxTestSupport {
     }
 
     @Test
-    public void uploadBodyTest() throws Exception {
-        template.sendBodyAndHeader("direct:start", "Helo Camels", DropboxConstants.HEADER_UPLOAD_MODE, DropboxUploadMode.add);
+    void uploadBodyTest() throws Exception {
+        template.sendBodyAndHeader("direct:start", "Hello Camels", DropboxConstants.HEADER_UPLOAD_MODE, DropboxUploadMode.add);
 
         assertFileUploaded();
     }
 
     @Test
-    public void uploadIfExistsAddTest() throws Exception {
+    void uploadIfExistsAddTest() throws Exception {
         createFile(FILENAME, "content");
         final Path file = Files.createTempFile("camel", ".txt");
         final Map<String, Object> headers = new HashMap<>();
         headers.put(DropboxConstants.HEADER_LOCAL_PATH, file.toAbsolutePath().toString());
         headers.put(DropboxConstants.HEADER_UPLOAD_MODE, DropboxUploadMode.add);
-        assertThrows(DropboxException.class,
-                () -> template.sendBodyAndHeaders("direct:start", null, headers));
+        Exchange exchange = template.send("direct:start", ex -> ex.getIn().setHeaders(headers));
+        assertInstanceOf(DropboxException.class, exchange.getException());
     }
 
     @Test
-    public void uploadIfExistsForceTest() throws Exception {
+    void uploadIfExistsForceTest() throws Exception {
         final String newContent = UUID.randomUUID().toString();
         createFile(FILENAME, "Hi camels");
         final Path file = Files.createTempFile("camel", ".txt");
diff --git a/parent/pom.xml b/parent/pom.xml
index a0bd149591e..065670bb149 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -153,7 +153,7 @@
         <djl-tensorflow-native-version>2.4.1</djl-tensorflow-native-version>
         <docker-java-version>3.2.13</docker-java-version>
         <dozer-version>6.5.2</dozer-version>
-        <dropbox-version>3.2.0</dropbox-version>
+        <dropbox-version>5.4.2</dropbox-version>
         <debezium-version>1.9.6.Final</debezium-version>
         <debezium-mysql-connector-version>8.0.28</debezium-mysql-connector-version>
         <eddsa-version>0.3.0</eddsa-version>