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

davsclaus 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 0d324fd3fee CAMEL-21352: camel-smb - More stuff
0d324fd3fee is described below

commit 0d324fd3fee7fcddead2e355aa023baaf4e44b06
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon Jan 6 11:45:16 2025 +0100

    CAMEL-21352: camel-smb - More stuff
---
 .../camel/catalog/components/azure-files.json      |  36 ++---
 .../camel/component/file/azure/azure-files.json    |  36 ++---
 .../smb/SmbDefaultMoveExistingFileStrategy.java    |  98 +++++++++++++
 .../apache/camel/component/smb/SmbEndpoint.java    |  13 ++
 .../component/smb/SmbProducerToMoveExistingIT.java |  65 +++++++++
 .../endpoint/dsl/FilesEndpointBuilderFactory.java  | 152 ++++++---------------
 .../smb/services/SmbLocalContainerService.java     |   7 +-
 .../test/infra/smb/services/SmbRemoteService.java  |   6 +
 .../camel/test/infra/smb/services/SmbService.java  |   2 +
 9 files changed, 263 insertions(+), 152 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-files.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-files.json
index ae37b7a2e5c..00067cfbb86 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-files.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-files.json
@@ -68,24 +68,24 @@
     "onCompletionExceptionHandler": { "index": 24, "kind": "parameter", 
"displayName": "On Completion Exception Handler", "group": "consumer 
(advanced)", "label": "consumer,advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.spi.ExceptionHandler", "deprecated": false, 
"autowired": false, "secret": false, "description": "To use a custom 
org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that 
happens during the file on completion process where t [...]
     "pollStrategy": { "index": 25, "kind": "parameter", "displayName": "Poll 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the po 
[...]
     "processStrategy": { "index": 26, "kind": "parameter", "displayName": 
"Process Strategy", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.GenericFileProcessStrategy<com.azure.storage.file.share.models.ShareFileItem>",
 "deprecated": false, "autowired": false, "secret": false, "description": "A 
pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing 
you to implement you [...]
-    "checksumFileAlgorithm": { "index": 27, "kind": "parameter", 
"displayName": "Checksum File Algorithm", "group": "producer", "label": 
"producer", "required": false, "type": "string", "javaType": 
"java.lang.String", "enum": [ "MD2", "MD5", "SHA_1", "SHA_224", "SHA_256", 
"SHA_384", "SHA_512", "SHA_512_224", "SHA_512_256", "SHA3_224", "SHA3_256", 
"SHA3_384", "SHA3_512" ], "deprecated": false, "autowired": false, "secret": 
false, "description": "If provided, then Camel will write a checks [...]
-    "fileExist": { "index": 28, "kind": "parameter", "displayName": "File 
Exist", "group": "producer", "label": "producer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.file.GenericFileExist", 
"enum": [ "Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"Override", "description": "What to do if a file already exists with the same 
name. Override, which is the default, repl [...]
-    "flatten": { "index": 29, "kind": "parameter", "displayName": "Flatten", 
"group": "producer", "label": "producer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Flatten is used to flatten the 
file name path to strip any leading paths, so it's just the file name. This 
allows you to consume recursively into sub-directories, but when you eg write 
the files to another directory [...]
-    "jailStartingDirectory": { "index": 30, "kind": "parameter", 
"displayName": "Jail Starting Directory", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Used for jailing (restricting) writing files to the starting 
directory (and sub) only. This is enabled by default to not allow Camel to 
write files to outside directories (to be more sec [...]
-    "tempFileName": { "index": 31, "kind": "parameter", "displayName": "Temp 
File Name", "group": "producer", "label": "producer", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The same as tempPrefix 
option but offering a more fine grained control on the naming of the temporary 
filename as it uses the File Language. The location for tempFilename is 
relative to the final file location in the o [...]
-    "tempPrefix": { "index": 32, "kind": "parameter", "displayName": "Temp 
Prefix", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "This option is used to write the file 
using a temporary name and then, after the write is complete, rename it to the 
real name. Can be used to identify files being written and also avoid consumers 
(not using exclusive read  [...]
-    "allowNullBody": { "index": 33, "kind": "parameter", "displayName": "Allow 
Null Body", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Used to specify if a null body is allowed during file writing. 
If set to true then an empty file will be created, when set to false, and 
attempting to send a null body to the file c [...]
-    "disconnectOnBatchComplete": { "index": 34, "kind": "parameter", 
"displayName": "Disconnect On Batch Complete", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether or not to disconnect from remote 
FTP server right after a Batch upload is complete. disconnectOnBatchComplete 
will only disconnect the current conne [...]
-    "eagerDeleteTargetFile": { "index": 35, "kind": "parameter", 
"displayName": "Eager Delete Target File", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Whether or not to eagerly delete any 
existing target file. This option only applies when you use fileExists=Override 
and the tempFileName option as well. You can use [...]
-    "keepLastModified": { "index": 36, "kind": "parameter", "displayName": 
"Keep Last Modified", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Will keep the last modified timestamp 
from the source file (if any). Will use the FileConstants.FILE_LAST_MODIFIED 
header to located the timestamp. This header can contain eit [...]
-    "lazyStartProducer": { "index": 37, "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 produ [...]
-    "moveExistingFileStrategy": { "index": 38, "kind": "parameter", 
"displayName": "Move Existing File Strategy", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.strategy.FileMoveExistingStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Strategy (Custom Strategy) used to move file with special naming token to use 
when fileExist=Move is configured. By default, [...]
-    "autoCreate": { "index": 39, "kind": "parameter", "displayName": "Auto 
Create", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Automatically create 
missing directories in the file's pathname. For the file consumer, that means 
creating the starting directory. For the file producer, it means the directory 
the files should be written to." },
-    "browseLimit": { "index": 40, "kind": "parameter", "displayName": "Browse 
Limit", "group": "advanced", "label": "advanced", "required": false, "type": 
"integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 100, "description": "Maximum number of 
messages to keep in memory available for browsing. Use 0 for unlimited." },
-    "connectTimeout": { "index": 41, "kind": "parameter", "displayName": 
"Connect Timeout", "group": "advanced", "label": "advanced", "required": false, 
"type": "duration", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "10000", "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the connect timeout 
for waiting for a connection to be established Used by  [...]
-    "maximumReconnectAttempts": { "index": 42, "kind": "parameter", 
"displayName": "Maximum Reconnect Attempts", "group": "advanced", "label": 
"advanced", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Specifies the maximum reconnect attempts Camel performs when it tries to 
connect to the remote FTP server. Use 0 to disable this behavior." },
-    "reconnectDelay": { "index": 43, "kind": "parameter", "displayName": 
"Reconnect Delay", "group": "advanced", "label": "advanced", "required": false, 
"type": "duration", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "1000", "description": "Delay in millis 
Camel will wait before performing a reconnect attempt." },
-    "throwExceptionOnConnectFailed": { "index": 44, "kind": "parameter", 
"displayName": "Throw Exception On Connect Failed", "group": "advanced", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Should an exception be 
thrown if connection fa [...]
+    "throwExceptionOnConnectFailed": { "index": 27, "kind": "parameter", 
"displayName": "Throw Exception On Connect Failed", "group": "consumer 
(advanced)", "label": "consumer,advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Should an exception be 
thr [...]
+    "checksumFileAlgorithm": { "index": 28, "kind": "parameter", 
"displayName": "Checksum File Algorithm", "group": "producer", "label": 
"producer", "required": false, "type": "string", "javaType": 
"java.lang.String", "enum": [ "MD2", "MD5", "SHA_1", "SHA_224", "SHA_256", 
"SHA_384", "SHA_512", "SHA_512_224", "SHA_512_256", "SHA3_224", "SHA3_256", 
"SHA3_384", "SHA3_512" ], "deprecated": false, "autowired": false, "secret": 
false, "description": "If provided, then Camel will write a checks [...]
+    "fileExist": { "index": 29, "kind": "parameter", "displayName": "File 
Exist", "group": "producer", "label": "producer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.file.GenericFileExist", 
"enum": [ "Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"Override", "description": "What to do if a file already exists with the same 
name. Override, which is the default, repl [...]
+    "flatten": { "index": 30, "kind": "parameter", "displayName": "Flatten", 
"group": "producer", "label": "producer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Flatten is used to flatten the 
file name path to strip any leading paths, so it's just the file name. This 
allows you to consume recursively into sub-directories, but when you eg write 
the files to another directory [...]
+    "jailStartingDirectory": { "index": 31, "kind": "parameter", 
"displayName": "Jail Starting Directory", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Used for jailing (restricting) writing files to the starting 
directory (and sub) only. This is enabled by default to not allow Camel to 
write files to outside directories (to be more sec [...]
+    "tempFileName": { "index": 32, "kind": "parameter", "displayName": "Temp 
File Name", "group": "producer", "label": "producer", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The same as tempPrefix 
option but offering a more fine grained control on the naming of the temporary 
filename as it uses the File Language. The location for tempFilename is 
relative to the final file location in the o [...]
+    "tempPrefix": { "index": 33, "kind": "parameter", "displayName": "Temp 
Prefix", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "This option is used to write the file 
using a temporary name and then, after the write is complete, rename it to the 
real name. Can be used to identify files being written and also avoid consumers 
(not using exclusive read  [...]
+    "allowNullBody": { "index": 34, "kind": "parameter", "displayName": "Allow 
Null Body", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Used to specify if a null body is allowed during file writing. 
If set to true then an empty file will be created, when set to false, and 
attempting to send a null body to the file c [...]
+    "disconnectOnBatchComplete": { "index": 35, "kind": "parameter", 
"displayName": "Disconnect On Batch Complete", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether or not to disconnect from remote 
FTP server right after a Batch upload is complete. disconnectOnBatchComplete 
will only disconnect the current conne [...]
+    "eagerDeleteTargetFile": { "index": 36, "kind": "parameter", 
"displayName": "Eager Delete Target File", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Whether or not to eagerly delete any 
existing target file. This option only applies when you use fileExists=Override 
and the tempFileName option as well. You can use [...]
+    "keepLastModified": { "index": 37, "kind": "parameter", "displayName": 
"Keep Last Modified", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Will keep the last modified timestamp 
from the source file (if any). Will use the FileConstants.FILE_LAST_MODIFIED 
header to located the timestamp. This header can contain eit [...]
+    "lazyStartProducer": { "index": 38, "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 produ [...]
+    "moveExistingFileStrategy": { "index": 39, "kind": "parameter", 
"displayName": "Move Existing File Strategy", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.strategy.FileMoveExistingStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Strategy (Custom Strategy) used to move file with special naming token to use 
when fileExist=Move is configured. By default, [...]
+    "autoCreate": { "index": 40, "kind": "parameter", "displayName": "Auto 
Create", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Automatically create 
missing directories in the file's pathname. For the file consumer, that means 
creating the starting directory. For the file producer, it means the directory 
the files should be written to." },
+    "browseLimit": { "index": 41, "kind": "parameter", "displayName": "Browse 
Limit", "group": "advanced", "label": "advanced", "required": false, "type": 
"integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 100, "description": "Maximum number of 
messages to keep in memory available for browsing. Use 0 for unlimited." },
+    "connectTimeout": { "index": 42, "kind": "parameter", "displayName": 
"Connect Timeout", "group": "advanced", "label": "advanced", "required": false, 
"type": "duration", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "10000", "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the connect timeout 
for waiting for a connection to be established Used by  [...]
+    "maximumReconnectAttempts": { "index": 43, "kind": "parameter", 
"displayName": "Maximum Reconnect Attempts", "group": "advanced", "label": 
"advanced", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Specifies the maximum reconnect attempts Camel performs when it tries to 
connect to the remote FTP server. Use 0 to disable this behavior." },
+    "reconnectDelay": { "index": 44, "kind": "parameter", "displayName": 
"Reconnect Delay", "group": "advanced", "label": "advanced", "required": false, 
"type": "duration", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "1000", "description": "Delay in millis 
Camel will wait before performing a reconnect attempt." },
     "timeout": { "index": 45, "kind": "parameter", "displayName": "Timeout", 
"group": "advanced", "label": "advanced", "required": false, "type": 
"duration", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "30000", "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the data timeout 
for waiting for reply Used only by FTPClient" },
     "antExclude": { "index": 46, "kind": "parameter", "displayName": "Ant 
Exclude", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Ant style filter 
exclusion. If both antInclude and antExclude are used, antExclude takes 
precedence over antInclude. Multiple exclusions may be specified in 
comma-delimited format." },
     "antFilterCaseSensitive": { "index": 47, "kind": "parameter", 
"displayName": "Ant Filter Case Sensitive", "group": "filter", "label": 
"consumer,filter", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Sets case sensitive flag on ant filter." },
diff --git 
a/components/camel-azure/camel-azure-files/src/generated/resources/META-INF/org/apache/camel/component/file/azure/azure-files.json
 
b/components/camel-azure/camel-azure-files/src/generated/resources/META-INF/org/apache/camel/component/file/azure/azure-files.json
index ae37b7a2e5c..00067cfbb86 100644
--- 
a/components/camel-azure/camel-azure-files/src/generated/resources/META-INF/org/apache/camel/component/file/azure/azure-files.json
+++ 
b/components/camel-azure/camel-azure-files/src/generated/resources/META-INF/org/apache/camel/component/file/azure/azure-files.json
@@ -68,24 +68,24 @@
     "onCompletionExceptionHandler": { "index": 24, "kind": "parameter", 
"displayName": "On Completion Exception Handler", "group": "consumer 
(advanced)", "label": "consumer,advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.spi.ExceptionHandler", "deprecated": false, 
"autowired": false, "secret": false, "description": "To use a custom 
org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that 
happens during the file on completion process where t [...]
     "pollStrategy": { "index": 25, "kind": "parameter", "displayName": "Poll 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the po 
[...]
     "processStrategy": { "index": 26, "kind": "parameter", "displayName": 
"Process Strategy", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.GenericFileProcessStrategy<com.azure.storage.file.share.models.ShareFileItem>",
 "deprecated": false, "autowired": false, "secret": false, "description": "A 
pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing 
you to implement you [...]
-    "checksumFileAlgorithm": { "index": 27, "kind": "parameter", 
"displayName": "Checksum File Algorithm", "group": "producer", "label": 
"producer", "required": false, "type": "string", "javaType": 
"java.lang.String", "enum": [ "MD2", "MD5", "SHA_1", "SHA_224", "SHA_256", 
"SHA_384", "SHA_512", "SHA_512_224", "SHA_512_256", "SHA3_224", "SHA3_256", 
"SHA3_384", "SHA3_512" ], "deprecated": false, "autowired": false, "secret": 
false, "description": "If provided, then Camel will write a checks [...]
-    "fileExist": { "index": 28, "kind": "parameter", "displayName": "File 
Exist", "group": "producer", "label": "producer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.file.GenericFileExist", 
"enum": [ "Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"Override", "description": "What to do if a file already exists with the same 
name. Override, which is the default, repl [...]
-    "flatten": { "index": 29, "kind": "parameter", "displayName": "Flatten", 
"group": "producer", "label": "producer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Flatten is used to flatten the 
file name path to strip any leading paths, so it's just the file name. This 
allows you to consume recursively into sub-directories, but when you eg write 
the files to another directory [...]
-    "jailStartingDirectory": { "index": 30, "kind": "parameter", 
"displayName": "Jail Starting Directory", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Used for jailing (restricting) writing files to the starting 
directory (and sub) only. This is enabled by default to not allow Camel to 
write files to outside directories (to be more sec [...]
-    "tempFileName": { "index": 31, "kind": "parameter", "displayName": "Temp 
File Name", "group": "producer", "label": "producer", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The same as tempPrefix 
option but offering a more fine grained control on the naming of the temporary 
filename as it uses the File Language. The location for tempFilename is 
relative to the final file location in the o [...]
-    "tempPrefix": { "index": 32, "kind": "parameter", "displayName": "Temp 
Prefix", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "This option is used to write the file 
using a temporary name and then, after the write is complete, rename it to the 
real name. Can be used to identify files being written and also avoid consumers 
(not using exclusive read  [...]
-    "allowNullBody": { "index": 33, "kind": "parameter", "displayName": "Allow 
Null Body", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Used to specify if a null body is allowed during file writing. 
If set to true then an empty file will be created, when set to false, and 
attempting to send a null body to the file c [...]
-    "disconnectOnBatchComplete": { "index": 34, "kind": "parameter", 
"displayName": "Disconnect On Batch Complete", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether or not to disconnect from remote 
FTP server right after a Batch upload is complete. disconnectOnBatchComplete 
will only disconnect the current conne [...]
-    "eagerDeleteTargetFile": { "index": 35, "kind": "parameter", 
"displayName": "Eager Delete Target File", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Whether or not to eagerly delete any 
existing target file. This option only applies when you use fileExists=Override 
and the tempFileName option as well. You can use [...]
-    "keepLastModified": { "index": 36, "kind": "parameter", "displayName": 
"Keep Last Modified", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Will keep the last modified timestamp 
from the source file (if any). Will use the FileConstants.FILE_LAST_MODIFIED 
header to located the timestamp. This header can contain eit [...]
-    "lazyStartProducer": { "index": 37, "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 produ [...]
-    "moveExistingFileStrategy": { "index": 38, "kind": "parameter", 
"displayName": "Move Existing File Strategy", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.strategy.FileMoveExistingStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Strategy (Custom Strategy) used to move file with special naming token to use 
when fileExist=Move is configured. By default, [...]
-    "autoCreate": { "index": 39, "kind": "parameter", "displayName": "Auto 
Create", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Automatically create 
missing directories in the file's pathname. For the file consumer, that means 
creating the starting directory. For the file producer, it means the directory 
the files should be written to." },
-    "browseLimit": { "index": 40, "kind": "parameter", "displayName": "Browse 
Limit", "group": "advanced", "label": "advanced", "required": false, "type": 
"integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 100, "description": "Maximum number of 
messages to keep in memory available for browsing. Use 0 for unlimited." },
-    "connectTimeout": { "index": 41, "kind": "parameter", "displayName": 
"Connect Timeout", "group": "advanced", "label": "advanced", "required": false, 
"type": "duration", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "10000", "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the connect timeout 
for waiting for a connection to be established Used by  [...]
-    "maximumReconnectAttempts": { "index": 42, "kind": "parameter", 
"displayName": "Maximum Reconnect Attempts", "group": "advanced", "label": 
"advanced", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Specifies the maximum reconnect attempts Camel performs when it tries to 
connect to the remote FTP server. Use 0 to disable this behavior." },
-    "reconnectDelay": { "index": 43, "kind": "parameter", "displayName": 
"Reconnect Delay", "group": "advanced", "label": "advanced", "required": false, 
"type": "duration", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "1000", "description": "Delay in millis 
Camel will wait before performing a reconnect attempt." },
-    "throwExceptionOnConnectFailed": { "index": 44, "kind": "parameter", 
"displayName": "Throw Exception On Connect Failed", "group": "advanced", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Should an exception be 
thrown if connection fa [...]
+    "throwExceptionOnConnectFailed": { "index": 27, "kind": "parameter", 
"displayName": "Throw Exception On Connect Failed", "group": "consumer 
(advanced)", "label": "consumer,advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Should an exception be 
thr [...]
+    "checksumFileAlgorithm": { "index": 28, "kind": "parameter", 
"displayName": "Checksum File Algorithm", "group": "producer", "label": 
"producer", "required": false, "type": "string", "javaType": 
"java.lang.String", "enum": [ "MD2", "MD5", "SHA_1", "SHA_224", "SHA_256", 
"SHA_384", "SHA_512", "SHA_512_224", "SHA_512_256", "SHA3_224", "SHA3_256", 
"SHA3_384", "SHA3_512" ], "deprecated": false, "autowired": false, "secret": 
false, "description": "If provided, then Camel will write a checks [...]
+    "fileExist": { "index": 29, "kind": "parameter", "displayName": "File 
Exist", "group": "producer", "label": "producer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.file.GenericFileExist", 
"enum": [ "Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"Override", "description": "What to do if a file already exists with the same 
name. Override, which is the default, repl [...]
+    "flatten": { "index": 30, "kind": "parameter", "displayName": "Flatten", 
"group": "producer", "label": "producer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Flatten is used to flatten the 
file name path to strip any leading paths, so it's just the file name. This 
allows you to consume recursively into sub-directories, but when you eg write 
the files to another directory [...]
+    "jailStartingDirectory": { "index": 31, "kind": "parameter", 
"displayName": "Jail Starting Directory", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Used for jailing (restricting) writing files to the starting 
directory (and sub) only. This is enabled by default to not allow Camel to 
write files to outside directories (to be more sec [...]
+    "tempFileName": { "index": 32, "kind": "parameter", "displayName": "Temp 
File Name", "group": "producer", "label": "producer", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The same as tempPrefix 
option but offering a more fine grained control on the naming of the temporary 
filename as it uses the File Language. The location for tempFilename is 
relative to the final file location in the o [...]
+    "tempPrefix": { "index": 33, "kind": "parameter", "displayName": "Temp 
Prefix", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "This option is used to write the file 
using a temporary name and then, after the write is complete, rename it to the 
real name. Can be used to identify files being written and also avoid consumers 
(not using exclusive read  [...]
+    "allowNullBody": { "index": 34, "kind": "parameter", "displayName": "Allow 
Null Body", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Used to specify if a null body is allowed during file writing. 
If set to true then an empty file will be created, when set to false, and 
attempting to send a null body to the file c [...]
+    "disconnectOnBatchComplete": { "index": 35, "kind": "parameter", 
"displayName": "Disconnect On Batch Complete", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether or not to disconnect from remote 
FTP server right after a Batch upload is complete. disconnectOnBatchComplete 
will only disconnect the current conne [...]
+    "eagerDeleteTargetFile": { "index": 36, "kind": "parameter", 
"displayName": "Eager Delete Target File", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Whether or not to eagerly delete any 
existing target file. This option only applies when you use fileExists=Override 
and the tempFileName option as well. You can use [...]
+    "keepLastModified": { "index": 37, "kind": "parameter", "displayName": 
"Keep Last Modified", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Will keep the last modified timestamp 
from the source file (if any). Will use the FileConstants.FILE_LAST_MODIFIED 
header to located the timestamp. This header can contain eit [...]
+    "lazyStartProducer": { "index": 38, "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 produ [...]
+    "moveExistingFileStrategy": { "index": 39, "kind": "parameter", 
"displayName": "Move Existing File Strategy", "group": "producer (advanced)", 
"label": "producer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.strategy.FileMoveExistingStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Strategy (Custom Strategy) used to move file with special naming token to use 
when fileExist=Move is configured. By default, [...]
+    "autoCreate": { "index": 40, "kind": "parameter", "displayName": "Auto 
Create", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Automatically create 
missing directories in the file's pathname. For the file consumer, that means 
creating the starting directory. For the file producer, it means the directory 
the files should be written to." },
+    "browseLimit": { "index": 41, "kind": "parameter", "displayName": "Browse 
Limit", "group": "advanced", "label": "advanced", "required": false, "type": 
"integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 100, "description": "Maximum number of 
messages to keep in memory available for browsing. Use 0 for unlimited." },
+    "connectTimeout": { "index": 42, "kind": "parameter", "displayName": 
"Connect Timeout", "group": "advanced", "label": "advanced", "required": false, 
"type": "duration", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "10000", "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the connect timeout 
for waiting for a connection to be established Used by  [...]
+    "maximumReconnectAttempts": { "index": 43, "kind": "parameter", 
"displayName": "Maximum Reconnect Attempts", "group": "advanced", "label": 
"advanced", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Specifies the maximum reconnect attempts Camel performs when it tries to 
connect to the remote FTP server. Use 0 to disable this behavior." },
+    "reconnectDelay": { "index": 44, "kind": "parameter", "displayName": 
"Reconnect Delay", "group": "advanced", "label": "advanced", "required": false, 
"type": "duration", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "1000", "description": "Delay in millis 
Camel will wait before performing a reconnect attempt." },
     "timeout": { "index": 45, "kind": "parameter", "displayName": "Timeout", 
"group": "advanced", "label": "advanced", "required": false, "type": 
"duration", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "30000", "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the data timeout 
for waiting for reply Used only by FTPClient" },
     "antExclude": { "index": 46, "kind": "parameter", "displayName": "Ant 
Exclude", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Ant style filter 
exclusion. If both antInclude and antExclude are used, antExclude takes 
precedence over antInclude. Multiple exclusions may be specified in 
comma-delimited format." },
     "antFilterCaseSensitive": { "index": 47, "kind": "parameter", 
"displayName": "Ant Filter Case Sensitive", "group": "filter", "label": 
"consumer,filter", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Sets case sensitive flag on ant filter." },
diff --git 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbDefaultMoveExistingFileStrategy.java
 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbDefaultMoveExistingFileStrategy.java
new file mode 100644
index 00000000000..0c4992ae3f8
--- /dev/null
+++ 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbDefaultMoveExistingFileStrategy.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.smb;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.file.GenericFileEndpoint;
+import org.apache.camel.component.file.GenericFileOperationFailedException;
+import org.apache.camel.component.file.GenericFileOperations;
+import org.apache.camel.component.file.strategy.FileMoveExistingStrategy;
+import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static 
org.apache.camel.component.file.MoveExistingFileStrategyUtils.completePartialRelativePath;
+
+public class SmbDefaultMoveExistingFileStrategy implements 
FileMoveExistingStrategy {
+
+    private static final Logger LOG = 
LoggerFactory.getLogger(SmbDefaultMoveExistingFileStrategy.class);
+
+    /**
+     * Moves any existing file due fileExists=Move is in use.
+     */
+    @Override
+    public boolean moveExistingFile(GenericFileEndpoint<?> endpoint, 
GenericFileOperations<?> operations, String fileName)
+            throws GenericFileOperationFailedException {
+        // need to evaluate using a dummy and simulate the file first, to have
+        // access to all the file attributes
+        // create a dummy exchange as Exchange is needed for expression
+        // evaluation
+        // we support only the following 3 tokens.
+        Exchange dummy = endpoint.createExchange();
+        // we only support relative paths for the ftp component, so we strip 
out
+        //any leading separator
+        String parent = 
FileUtil.stripLeadingSeparator(FileUtil.onlyPath(fileName));
+        String onlyName = FileUtil.stripPath(fileName);
+        dummy.getIn().setHeader(SmbConstants.FILE_NAME, fileName);
+        dummy.getIn().setHeader(SmbConstants.FILE_NAME_ONLY, onlyName);
+        dummy.getIn().setHeader(SmbConstants.FILE_PARENT, parent);
+
+        String to = endpoint.getMoveExisting().evaluate(dummy, String.class);
+        // we only support relative paths for the ftp component, so strip any
+        // leading paths
+        to = FileUtil.stripLeadingSeparator(to);
+        // normalize accordingly to configuration
+
+        if (ObjectHelper.isEmpty(to)) {
+            throw new GenericFileOperationFailedException(
+                    "moveExisting evaluated as empty String, cannot move 
existing file: " + fileName);
+        }
+
+        to = completePartialRelativePath(to, onlyName, parent);
+
+        // do we have a sub directory
+        String dir = FileUtil.onlyPath(to);
+        if (dir != null) {
+            // ensure directory exists
+            operations.buildDirectory(dir, false);
+        }
+
+        // deal if there already exists a file
+        if (operations.existsFile(to)) {
+            if (endpoint.isEagerDeleteTargetFile()) {
+                LOG.trace("Deleting existing file: {}", to);
+                boolean result;
+                result = operations.deleteFile(to);
+                if (!result) {
+                    throw new GenericFileOperationFailedException("Cannot 
delete file: " + to);
+                }
+            } else {
+                throw new GenericFileOperationFailedException(
+                        "Cannot move existing file from: " + fileName + " to: 
" + to + " as there already exists a file: "
+                        + to);
+            }
+        }
+
+        LOG.trace("Moving existing file: {} to: {}", fileName, to);
+        if (!operations.renameFile(fileName, to)) {
+            throw new GenericFileOperationFailedException("Cannot rename file 
from: " + fileName + " to: " + to);
+        }
+        return true;
+    }
+
+}
diff --git 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbEndpoint.java
 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbEndpoint.java
index ef102bb160a..a99d2cf34ef 100644
--- 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbEndpoint.java
+++ 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbEndpoint.java
@@ -32,6 +32,7 @@ import org.apache.camel.component.file.GenericFileOperations;
 import org.apache.camel.component.file.GenericFilePollingConsumer;
 import org.apache.camel.component.file.GenericFileProcessStrategy;
 import org.apache.camel.component.file.GenericFileProducer;
+import org.apache.camel.component.file.strategy.FileMoveExistingStrategy;
 import org.apache.camel.component.smb.strategy.SmbProcessStrategyFactory;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.Metadata;
@@ -93,6 +94,9 @@ public class SmbEndpoint extends 
GenericFileEndpoint<FileIdBothDirectoryInformat
     @Override
     public GenericFileProducer<FileIdBothDirectoryInformation> 
createProducer() throws Exception {
         try {
+            if (this.getMoveExistingFileStrategy() == null) {
+                
this.setMoveExistingFileStrategy(createDefaultFtpMoveExistingFileStrategy());
+            }
             return new SmbProducer(this, createOperations());
         } catch (Exception e) {
             throw new FailedToCreateProducerException(this, e);
@@ -122,6 +126,15 @@ public class SmbEndpoint extends 
GenericFileEndpoint<FileIdBothDirectoryInformat
         return configuration;
     }
 
+    /**
+     * Default Existing File Move Strategy
+     *
+     * @return the default implementation for SMB components
+     */
+    private FileMoveExistingStrategy 
createDefaultFtpMoveExistingFileStrategy() {
+        return new SmbDefaultMoveExistingFileStrategy();
+    }
+
     @Override
     public GenericFileConsumer<FileIdBothDirectoryInformation> 
createConsumer(Processor processor) {
         // if noop=true then idempotent should also be configured
diff --git 
a/components/camel-smb/src/test/java/org/apache/camel/component/smb/SmbProducerToMoveExistingIT.java
 
b/components/camel-smb/src/test/java/org/apache/camel/component/smb/SmbProducerToMoveExistingIT.java
new file mode 100644
index 00000000000..a185b9bc710
--- /dev/null
+++ 
b/components/camel-smb/src/test/java/org/apache/camel/component/smb/SmbProducerToMoveExistingIT.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.smb;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SmbProducerToMoveExistingIT extends SmbServerTestSupport {
+
+    protected String getSmbUrl() {
+        return String.format(
+                
"smb:%s/%s?username=%s&password=%s&path=/toMoveExisting&fileExist=Move&moveExisting=old-${file:onlyname}",
+                service.address(), service.shareName(), service.userName(), 
service.password());
+    }
+
+    @Test
+    public void testMoveExisting() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(2);
+
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("myDir", "toMoveExisting");
+        headers.put(Exchange.FILE_NAME, "hello.txt");
+        template.sendBodyAndHeaders("direct:start", "Hello World", headers);
+        template.sendBodyAndHeaders("direct:start", "Bye World", headers);
+
+        MockEndpoint.assertIsSatisfied(context);
+
+        String data = service.smbFile("toMoveExisting/old-hello.txt");
+        Assertions.assertEquals("Hello World\n", data);
+        data = service.smbFile("toMoveExisting/hello.txt");
+        Assertions.assertEquals("Bye World\n", data);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start").to(getSmbUrl()).to("mock:result");
+            }
+        };
+    }
+
+
+}
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/FilesEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/FilesEndpointBuilderFactory.java
index 20d79763f2c..9fe36b476fe 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/FilesEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/FilesEndpointBuilderFactory.java
@@ -2449,6 +2449,44 @@ public interface FilesEndpointBuilderFactory {
             doSetProperty("processStrategy", processStrategy);
             return this;
         }
+        /**
+         * Should an exception be thrown if connection failed (exhausted)By
+         * default exception is not thrown and a WARN is logged. You can use
+         * this to enable exception being thrown and handle the thrown 
exception
+         * from the org.apache.camel.spi.PollingConsumerPollStrategy rollback
+         * method.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer (advanced)
+         * 
+         * @param throwExceptionOnConnectFailed the value to set
+         * @return the dsl builder
+         */
+        default AdvancedFilesEndpointConsumerBuilder 
throwExceptionOnConnectFailed(boolean throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", 
throwExceptionOnConnectFailed);
+            return this;
+        }
+        /**
+         * Should an exception be thrown if connection failed (exhausted)By
+         * default exception is not thrown and a WARN is logged. You can use
+         * this to enable exception being thrown and handle the thrown 
exception
+         * from the org.apache.camel.spi.PollingConsumerPollStrategy rollback
+         * method.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer (advanced)
+         * 
+         * @param throwExceptionOnConnectFailed the value to set
+         * @return the dsl builder
+         */
+        default AdvancedFilesEndpointConsumerBuilder 
throwExceptionOnConnectFailed(String throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", 
throwExceptionOnConnectFailed);
+            return this;
+        }
         /**
          * Automatically create missing directories in the file's pathname. For
          * the file consumer, that means creating the starting directory. For
@@ -2611,44 +2649,6 @@ public interface FilesEndpointBuilderFactory {
             doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
-        /**
-         * Should an exception be thrown if connection failed (exhausted)By
-         * default exception is not thrown and a WARN is logged. You can use
-         * this to enable exception being thrown and handle the thrown 
exception
-         * from the org.apache.camel.spi.PollingConsumerPollStrategy rollback
-         * method.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param throwExceptionOnConnectFailed the value to set
-         * @return the dsl builder
-         */
-        default AdvancedFilesEndpointConsumerBuilder 
throwExceptionOnConnectFailed(boolean throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", 
throwExceptionOnConnectFailed);
-            return this;
-        }
-        /**
-         * Should an exception be thrown if connection failed (exhausted)By
-         * default exception is not thrown and a WARN is logged. You can use
-         * this to enable exception being thrown and handle the thrown 
exception
-         * from the org.apache.camel.spi.PollingConsumerPollStrategy rollback
-         * method.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param throwExceptionOnConnectFailed the value to set
-         * @return the dsl builder
-         */
-        default AdvancedFilesEndpointConsumerBuilder 
throwExceptionOnConnectFailed(String throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", 
throwExceptionOnConnectFailed);
-            return this;
-        }
         /**
          * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
@@ -3616,44 +3616,6 @@ public interface FilesEndpointBuilderFactory {
             doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
-        /**
-         * Should an exception be thrown if connection failed (exhausted)By
-         * default exception is not thrown and a WARN is logged. You can use
-         * this to enable exception being thrown and handle the thrown 
exception
-         * from the org.apache.camel.spi.PollingConsumerPollStrategy rollback
-         * method.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param throwExceptionOnConnectFailed the value to set
-         * @return the dsl builder
-         */
-        default AdvancedFilesEndpointProducerBuilder 
throwExceptionOnConnectFailed(boolean throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", 
throwExceptionOnConnectFailed);
-            return this;
-        }
-        /**
-         * Should an exception be thrown if connection failed (exhausted)By
-         * default exception is not thrown and a WARN is logged. You can use
-         * this to enable exception being thrown and handle the thrown 
exception
-         * from the org.apache.camel.spi.PollingConsumerPollStrategy rollback
-         * method.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param throwExceptionOnConnectFailed the value to set
-         * @return the dsl builder
-         */
-        default AdvancedFilesEndpointProducerBuilder 
throwExceptionOnConnectFailed(String throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", 
throwExceptionOnConnectFailed);
-            return this;
-        }
         /**
          * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
@@ -4177,44 +4139,6 @@ public interface FilesEndpointBuilderFactory {
             doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
-        /**
-         * Should an exception be thrown if connection failed (exhausted)By
-         * default exception is not thrown and a WARN is logged. You can use
-         * this to enable exception being thrown and handle the thrown 
exception
-         * from the org.apache.camel.spi.PollingConsumerPollStrategy rollback
-         * method.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param throwExceptionOnConnectFailed the value to set
-         * @return the dsl builder
-         */
-        default AdvancedFilesEndpointBuilder 
throwExceptionOnConnectFailed(boolean throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", 
throwExceptionOnConnectFailed);
-            return this;
-        }
-        /**
-         * Should an exception be thrown if connection failed (exhausted)By
-         * default exception is not thrown and a WARN is logged. You can use
-         * this to enable exception being thrown and handle the thrown 
exception
-         * from the org.apache.camel.spi.PollingConsumerPollStrategy rollback
-         * method.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param throwExceptionOnConnectFailed the value to set
-         * @return the dsl builder
-         */
-        default AdvancedFilesEndpointBuilder 
throwExceptionOnConnectFailed(String throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", 
throwExceptionOnConnectFailed);
-            return this;
-        }
         /**
          * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
diff --git 
a/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbLocalContainerService.java
 
b/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbLocalContainerService.java
index 1828617321f..a494ae1bbd2 100644
--- 
a/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbLocalContainerService.java
+++ 
b/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbLocalContainerService.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.test.infra.smb.services;
 
 import java.io.InputStream;
 
 import com.github.dockerjava.api.exception.NotFoundException;
+import org.apache.camel.util.IOHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.utility.ThrowingFunction;
@@ -63,7 +63,6 @@ public class SmbLocalContainerService implements SmbService {
 
     @Override
     public void registerProperties() {
-
     }
 
     @Override
@@ -76,6 +75,10 @@ public class SmbLocalContainerService implements SmbService {
 
     @Override
     public void shutdown() {
+    }
 
+    public String smbFile(String file) {
+        return this.container.copyFileFromContainer("data/rw/" + file, 
IOHelper::loadText);
     }
+
 }
diff --git 
a/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbRemoteService.java
 
b/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbRemoteService.java
index 0fa8c911919..bf39bb785a6 100644
--- 
a/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbRemoteService.java
+++ 
b/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbRemoteService.java
@@ -48,6 +48,11 @@ public class SmbRemoteService implements SmbService {
         return null;
     }
 
+    @Override
+    public String smbFile(String file) {
+        return null;
+    }
+
     @Override
     public void registerProperties() {
 
@@ -62,4 +67,5 @@ public class SmbRemoteService implements SmbService {
     public void shutdown() {
 
     }
+
 }
diff --git 
a/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbService.java
 
b/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbService.java
index f320ae2fe6f..437efa99e26 100644
--- 
a/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbService.java
+++ 
b/test-infra/camel-test-infra-smb/src/test/java/org/apache/camel/test/infra/smb/services/SmbService.java
@@ -37,6 +37,8 @@ public interface SmbService extends TestService, 
BeforeTestExecutionCallback, Af
 
     <T> T copyFileFromContainer(String fileName, ThrowingFunction<InputStream, 
T> function);
 
+    String smbFile(String file);
+
     @Override
     default void beforeAll(ExtensionContext extensionContext) {
         try {

Reply via email to