This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.18.x by this push:
new 7d680e30a39f [backport camel-4.18.x] CAMEL-24231: camel-ftp - Fix
pollNamedFile to use dynamic exchange for useList=false (#25038)
7d680e30a39f is described below
commit 7d680e30a39f2fd5a5f04a373704c588d13da177
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Jul 23 09:39:16 2026 +0200
[backport camel-4.18.x] CAMEL-24231: camel-ftp - Fix pollNamedFile to use
dynamic exchange for useList=false (#25038)
CAMEL-24231: camel-ftp - Fix pollNamedFile to use dynamic exchange for
useList=false
Signed-off-by: Claus Ibsen <[email protected]>
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
.../org/apache/camel/component/file/GenericFileHelper.java | 13 +++++++++++--
.../org/apache/camel/component/file/remote/FtpConsumer.java | 12 ++++++------
.../apache/camel/component/file/remote/SftpConsumer.java | 12 ++++++------
.../camel/component/file/remote/mina/MinaSftpConsumer.java | 12 ++++++------
4 files changed, 29 insertions(+), 20 deletions(-)
diff --git
a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileHelper.java
b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileHelper.java
index 47753ef25b7f..7c73d148ac67 100644
---
a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileHelper.java
+++
b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileHelper.java
@@ -90,8 +90,18 @@ public final class GenericFileHelper {
public static <T> Exchange createDummy(GenericFileEndpoint<T> endpoint,
Exchange dynamic, Supplier<GenericFile<T>> file) {
Exchange dummy = endpoint.createExchange(file.get());
+ enrichFromDynamic(dummy, dynamic);
+ return dummy;
+ }
+
+ public static <T> Exchange createDummy(GenericFileEndpoint<T> endpoint,
Exchange dynamic) {
+ Exchange dummy = endpoint.createExchange();
+ enrichFromDynamic(dummy, dynamic);
+ return dummy;
+ }
+
+ private static void enrichFromDynamic(Exchange dummy, Exchange dynamic) {
if (dynamic != null) {
- // enrich with data from dynamic source
if (dynamic.getMessage().hasHeaders()) {
MessageHelper.copyHeaders(dynamic.getMessage(),
dummy.getMessage(), true);
}
@@ -102,7 +112,6 @@ public final class GenericFileHelper {
dummy.getProperties().putAll(dynamic.getProperties());
}
}
- return dummy;
}
}
diff --git
a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
index 7811baa33f9f..5f6f2ea55ec3 100644
---
a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
+++
b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
@@ -27,9 +27,9 @@ import org.apache.camel.Processor;
import org.apache.camel.api.management.ManagedAttribute;
import org.apache.camel.api.management.ManagedResource;
import org.apache.camel.component.file.GenericFile;
+import org.apache.camel.component.file.GenericFileHelper;
import org.apache.camel.component.file.GenericFileOperationFailedException;
import org.apache.camel.component.file.GenericFileProcessStrategy;
-import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
@@ -136,7 +136,7 @@ public class FtpConsumer extends
RemoteFileConsumer<FTPFile> {
// compute dir depending on stepwise is enabled or not
final String dir = computeDir(absolutePath, dirName);
- final FTPFile[] files = getFtpFiles(dir);
+ final FTPFile[] files = getFtpFiles(dynamic, dir);
if (files == null || files.length == 0) {
// no files in this directory to poll
@@ -235,11 +235,11 @@ public class FtpConsumer extends
RemoteFileConsumer<FTPFile> {
return dir;
}
- private FTPFile[] pollNamedFile() {
+ private FTPFile[] pollNamedFile(Exchange dynamic) {
FTPFile[] files = null;
// we cannot use the LIST command(s) so we can only poll a named
// file so created a pseudo file with that name
- Exchange dummy =
ExchangeHelper.getDummy(getEndpoint().getCamelContext());
+ Exchange dummy = GenericFileHelper.createDummy(getEndpoint(), dynamic);
String name = evaluateFileExpression(dummy);
if (name != null) {
FTPFile file = new FTPFile();
@@ -259,14 +259,14 @@ public class FtpConsumer extends
RemoteFileConsumer<FTPFile> {
return operations.listFiles(dir);
}
- private FTPFile[] getFtpFiles(String dir) {
+ private FTPFile[] getFtpFiles(Exchange dynamic, String dir) {
FTPFile[] files = null;
try {
LOG.trace("Polling directory: {}", dir);
if (isUseList()) {
files = listFiles(dir);
} else {
- files = pollNamedFile();
+ files = pollNamedFile(dynamic);
}
} catch (GenericFileOperationFailedException e) {
if (ignoreCannotRetrieveFile(null, null, e)) {
diff --git
a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
index 32e7011cbb44..babcc702ff47 100644
---
a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
+++
b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
@@ -27,9 +27,9 @@ import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.component.file.GenericFile;
+import org.apache.camel.component.file.GenericFileHelper;
import org.apache.camel.component.file.GenericFileOperationFailedException;
import org.apache.camel.component.file.GenericFileProcessStrategy;
-import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
@@ -136,7 +136,7 @@ public class SftpConsumer extends
RemoteFileConsumer<SftpRemoteFile> {
dir = absolutePath;
}
- final SftpRemoteFile[] files = getSftpRemoteFiles(dir);
+ final SftpRemoteFile[] files = getSftpRemoteFiles(dynamic, dir);
if (files == null || files.length == 0) {
// no files in this directory to poll
@@ -209,14 +209,14 @@ public class SftpConsumer extends
RemoteFileConsumer<SftpRemoteFile> {
return operations.listFiles(dir);
}
- private SftpRemoteFile[] getSftpRemoteFiles(String dir) {
+ private SftpRemoteFile[] getSftpRemoteFiles(Exchange dynamic, String dir) {
SftpRemoteFile[] files = null;
try {
LOG.trace("Polling directory: {}", dir);
if (isUseList()) {
files = listFiles(dir);
} else {
- files = pollNamedFile();
+ files = pollNamedFile(dynamic);
}
} catch (GenericFileOperationFailedException e) {
if (ignoreCannotRetrieveFile(null, null, e)) {
@@ -228,12 +228,12 @@ public class SftpConsumer extends
RemoteFileConsumer<SftpRemoteFile> {
return files;
}
- private SftpRemoteFile[] pollNamedFile() {
+ private SftpRemoteFile[] pollNamedFile(Exchange dynamic) {
SftpRemoteFile[] files = null;
// we cannot use the LIST command(s) so we can only poll a named
// file so created a pseudo file with that name
- Exchange dummy =
ExchangeHelper.getDummy(getEndpoint().getCamelContext());
+ Exchange dummy = GenericFileHelper.createDummy(getEndpoint(), dynamic);
String name = evaluateFileExpression(dummy);
if (name != null) {
SftpRemoteFile file = new SftpRemoteFileSingle(name);
diff --git
a/components/camel-mina-sftp/src/main/java/org/apache/camel/component/file/remote/mina/MinaSftpConsumer.java
b/components/camel-mina-sftp/src/main/java/org/apache/camel/component/file/remote/mina/MinaSftpConsumer.java
index 7940471013a4..30f7d58f7aa9 100644
---
a/components/camel-mina-sftp/src/main/java/org/apache/camel/component/file/remote/mina/MinaSftpConsumer.java
+++
b/components/camel-mina-sftp/src/main/java/org/apache/camel/component/file/remote/mina/MinaSftpConsumer.java
@@ -25,6 +25,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.component.file.GenericFile;
+import org.apache.camel.component.file.GenericFileHelper;
import org.apache.camel.component.file.GenericFileOperationFailedException;
import org.apache.camel.component.file.GenericFileProcessStrategy;
import org.apache.camel.component.file.remote.FtpConstants;
@@ -35,7 +36,6 @@ import
org.apache.camel.component.file.remote.RemoteFileConsumer;
import org.apache.camel.component.file.remote.RemoteFileEndpoint;
import org.apache.camel.component.file.remote.RemoteFileOperations;
import org.apache.camel.component.file.remote.SftpRemoteFile;
-import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
@@ -143,7 +143,7 @@ public class MinaSftpConsumer extends
RemoteFileConsumer<SftpRemoteFile> {
dir = absolutePath;
}
- final SftpRemoteFile[] files = getSftpRemoteFiles(dir);
+ final SftpRemoteFile[] files = getSftpRemoteFiles(dynamic, dir);
if (files == null || files.length == 0) {
// no files in this directory to poll
@@ -216,14 +216,14 @@ public class MinaSftpConsumer extends
RemoteFileConsumer<SftpRemoteFile> {
return operations.listFiles(dir);
}
- private SftpRemoteFile[] getSftpRemoteFiles(String dir) {
+ private SftpRemoteFile[] getSftpRemoteFiles(Exchange dynamic, String dir) {
SftpRemoteFile[] files = null;
try {
LOG.trace("Polling directory: {}", dir);
if (isUseList()) {
files = listFiles(dir);
} else {
- files = pollNamedFile();
+ files = pollNamedFile(dynamic);
}
} catch (GenericFileOperationFailedException e) {
if (ignoreCannotRetrieveFile(null, null, e)) {
@@ -235,12 +235,12 @@ public class MinaSftpConsumer extends
RemoteFileConsumer<SftpRemoteFile> {
return files;
}
- private SftpRemoteFile[] pollNamedFile() {
+ private SftpRemoteFile[] pollNamedFile(Exchange dynamic) {
SftpRemoteFile[] files = null;
// we cannot use the LIST command(s) so we can only poll a named
// file so created a pseudo file with that name
- Exchange dummy =
ExchangeHelper.getDummy(getEndpoint().getCamelContext());
+ Exchange dummy = GenericFileHelper.createDummy(getEndpoint(), dynamic);
String name = evaluateFileExpression(dummy);
if (name != null) {
SftpRemoteFile file = new MinaSftpRemoteFileSingle(name);