This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.14.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.14.x by this push:
new edd1686529ed [backport camel-4.14.x] CAMEL-24231: camel-ftp - Fix
pollNamedFile to use dynamic exchange for useList=false (#25039)
edd1686529ed is described below
commit edd1686529ed79b3050e4c636a9d5785b312f43a
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Jul 23 09:39:01 2026 +0200
[backport camel-4.14.x] CAMEL-24231: camel-ftp - Fix pollNamedFile to use
dynamic exchange for useList=false (#25039)
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 ++++++------
3 files changed, 23 insertions(+), 14 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);