You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/01/30 20:37:00 UTC

[camel] branch master updated (23ad920 -> 78fe8f0)

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

gnodet pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from 23ad920  [CAMEL-14451] Fix jdk >= 9 compilation issue
     new 4dfad46  [CAMEL-14451] Fix jdk >= 9 compilation issue
     new 78fe8f0  [CAMEL-14451] Regen

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/camel/component/feed/FeedEndpoint.java  |   22 +-
 .../camel/component/file/GenericFileEndpoint.java  |  342 +-
 .../camel-ftp/src/main/docs/ftp-component.adoc     |   66 +-
 .../camel-ftp/src/main/docs/ftps-component.adoc    |   80 +-
 .../camel-ftp/src/main/docs/sftp-component.adoc    |   84 +-
 .../file/remote/RemoteFileConfiguration.java       |   63 +-
 .../component/file/remote/RemoteFileEndpoint.java  |   25 +-
 .../camel-jsch/src/main/docs/scp-component.adoc    |   96 +-
 .../camel-rss/src/main/docs/rss-component.adoc     |    6 +-
 .../endpoint/dsl/FtpEndpointBuilderFactory.java    | 3070 ++++++------
 .../endpoint/dsl/FtpsEndpointBuilderFactory.java   | 3666 +++++++++------
 .../endpoint/dsl/ScpEndpointBuilderFactory.java    | 2353 ++--------
 .../endpoint/dsl/SftpEndpointBuilderFactory.java   | 4944 +++++++++++---------
 .../tools/apt/EndpointAnnotationProcessor.java     |    2 +-
 14 files changed, 7584 insertions(+), 7235 deletions(-)


[camel] 01/02: [CAMEL-14451] Fix jdk >= 9 compilation issue

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4dfad46f0ebe44f0394184436ca7faea6ed7607b
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu Jan 30 16:35:13 2020 +0100

    [CAMEL-14451] Fix jdk >= 9 compilation issue
---
 .../camel/component/file/GenericFileEndpoint.java  | 342 +++++++++++++++++----
 .../file/remote/RemoteFileConfiguration.java       |  63 ++--
 .../component/file/remote/RemoteFileEndpoint.java  |  25 +-
 .../tools/apt/EndpointAnnotationProcessor.java     |   2 +-
 4 files changed, 347 insertions(+), 85 deletions(-)

diff --git a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
index 0b1e959..f73a881 100644
--- a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
+++ b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
@@ -68,134 +68,356 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple
 
     // common options
 
-    @UriParam(label = "advanced", defaultValue = "true")
+    @UriParam(label = "advanced", 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.")
     protected boolean autoCreate = true;
-    @UriParam(label = "advanced", defaultValue = "" + FileUtil.BUFFER_SIZE)
+    @UriParam(label = "advanced", defaultValue = "" + FileUtil.BUFFER_SIZE, description = "Buffer size in bytes used " +
+            "for writing files (or in case of FTP for downloading and uploading files).")
     protected int bufferSize = FileUtil.BUFFER_SIZE;
-    @UriParam
+    @UriParam(description = "This option is used to specify the encoding of the file. You can use this on the " +
+            "consumer, to specify the encodings of the files, which allow Camel to know the charset it should load " +
+            "the file content in case the file content is being accessed. Likewise when writing a file, you can use " +
+            "this option to specify which charset to write the file as well. Do mind that when writing the file " +
+            "Camel may have to read the message content into memory to be able to convert the data into the " +
+            "configured charset, so do not use this if you have big messages.")
     protected String charset;
-    @UriParam(javaType = "java.lang.String")
+    @UriParam(javaType = "java.lang.String", description = "Use Expression such as File Language to dynamically set " +
+            "the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the " +
+            "filename to write. If an expression is set, it take precedence over the CamelFileName header. (Note: " +
+            "The header itself can also be an Expression). The expression options support both String and Expression " +
+            "types. If the expression is a String type, it is always evaluated using the File Language. If the " +
+            "expression is an Expression type, the specified Expression type is used - this allows you, for " +
+            "instance, to use OGNL expressions. For the consumer, you can use it to filter filenames, so you can " +
+            "for instance consume today's file using the File Language syntax: mydata-${date:now:yyyyMMdd}.txt. The " +
+            "producers support the CamelOverruleFileName header which takes precedence over any existing " +
+            "CamelFileName header; the CamelOverruleFileName is a header that is used only once, and makes it easier " +
+            "as this avoids to temporary store CamelFileName and have to restore it afterwards.")
     protected Expression fileName;
-    @UriParam
+    @UriParam(description = "Producer: If provided, then Camel will write a 2nd done file when the original file has " +
+            "been written. The done file will be empty. This option configures what file name to use. Either you can " +
+            "specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the " +
+            "same folder as the original file.<p/> Consumer: If provided, Camel will only consume files if a done " +
+            "file exists. This option configures what file name to use. Either you can specify a fixed name. Or you " +
+            "can use dynamic placeholders.The done file is always expected in the same folder as the original " +
+            "file.<p/> Only ${file.name} and ${file.name.next} is supported as dynamic placeholders.")
     protected String doneFileName;
 
     // producer options
 
-    @UriParam(label = "producer")
+    @UriParam(label = "producer", 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 they will be written in a single directory. " +
+            "Setting this to true on the producer enforces that any file name in CamelFileName header will be " +
+            "stripped for any leading paths.")
     protected boolean flatten;
-    @UriParam(label = "producer", defaultValue = "Override")
+    @UriParam(label = "producer", defaultValue = "Override", description = "What to do if a file already exists with " +
+            "the same name. Override, which is the default, replaces the existing file.<p/>" +
+            " - Append - adds content to the existing file.<p/> " +
+            " - Fail - throws a GenericFileOperationException, indicating that there is already an existing file.<p/> " +
+            " - Ignore - silently ignores the problem and does not override the existing file, " +
+            "but assumes everything is okay.<p/> " +
+            " - Move - option requires to use the moveExisting option to be configured as well.  The option " +
+            "eagerDeleteTargetFile can be used to control what to do if an moving the file, and there " +
+            "exists already an existing file, otherwise causing the move operation to fail. The Move option will move " +
+            "any existing files, before writing the target file.<p/> " +
+            " - TryRename is only applicable if tempFileName option is in use. This allows to try renaming the file " +
+            "from the temporary name to the actual name, without doing any exists check. This check may be faster on " +
+            "some file systems and especially FTP servers.")
     protected GenericFileExist fileExist = GenericFileExist.Override;
-    @UriParam(label = "producer")
+    @UriParam(label = "producer", 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 locks) reading in progress files. Is often " +
+            "used by FTP when uploading big files.")
     protected String tempPrefix;
-    @UriParam(label = "producer", javaType = "java.lang.String")
+    @UriParam(label = "producer", javaType = "java.lang.String", 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 option " +
+            "'fileName', not the target directory in the base uri. For example if option fileName includes a " +
+            "directory prefix: dir/finalFilename then tempFileName is relative to that subdirectory dir.")
     protected Expression tempFileName;
-    @UriParam(label = "producer,advanced", defaultValue = "true")
+    @UriParam(label = "producer,advanced", 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 this to disable (set it to false) deleting the target " +
+            "file before the temp file is written. For example you may write big files and want the target file " +
+            "to exists during the temp file is being written. This ensure the target file is only deleted until " +
+            "the very last moment, just before the temp file is being renamed to the target filename. This option " +
+            "is also used to control whether to delete any existing files when fileExist=Move is enabled, and an " +
+            "existing file exists. If this option copyAndDeleteOnRenameFails false, then an exception will be thrown " +
+            "if an existing file existed, if its true, then the existing file is deleted before the move operation.")
     protected boolean eagerDeleteTargetFile = true;
-    @UriParam(label = "producer,advanced")
+    @UriParam(label = "producer,advanced", description = "Will keep the last modified timestamp from the source file " +
+            "(if any). Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This header can " +
+            "contain either a java.util.Date or long with the timestamp. If the timestamp exists and the option is " +
+            "enabled it will set this timestamp on the written file. Note: This option only applies to the file " +
+            "producer. You cannot use this option with any of the ftp producers.")
     protected boolean keepLastModified;
-    @UriParam(label = "producer,advanced")
+    @UriParam(label = "producer,advanced", 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 component, a GenericFileWriteException of 'Cannot write null body to file.' " +
+            "will be thrown. If the `fileExist` option is set to 'Override', then the file will be truncated, and " +
+            "if set to `append` the file will remain unchanged.")
     protected boolean allowNullBody;
-    @UriParam(label = "producer", defaultValue = "true")
+    @UriParam(label = "producer", 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 secured out of the box). You can turn this off to allow writing " +
+            "files to directories outside the starting directory, such as parent or root folders.")
     protected boolean jailStartingDirectory = true;
-    @UriParam(label = "producer")
+    @UriParam(label = "producer", description = "Used to append characters (text) after writing files. This can for " +
+            "example be used to add new lines or other separators when writing and appending to existing files. <p/> " +
+            "To specify new-line (slash-n or slash-r) or tab (slash-t) characters then escape with an extra slash, " +
+            "eg slash-slash-n.")
     protected String appendChars;
 
     // consumer options
 
     @UriParam
     protected GenericFileConfiguration configuration;
-    @UriParam(label = "consumer,advanced")
+    @UriParam(label = "consumer,advanced", description = "A pluggable " +
+            "org.apache.camel.component.file.GenericFileProcessStrategy " +
+            "allowing you to implement your own readLock option or similar. Can also be used when special conditions " +
+            "must be met before a file can be consumed, such as a special ready file exists. If this option is set " +
+            "then the readLock option does not apply.")
     protected GenericFileProcessStrategy<T> processStrategy;
-    @UriParam(label = "consumer,advanced")
+    @UriParam(label = "consumer,advanced", description = "A pluggable in-progress repository " +
+            "org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in " +
+            "progress files being consumed. By default a memory based repository is used.")
     protected IdempotentRepository inProgressRepository = MemoryIdempotentRepository.memoryIdempotentRepository(DEFAULT_IN_PROGRESS_CACHE_SIZE);
-    @UriParam(label = "consumer,advanced")
+    @UriParam(label = "consumer,advanced", description = "When consuming, a local work directory can be used to " +
+            "store the remote file content directly in local files, to avoid loading the content into memory. This " +
+            "is beneficial, if you consume a very big remote file and thus can conserve memory.")
     protected String localWorkDirectory;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer", description = "If true, the file is not moved or deleted in any way. This option " +
+            "is good for readonly data, or for ETL type requirements. If noop=true, Camel will set idempotent=true " +
+            "as well, to avoid consuming the same files over and over again.")
     protected boolean noop;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer", description = "If a directory, will look for files in all the sub-directories as well.")
     protected boolean recursive;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer", description = "If true, the file will be deleted after it is processed successfully.")
     protected boolean delete;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer", description = "When pre-sort is enabled then the consumer will sort the file and " +
+            "directory names during polling,  that was retrieved from the file system. You may want to do this in " +
+            "case you need to operate on the files  in a sorted order. The pre-sort is executed before the consumer " +
+            "starts to filter, and accept files  to process by Camel. This option is default=false meaning disabled.")
     protected boolean preSort;
-    @UriParam(label = "consumer,filter")
+    @UriParam(label = "consumer,filter", description = "To define a maximum messages to gather per poll. By default " +
+            "no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that " +
+            "there are thousands of files. Set a value of 0 or negative to disabled it. Notice: If this option is " +
+            "in use then the File and FTP components will limit before any sorting. For example if you have 100000 " +
+            "files and use maxMessagesPerPoll=500, then only the first 500 files will be picked up, and then sorted. " +
+            "You can use the eagerMaxMessagesPerPoll option and set this to false to allow to scan all files first " +
+            "and then sort afterwards.")
     protected int maxMessagesPerPoll;
-    @UriParam(label = "consumer,filter", defaultValue = "true")
+    @UriParam(label = "consumer,filter", defaultValue = "true", description = "Allows for controlling whether the " +
+            "limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. " +
+            "Where as false would scan all files, and then perform sorting. Setting this option to false allows for " +
+            "sorting all files first, and then limit the poll. Mind that this requires a higher memory usage as all " +
+            "file details are in memory to perform the sorting.")
     protected boolean eagerMaxMessagesPerPoll = true;
-    @UriParam(label = "consumer,filter", defaultValue = "" + Integer.MAX_VALUE)
+    @UriParam(label = "consumer,filter", defaultValue = "" + Integer.MAX_VALUE, description = "The maximum depth to " +
+            "traverse when recursively processing a directory.")
     protected int maxDepth = Integer.MAX_VALUE;
-    @UriParam(label = "consumer,filter")
+    @UriParam(label = "consumer,filter", description = "The minimum depth to start processing when recursively " +
+            "processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first " +
+            "sub directory.")
     protected int minDepth;
-    @UriParam(label = "consumer,filter")
+    @UriParam(label = "consumer,filter", description = "Is used to include files, if filename matches the regex " +
+            "pattern (matching is case in-sensitive). <p/> Notice if you use symbols such as plus sign and others " +
+            "you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See " +
+            "more details at <a href=\"http://camel.apache.org/how-do-i-configure-endpoints.html\">configuring " +
+            "endpoint uris</a>")
     protected String include;
-    @UriParam(label = "consumer,filter")
+    @UriParam(label = "consumer,filter", description = "Is used to exclude files, if filename matches the regex " +
+            "pattern (matching is case in-senstive). <p/> Notice if you use symbols such as plus sign and others " +
+            "you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See " +
+            "more details at <a href=\"http://camel.apache.org/how-do-i-configure-endpoints.html\">configuring " +
+            "" +
+            "endpoint uris</a>")
     protected String exclude;
-    @UriParam(label = "consumer,filter", javaType = "java.lang.String")
+    @UriParam(label = "consumer,filter", javaType = "java.lang.String", description = "Expression (such as Simple " +
+            "Language) used to dynamically set the filename when moving it after processing. To move files into " +
+            "a .done subdirectory just enter .done.")
     protected Expression move;
-    @UriParam(label = "consumer", javaType = "java.lang.String")
+    @UriParam(label = "consumer", javaType = "java.lang.String", description = "Sets the move failure expression " +
+            "based on Simple language. For example, to move files into a .error subdirectory use: .error. Note: " +
+            "When moving the files to the fail location Camel will handle the error and will not pick up the " +
+            "file again.")
     protected Expression moveFailed;
-    @UriParam(label = "consumer", javaType = "java.lang.String")
+    @UriParam(label = "consumer", javaType = "java.lang.String", description = "Expression (such as File Language) " +
+            "used to dynamically set the filename when moving it before processing. For example to move in-progress " +
+            "files into the order directory set this value to order.")
     protected Expression preMove;
-    @UriParam(label = "producer", javaType = "java.lang.String")
+    @UriParam(label = "producer", javaType = "java.lang.String", description = "Expression (such as File Language) " +
+            "used to compute file name to use when fileExist=Move is configured. To move files into a backup " +
+            "subdirectory just enter backup. This option only supports the following File Language tokens: " +
+            "\"file:name\", \"file:name.ext\", \"file:name.noext\", \"file:onlyname\", \"file:onlyname.noext\", " +
+            "\"file:ext\", and \"file:parent\". Notice the \"file:parent\" is not supported by the FTP component, " +
+            "as the FTP component can only move any existing files to a relative directory based on current dir " +
+            "as base.")
     protected Expression moveExisting;
-    @UriParam(label = "producer,advanced")
+    @UriParam(label = "producer,advanced", description = "Strategy (Custom Strategy) used to move file with special " +
+            "naming token to use when fileExist=Move is configured. By default, there is an implementation used if " +
+            "no custom strategy is provided")
     protected FileMoveExistingStrategy moveExistingFileStrategy;
-    @UriParam(label = "consumer,filter", defaultValue = "false")
+    @UriParam(label = "consumer,filter", defaultValue = "false", description = "Option to use the Idempotent " +
+            "Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based " +
+            "LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid " +
+            "consuming the same files over and over again.")
     protected Boolean idempotent;
-    @UriParam(label = "consumer,filter", javaType = "java.lang.String")
+    @UriParam(label = "consumer,filter", javaType = "java.lang.String", description = "To use a custom idempotent " +
+            "key. By default the absolute path of the file is used. You can use the File Language, for example to " +
+            "use the file name and file size, you can do: idempotentKey=${file:name}-${file:size}")
     protected Expression idempotentKey;
-    @UriParam(label = "consumer,filter")
+    @UriParam(label = "consumer,filter", description = "A pluggable repository org.apache.camel.spi.IdempotentRepository " +
+            "which by default use MemoryMessageIdRepository if none is specified and idempotent is true.")
     protected IdempotentRepository idempotentRepository;
-    @UriParam(label = "consumer,filter")
+    @UriParam(label = "consumer,filter", description = "Pluggable filter as a org.apache.camel.component.file.GenericFileFilter " +
+            "class. Will skip files if filter returns false in its accept() method.")
     protected GenericFileFilter<T> filter;
-    @UriParam(label = "consumer,filter", javaType = "java.lang.String")
+    @UriParam(label = "consumer,filter", javaType = "java.lang.String", description = "Filters the directory based on " +
+            "Simple language. For example to filter on current date, you can use a simple date pattern such as " +
+            "${date:now:yyyMMdd}")
     protected Predicate filterDirectory;
-    @UriParam(label = "consumer,filter", javaType = "java.lang.String")
+    @UriParam(label = "consumer,filter", javaType = "java.lang.String", description = "Filters the file based on " +
+            "Simple language. For example to filter on file size, you can use ${file:size} > 5000")
     protected Predicate filterFile;
-    @UriParam(label = "consumer,filter", defaultValue = "true")
+    @UriParam(label = "consumer,filter", defaultValue = "true", description = "Sets case sensitive flag on ant filter.")
     protected boolean antFilterCaseSensitive = true;
     protected volatile AntPathMatcherGenericFileFilter<T> antFilter;
-    @UriParam(label = "consumer,filter")
+    @UriParam(label = "consumer,filter", description = "Ant style filter inclusion. Multiple inclusions may be " +
+            "specified in comma-delimited format.")
     protected String antInclude;
-    @UriParam(label = "consumer,filter")
+    @UriParam(label = "consumer,filter", 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.")
     protected String antExclude;
-    @UriParam(label = "consumer,sort")
+    @UriParam(label = "consumer,sort", description = "Pluggable sorter as a " +
+            "java.util.Comparator<org.apache.camel.component.file.GenericFile> class.")
     protected Comparator<GenericFile<T>> sorter;
-    @UriParam(label = "consumer,sort", javaType = "java.lang.String")
+    @UriParam(label = "consumer,sort", javaType = "java.lang.String", description = "Built-in sort by using the " +
+            "File Language. Supports nested sorts, so you can have a sort by file name and as a 2nd group sort " +
+            "by modified date.")
     protected Comparator<Exchange> sortBy;
-    @UriParam(label = "consumer,sort")
+    @UriParam(label = "consumer,sort", description = "To shuffle the list of files (sort in random order)")
     protected boolean shuffle;
-    @UriParam(label = "consumer,lock", defaultValue = "none", enums = "none,markerFile,fileLock,rename,changed,idempotent,idempotent-changed,idempotent-rename")
+    @UriParam(label = "consumer,lock", defaultValue = "none", enums = "none,markerFile,fileLock,rename,changed,idempotent,idempotent-changed,idempotent-rename",
+              description = "Used by consumer, to only poll the files if it has exclusive read-lock on the file (i.e. " +
+                      "the file is not in-progress or being written). Camel will wait until the file lock is granted. " +
+                      "This option provides the build in strategies:<p/>" +
+                      " - none - No read lock is in use<p/>" +
+                      " - markerFile - Camel creates a marker file (fileName.camelLock) and then holds a lock on it. " +
+                      "This option is not available for the FTP component<p/>" +
+                      " - changed - Changed is using file length/modification timestamp to detect whether the file " +
+                      "is currently being copied or not. Will at least use 1 sec to determine this, so this option " +
+                      "cannot consume files as fast as the others, but can be more reliable as the JDK IO API " +
+                      "cannot always determine whether a file is currently being used by another process. The option " +
+                      "readLockCheckInterval can be used to set the check frequency.<p/>" +
+                      " - fileLock - is for using java.nio.channels.FileLock. This option is not avail for Windows OS " +
+                      "and the FTP component. This approach should be avoided when accessing a remote file system via " +
+                      "a mount/share unless that file system supports distributed file locks.<p/>" +
+                      " - rename - rename is for using a try to rename the file as a test if we can get exclusive " +
+                      "read-lock.<p/>" +
+                      " - idempotent - (only for file component) idempotent is for using a idempotentRepository " +
+                      "as the read-lock. This allows to use read locks that supports clustering if the idempotent " +
+                      "repository implementation supports that.<p/>" +
+                      " - idempotent-changed - (only for file component) idempotent-changed is for using a " +
+                      "idempotentRepository and changed as the combined read-lock. This allows to use read locks " +
+                      "that supports clustering if the idempotent repository implementation supports that.<p/>" +
+                      " - idempotent-rename - (only for file component) idempotent-rename is for using a " +
+                      "idempotentRepository and rename as the combined read-lock. This allows to use read locks " +
+                      "that supports clustering if the idempotent repository implementation supports that.<p/>" +
+                      "Notice: The various read locks is not all suited to work in clustered mode, where concurrent " +
+                      "consumers on different nodes is competing for the same files on a shared file system. The " +
+                      "markerFile using a close to atomic operation to create the empty marker file, but its not " +
+                      "guaranteed to work in a cluster. The fileLock may work better but then the file system need " +
+                      "to support distributed file locks, and so on. Using the idempotent read lock can support " +
+                      "clustering if the idempotent repository supports clustering, such as Hazelcast Component or " +
+                      "Infinispan.")
     protected String readLock = "none";
-    @UriParam(label = "consumer,lock", defaultValue = "1000")
+    @UriParam(label = "consumer,lock", defaultValue = "1000", description = "Interval in millis for the read-lock, " +
+            "if supported by the read lock. This interval is used for sleeping between attempts to acquire the read " +
+            "lock. For example when using the changed read lock, you can set a higher interval period to cater for " +
+            "slow writes. The default of 1 sec. may be too fast if the producer is very slow writing the file. <p/>" +
+            "Notice: For FTP the default readLockCheckInterval is 5000. <p/> The readLockTimeout value must be " +
+            "higher than readLockCheckInterval, but a rule of thumb is to have a timeout that is at least 2 or more " +
+            "times higher than the readLockCheckInterval. This is needed to ensure that amble time is allowed for " +
+            "the read lock process to try to grab the lock before the timeout was hit.")
     protected long readLockCheckInterval = 1000;
-    @UriParam(label = "consumer,lock", defaultValue = "10000")
+    @UriParam(label = "consumer,lock", defaultValue = "10000", description = "Optional timeout in millis for the " +
+            "read-lock, if supported by the read-lock. If the read-lock could not be granted and the timeout " +
+            "triggered, then Camel will skip the file. At next poll Camel, will try the file again, and this time " +
+            "maybe the read-lock could be granted. Use a value of 0 or lower to indicate forever. Currently " +
+            "fileLock, changed and rename support the timeout. <p/> Notice: For FTP the default readLockTimeout " +
+            "value is 20000 instead of 10000. <p/> The readLockTimeout value must be higher than " +
+            "readLockCheckInterval, but a rule of thumb is to have a timeout that is at least 2 or more times " +
+            "higher than the readLockCheckInterval. This is needed to ensure that amble time is allowed for the " +
+            "read lock process to try to grab the lock before the timeout was hit.")
     protected long readLockTimeout = 10000;
-    @UriParam(label = "consumer,lock", defaultValue = "true")
+    @UriParam(label = "consumer,lock", defaultValue = "true", description = "Whether to use marker file with the " +
+            "changed, rename, or exclusive read lock types. By default a marker file is used as well to guard " +
+            "against other processes picking up the same files. This behavior can be turned off by setting this " +
+            "option to false. For example if you do not want to write marker files to the file systems by the " +
+            "Camel application.")
     protected boolean readLockMarkerFile = true;
-    @UriParam(label = "consumer,lock", defaultValue = "true")
+    @UriParam(label = "consumer,lock", defaultValue = "true", description = "Whether or not read lock with marker " +
+            "files should upon startup delete any orphan read lock files, which may have been left on the file " +
+            "system, if Camel was not properly shutdown (such as a JVM crash). <p/> If turning this option to " +
+            "<tt>false</tt> then any orphaned lock file will cause Camel to not attempt to pickup that file, this " +
+            "could also be due another node is concurrently reading files from the same shared directory.")
     protected boolean readLockDeleteOrphanLockFiles = true;
-    @UriParam(label = "consumer,lock", defaultValue = "DEBUG")
+    @UriParam(label = "consumer,lock", defaultValue = "DEBUG", description = "Logging level used when a read lock " +
+            "could not be acquired. By default a DEBUG is logged. You can change this level, for example to OFF to " +
+            "not have any logging. This option is only applicable for readLock of types: changed, fileLock, " +
+            "idempotent, idempotent-changed, idempotent-rename, rename.")
     protected LoggingLevel readLockLoggingLevel = LoggingLevel.DEBUG;
-    @UriParam(label = "consumer,lock", defaultValue = "1")
+    @UriParam(label = "consumer,lock", defaultValue = "1", description = "This option is applied only for " +
+            "readLock=changed. It allows you to configure a minimum file length. By default Camel expects the file " +
+            "to contain data, and thus the default value is 1. You can set this option to zero, to allow consuming " +
+            "zero-length files.")
     protected long readLockMinLength = 1;
-    @UriParam(label = "consumer,lock", defaultValue = "0")
+    @UriParam(label = "consumer,lock", defaultValue = "0", description = "This option is applied only for " +
+            "readLock=changed. It allows to specify a minimum age the file must be before attempting to acquire " +
+            "the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This " +
+            "can speedup the changed read lock as it will only attempt to acquire files which are at least " +
+            "that given age.")
     protected long readLockMinAge;
-    @UriParam(label = "consumer,lock", defaultValue = "true")
+    @UriParam(label = "consumer,lock", defaultValue = "true", description = "This option is applied only for " +
+            "readLock=idempotent. It allows to specify whether to remove the file name entry from the idempotent " +
+            "repository when processing the file failed and a rollback happens. If this option is false, then the " +
+            "file name entry is confirmed (as if the file did a commit).")
     protected boolean readLockRemoveOnRollback = true;
-    @UriParam(label = "consumer,lock")
+    @UriParam(label = "consumer,lock", description = "This option is applied only for readLock=idempotent. It allows " +
+            "to specify whether to remove the file name entry from the idempotent repository when processing the " +
+            "file is succeeded and a commit happens. <p/> By default the file is not removed which ensures that " +
+            "any race-condition do not occur so another active node may attempt to grab the file. Instead the " +
+            "idempotent repository may support eviction strategies that you can configure to evict the file name " +
+            "entry after X minutes - this ensures no problems with race conditions. <p/> See more details at the " +
+            "readLockIdempotentReleaseDelay option.")
     protected boolean readLockRemoveOnCommit;
-    @UriParam(label = "consumer,lock")
+    @UriParam(label = "consumer,lock", description = "Whether to delay the release task for a period of millis. <p/> " +
+            "This can be used to delay the release tasks to expand the window when a file is regarded as " +
+            "read-locked, in an active/active cluster scenario with a shared idempotent repository, to ensure " +
+            "other nodes cannot potentially scan and acquire the same file, due to race-conditions. By expanding " +
+            "the time-window of the release tasks helps prevents these situations. Note delaying is only needed " +
+            "if you have configured readLockRemoveOnCommit to true.")
     protected int readLockIdempotentReleaseDelay;
-    @UriParam(label = "consumer,lock")
+    @UriParam(label = "consumer,lock", description = "Whether the delayed release task should be synchronous or " +
+            "asynchronous. <p/> See more details at the readLockIdempotentReleaseDelay option.")
     protected boolean readLockIdempotentReleaseAsync;
-    @UriParam(label = "consumer,lock")
+    @UriParam(label = "consumer,lock", description = "The number of threads in the scheduled thread pool when using " +
+            "asynchronous release tasks. Using a default of 1 core threads should be sufficient in almost all " +
+            "use-cases, only set this to a higher value if either updating the idempotent repository is slow, or " +
+            "there are a lot of files to process. This option is not in-use if you use a shared thread pool by " +
+            "configuring the readLockIdempotentReleaseExecutorService option. <p/> See more details at the " +
+            "readLockIdempotentReleaseDelay option.")
     protected int readLockIdempotentReleaseAsyncPoolSize;
-    @UriParam(label = "consumer,lock")
+    @UriParam(label = "consumer,lock", description = "To use a custom and shared thread pool for asynchronous " +
+            "release tasks. <p/> See more details at the readLockIdempotentReleaseDelay option.")
     protected ScheduledExecutorService readLockIdempotentReleaseExecutorService;
-    @UriParam(label = "consumer,lock")
+    @UriParam(label = "consumer,lock", description = "Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation.")
     protected GenericFileExclusiveReadLockStrategy<T> exclusiveReadLockStrategy;
-    @UriParam(label = "consumer,advanced")
+    @UriParam(label = "consumer,advanced", description = "To use a custom " +
+            "{@link org.apache.camel.spi.ExceptionHandler} to handle any thrown exceptions that happens during " +
+            "the file on completion process where the consumer does either a commit or rollback. The default " +
+            "implementation will log any exception at WARN level and ignore.")
     protected ExceptionHandler onCompletionExceptionHandler;
 
     private Pattern includePattern;
diff --git a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java
index dc0de9a..4ec44e5 100644
--- a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java
+++ b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java
@@ -41,41 +41,68 @@ public abstract class RemoteFileConfiguration extends GenericFileConfiguration {
 
     // component name is implied as the protocol, eg ftp/ftps etc
     private String protocol;
-    @UriPath @Metadata(required = true)
+    @UriPath(description = "Hostname of the FTP server") @Metadata(required = true)
     private String host;
-    @UriPath
+    @UriPath(description = "Port of the FTP server")
     private int port;
-    @UriPath(name = "directoryName")
+    @UriPath(name = "directoryName", description = "The starting directory")
     private String directoryName;
-    @UriParam(label = "security", secret = true)
+    @UriParam(label = "security", secret = true, description = "Username to use for login")
     private String username;
-    @UriParam(label = "security", secret = true)
+    @UriParam(label = "security", secret = true, description = "Password to use for login")
     private String password;
-    @UriParam
+    @UriParam(description = "Specifies the file transfer mode, BINARY or ASCII. Default is ASCII (false).")
     private boolean binary;
-    @UriParam
+    @UriParam(description = "Sets passive mode connections.<br/> Default is active mode connections.")
     private boolean passiveMode;
-    @UriParam(defaultValue = "10000", label = "advanced")
+    @UriParam(defaultValue = "10000", label = "advanced", description = "Sets the connect timeout for waiting " +
+            "for a connection to be established <p/> Used by both FTPClient and JSCH")
     private int connectTimeout = 10000;
-    @UriParam(defaultValue = "30000", label = "advanced")
+    @UriParam(defaultValue = "30000", label = "advanced", description = "Sets the data timeout for waiting for " +
+            "reply <p/> Used only by FTPClient")
     private int timeout = 30000;
-    @UriParam(defaultValue = "300000", label = "advanced")
+    @UriParam(defaultValue = "300000", label = "advanced", description = "Sets the so timeout <p/> FTP and FTPS " +
+            "Only for Camel 2.4. SFTP for Camel 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value " +
+            "in millis. Recommended option is to set this to 300000 so as not have a hanged connection. On SFTP this " +
+            "option is set as timeout on the JSCH Session instance.")
     private int soTimeout = 300000;
-    @UriParam(label = "advanced")
+    @UriParam(label = "advanced", description = "Should an exception be thrown if connection failed (exhausted) <p/> " +
+            "By default exception is not thrown and a <tt>WARN</tt> is logged. You can use this to enable exception " +
+            "being thrown and handle the thrown exception from the {@link " +
+            "org.apache.camel.spi.PollingConsumerPollStrategy} rollback method.")
     private boolean throwExceptionOnConnectFailed;
-    @UriParam(label = "advanced")
+    @UriParam(label = "advanced", description = "Sets optional site command(s) to be executed after successful " +
+            "login. <p/> Multiple site commands can be separated using a new line character.")
     private String siteCommand;
-    @UriParam(defaultValue = "true", label = "advanced")
+    @UriParam(defaultValue = "true", label = "advanced", description = "Sets whether we should stepwise change " +
+            "directories while traversing file structures when downloading files, or as well when uploading a file " +
+            "to a directory. <p/> You can disable this if you for example are in a situation where you cannot change " +
+            "directory on the FTP server due security reasons. @param stepwise whether to use change directory or not")
     private boolean stepwise = true;
-    @UriParam(defaultValue = "UNIX")
+    @UriParam(defaultValue = "UNIX", description = "Sets the path separator to be used. <p/> UNIX = Uses unix style " +
+            "path separator Windows = Uses windows style path separator Auto = (is default) Use existing path " +
+            "separator in file name")
     private PathSeparator separator = PathSeparator.UNIX;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer", description = "Sets the download method to use when not using a local working " +
+            "directory.  If set to true, the remote files are streamed to the route as they are read.  When set to " +
+            "false, the remote files are loaded into memory before being sent into the route.")
     private boolean streamDownload;
-    @UriParam(defaultValue = "true", label = "consumer,advanced")
+    @UriParam(defaultValue = "true", label = "consumer,advanced", description = "Whether to allow using LIST " +
+            "command when downloading a file. <p/> Default is <tt>true</tt>. In some use cases you may want to " +
+            "download a specific file and are not allowed to use the LIST command, and therefore you can set " +
+            "this option to <tt>false</tt>. Notice when using this option, then the specific file to download " +
+            "does <b>not</b> include meta-data information such as file size, timestamp, permissions etc, because " +
+            "those information is only possible to retrieve when LIST command is in use.")
     private boolean useList = true;
-    @UriParam(label = "consumer,advanced")
+    @UriParam(label = "consumer,advanced", description = "Whether to ignore when (trying to list files in " +
+            "directories or when downloading a file), which does not exist or due to permission error. <p/> " +
+            "By default when a directory or file does not exists or insufficient permission, then an exception " +
+            "is thrown. Setting this option to <tt>true</tt> allows to ignore that instead.")
     private boolean ignoreFileNotFoundOrPermissionError;
-    @UriParam(label = "producer,advanced", defaultValue = "true")
+    @UriParam(label = "producer,advanced", defaultValue = "true", description = "Whether to send a noop command " +
+            "as a pre-write check before uploading files to the FTP server. <p/> This is enabled by default as " +
+            "a validation of the connection is still valid, which allows to silently re-connect to be able to " +
+            "upload the file. However if this causes problems, you can turn this option off.")
     private boolean sendNoop = true;
 
     public RemoteFileConfiguration() {
diff --git a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java
index fdf7646..eed2033 100644
--- a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java
+++ b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java
@@ -39,17 +39,30 @@ public abstract class RemoteFileEndpoint<T> extends GenericFileEndpoint<T> {
 
     private static final Logger LOG = LoggerFactory.getLogger(RemoteFileEndpoint.class);
 
-    @UriParam(label = "advanced")
+    @UriParam(label = "advanced", description = "Specifies the maximum reconnect attempts Camel performs when it " +
+            "tries to connect to the remote FTP server. Use 0 to disable this behavior.")
     private int maximumReconnectAttempts = 3;
-    @UriParam(label = "advanced")
+    @UriParam(label = "advanced", description = "Delay in millis Camel will wait before performing a reconnect attempt.")
     private long reconnectDelay = 1000;
-    @UriParam(label = "common")
+    @UriParam(label = "common", description = "Whether or not to disconnect from remote FTP server right after use. " +
+            "Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which " +
+            "you want to stop, then you need to stop the consumer/route instead.")
     private boolean disconnect;
-    @UriParam(label = "producer,advanced")
+    @UriParam(label = "producer,advanced", description = "Whether or not to disconnect from remote FTP server right " +
+            "after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection " +
+            "to the FTP server.")
     private boolean disconnectOnBatchComplete;   
-    @UriParam(label = "common,advanced")
+    @UriParam(label = "common,advanced", description = "If set this option to be true, camel-ftp will use the list " +
+            "file directly to check if the file exists. Since some FTP server may not support to list the file " +
+            "directly, if the option is false, camel-ftp will use the old way to list the directory and check if the " +
+            "file exists. This option also influences readLock=changed to control whether it performs a fast check " +
+            "to update file information or not. This can be used to speed up the process if the FTP server has a lot " +
+            "of files.")
     private boolean fastExistsCheck;
-    @UriParam(label = "consumer,advanced")
+    @UriParam(label = "consumer,advanced", description = "Whether the FTP consumer should download the file. If this " +
+            "option is set to false, then the message body will be null, but the consumer will still trigger a Camel " +
+            "Exchange that has details about the file such as file name, file size, etc. It's just that the file will " +
+            "not be downloaded.")
     private boolean download = true;
 
     public RemoteFileEndpoint() {
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
index 6a9c3b0..36975ac 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
@@ -215,7 +215,7 @@ public class EndpointAnnotationProcessor extends AbstractCamelAnnotationProcesso
         option.setDescription(doc);
 
         if (isNullOrEmpty(doc)) {
-            throw new IllegalStateException("Empty doc for option: " + option.getName() + ", parent options:\n"
+            throw new IllegalStateException("Empty doc for option: " + option.getName() + ", parent options: "
                                             + (parentOptions != null ? Jsoner.serialize(JsonMapper.asJsonObject(parentOptions)) : "<null>"));
         }
     }


[camel] 02/02: [CAMEL-14451] Regen

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 78fe8f029632e74e812f6739574f464e2639b2f1
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu Jan 30 21:36:28 2020 +0100

    [CAMEL-14451] Regen
---
 .../apache/camel/component/feed/FeedEndpoint.java  |   22 +-
 .../camel-ftp/src/main/docs/ftp-component.adoc     |   66 +-
 .../camel-ftp/src/main/docs/ftps-component.adoc    |   80 +-
 .../camel-ftp/src/main/docs/sftp-component.adoc    |   84 +-
 .../camel-jsch/src/main/docs/scp-component.adoc    |   96 +-
 .../camel-rss/src/main/docs/rss-component.adoc     |    6 +-
 .../endpoint/dsl/FtpEndpointBuilderFactory.java    | 3070 ++++++------
 .../endpoint/dsl/FtpsEndpointBuilderFactory.java   | 3666 +++++++++------
 .../endpoint/dsl/ScpEndpointBuilderFactory.java    | 2353 ++--------
 .../endpoint/dsl/SftpEndpointBuilderFactory.java   | 4944 +++++++++++---------
 10 files changed, 7237 insertions(+), 7150 deletions(-)

diff --git a/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java b/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java
index 15ed9c3..25fbd0f 100644
--- a/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java
+++ b/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java
@@ -33,23 +33,27 @@ import org.apache.camel.util.ObjectHelper;
  */
 public abstract class FeedEndpoint extends DefaultPollingEndpoint {
 
-    @UriPath @Metadata(required = true)
+    @UriPath(description = "The URI to the feed to poll.") @Metadata(required = true)
     protected String feedUri;
-    @UriParam(defaultValue = "true")
+    @UriParam(defaultValue = "true", description = "Sets whether or not entries should be sent " +
+            "individually or whether the entire feed should be sent as a single message")
     protected boolean splitEntries = true;
-    @UriParam
+    @UriParam(description = "Sets the timestamp to be used for filtering entries from the " +
+            "atom feeds. This options is only in conjunction with the splitEntries.")
     protected Date lastUpdate;
-    @UriParam(defaultValue = "true")
+    @UriParam(defaultValue = "true", description = "Sets whether to use filtering or not of the entries.")
     protected boolean filter = true;
-    @UriParam(defaultValue = "true")
+    @UriParam(defaultValue = "true", description = "Sets whether to add the feed object as a header.")
     private boolean feedHeader = true;
-    @UriParam
+    @UriParam(description = "Sets whether to sort entries by published date. Only works when splitEntries = true.")
     private boolean sortEntries;
-    @UriParam(defaultValue = "true")
+    @UriParam(defaultValue = "true", description = "Sets whether all entries identified in a " +
+            "single feed poll should be delivered immediately. If true, only one entry is processed " +
+            "per consumer.delay. Only applicable when splitEntries = true.")
     private boolean throttleEntries = true;
-    @UriParam
+    @UriParam(description = "Sets the username to be used for basic authentication when polling from a HTTP feed.")
     private String username;
-    @UriParam
+    @UriParam(description = "Sets the password to be used for basic authentication when polling from a HTTP feed.")
     private String password;
 
     public FeedEndpoint() {
diff --git a/components/camel-ftp/src/main/docs/ftp-component.adoc b/components/camel-ftp/src/main/docs/ftp-component.adoc
index ee48fd1..ce9b1b2 100644
--- a/components/camel-ftp/src/main/docs/ftp-component.adoc
+++ b/components/camel-ftp/src/main/docs/ftp-component.adoc
@@ -107,42 +107,23 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (104 parameters):
+=== Query Parameters (110 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *binary* (common) | Specifies the file transfer mode, BINARY or ASCII. Default is ASCII (false). | false | boolean
+| *charset* (common) | This option is used to specify the encoding of the file. You can use this on the consumer, to specify the encodings of the files, which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file, you can use this option to specify which charset to write the file as well. Do mind that when writing the file Camel may have to read the message content into memory to be able to convert the dat [...]
+| *disconnect* (common) | Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop, then you need to stop the consumer/route instead. | false | boolean
+| *doneFileName* (common) | Producer: If provided, then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided, Camel will only consume files if a done file exists. This option configures what file name to use. Either you ca [...]
+| *fileName* (common) | Use Expression such as File Language to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type, it is always evaluated using the File Language. If the express [...]
 | *passiveMode* (common) | Sets passive mode connections. Default is active mode connections. | false | boolean
 | *separator* (common) | Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name | UNIX | PathSeparator
 | *transferLoggingIntervalSeconds* (common) | Configures the interval in seconds to use when logging the progress of upload and download operations that are in-flight. This is used for logging progress when operations takes longer time. | 5 | int
 | *transferLoggingLevel* (common) | Configure the logging level to use when logging the progress of upload and download operations. | DEBUG | LoggingLevel
 | *transferLoggingVerbose* (common) | Configures whether the perform verbose (fine grained) logging of the progress of upload and download operations. | false | boolean
-| *resumeDownload* (consumer) | Configures whether resume download is enabled. This must be supported by the FTP server (almost all FTP servers support it). In addition the options localWorkDirectory must be configured so downloaded files are stored in a local directory, and the option binary must be enabled, which is required to support resuming of downloads. | false | boolean
-| *streamDownload* (consumer) | Sets the download method to use when not using a local working directory. If set to true, the remote files are streamed to the route as they are read. When set to false, the remote files are loaded into memory before being sent into the route. | false | boolean
-| *handleDirectoryParserAbsolute Result* (consumer) | Allows you to set how the consumer will handle subfolders and files in the path if the directory parser results in with absolute paths The reason for this is that some FTP servers may return file names with absolute paths, and if so then the FTP component needs to handle this by converting the returned path into a relative path. | false | boolean
-| *ignoreFileNotFoundOrPermission Error* (consumer) | Whether to ignore when (trying to list files in directories or when downloading a file), which does not exist or due to permission error. By default when a directory or file does not exists or insufficient permission, then an exception is thrown. Setting this option to true allows to ignore that instead. | false | boolean
-| *useList* (consumer) | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command, and therefore you can set this option to false. Notice when using this option, then the specific file to download does not include meta-data information such as file size, timestamp, permissions etc, because those information is only possible to retrieve when LIST command is in use. | [...]
-| *chmod* (producer) | Allows you to set chmod on the stored file. For example chmod=640. |  | String
-| *sendNoop* (producer) | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid, which allows to silently re-connect to be able to upload the file. However if this causes problems, you can turn this option off. | true | boolean
-| *activePortRange* (advanced) | Set the client side port range in active mode. The syntax is: minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to include all 1xxxx ports. |  | String
-| *connectTimeout* (advanced) | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH | 10000 | int
-| *ftpClient* (advanced) | To use a custom instance of FTPClient |  | FTPClient
-| *ftpClientConfig* (advanced) | To use a custom instance of FTPClientConfig to configure the FTP client the endpoint should use. |  | FTPClientConfig
-| *ftpClientConfigParameters* (advanced) | Used by FtpComponent to provide additional parameters for the FTPClientConfig |  | Map
-| *ftpClientParameters* (advanced) | Used by FtpComponent to provide additional parameters for the FTPClient |  | Map
-| *siteCommand* (advanced) | Sets optional site command(s) to be executed after successful login. Multiple site commands can be separated using a new line character. |  | String
-| *soTimeout* (advanced) | Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in millis. Recommended option is to set this to 300000 so as not have a hanged connection. On SFTP this option is set as timeout on the JSCH Session instance. | 300000 | int
-| *stepwise* (advanced) | Sets whether we should stepwise change directories while traversing file structures when downloading files, or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons. | true | boolean
-| *throwExceptionOnConnectFailed* (advanced) | 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. | false | boolean
-| *timeout* (advanced) | Sets the data timeout for waiting for reply Used only by FTPClient | 30000 | int
-| *account* (security) | Account to use for login |  | String
-| *password* (security) | Password to use for login |  | String
-| *username* (security) | Username to use for login |  | String
-| *charset* (common) | This option is used to specify the encoding of the file. You can use this on the consumer, to specify the encodings of the files, which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file, you can use this option to specify which charset to write the file as well. Do mind that when writing the file Camel may have to read the message content into memory to be able to convert the dat [...]
-| *doneFileName* (common) | Producer: If provided, then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided, Camel will only consume files if a done file exists. This option configures what file name to use. Either you ca [...]
-| *fileName* (common) | Use Expression such as File Language to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type, it is always evaluated using the File Language. If the express [...]
+| *fastExistsCheck* (common) | If set this option to be true, camel-\ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly, if the option is false, camel-\ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server ha [...]
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *delete* (consumer) | If true, the file will be deleted after it is processed successfully. | false | boolean
 | *moveFailed* (consumer) | Sets the move failure expression based on Simple language. For example, to move files into a .error subdirectory use: .error. Note: When moving the files to the fail location Camel will handle the error and will not pick up the file again. |  | String
@@ -150,21 +131,21 @@ with the following path and query parameters:
 | *preMove* (consumer) | Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order. |  | String
 | *preSort* (consumer) | When pre-sort is enabled then the consumer will sort the file and directory names during polling, that was retrieved from the file system. You may want to do this in case you need to operate on the files in a sorted order. The pre-sort is executed before the consumer starts to filter, and accept files to process by Camel. This option is default=false meaning disabled. | false | boolean
 | *recursive* (consumer) | If a directory, will look for files in all the sub-directories as well. | false | boolean
+| *resumeDownload* (consumer) | Configures whether resume download is enabled. This must be supported by the FTP server (almost all FTP servers support it). In addition the options localWorkDirectory must be configured so downloaded files are stored in a local directory, and the option binary must be enabled, which is required to support resuming of downloads. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
+| *streamDownload* (consumer) | Sets the download method to use when not using a local working directory. If set to true, the remote files are streamed to the route as they are read. When set to false, the remote files are loaded into memory before being sent into the route. | false | boolean
+| *download* (consumer) | Whether the FTP consumer should download the file. If this option is set to false, then the message body will be null, but the consumer will still trigger a Camel Exchange that has details about the file such as file name, file size, etc. It's just that the file will not be downloaded. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
+| *handleDirectoryParserAbsolute Result* (consumer) | Allows you to set how the consumer will handle subfolders and files in the path if the directory parser results in with absolute paths The reason for this is that some FTP servers may return file names with absolute paths, and if so then the FTP component needs to handle this by converting the returned path into a relative path. | false | boolean
+| *ignoreFileNotFoundOrPermission Error* (consumer) | Whether to ignore when (trying to list files in directories or when downloading a file), which does not exist or due to permission error. By default when a directory or file does not exists or insufficient permission, then an exception is thrown. Setting this option to true allows to ignore that instead. | false | boolean
 | *inProgressRepository* (consumer) | A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used. |  | IdempotentRepository
 | *localWorkDirectory* (consumer) | When consuming, a local work directory can be used to store the remote file content directly in local files, to avoid loading the content into memory. This is beneficial, if you consume a very big remote file and thus can conserve memory. |  | String
 | *onCompletionExceptionHandler* (consumer) | To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore. |  | ExceptionHandler
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *processStrategy* (consumer) | A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed, such as a special ready file exists. If this option is set then the readLock option does not apply. |  | GenericFileProcessStrategy
-| *fileExist* (producer) a| What to do if a file already exists with the same name. Override, which is the default, replaces the existing file. 
-
- - Append - adds content to the existing file.
- - Fail - throws a GenericFileOperationException, indicating that there is already an existing file.
- - Ignore - silently ignores the problem and does not override the existing file, but assumes everything is okay.
- - Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file, and there exists already an existing file, otherwise causing the move operation to fail. The Move option will move any existing files, before writing the target file.
- - TryRename is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name, without doing any exists check. This check may be faster on some file systems and especially FTP servers. | Override | GenericFileExist
+| *useList* (consumer) | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command, and therefore you can set this option to false. Notice when using this option, then the specific file to download does not include meta-data information such as file size, timestamp, permissions etc, because those information is only possible to retrieve when LIST command is in use. | [...]
+| *fileExist* (producer) | What to do if a file already exists with the same name. Override, which is the default, replaces the existing file. - Append - adds content to the existing file. - Fail - throws a GenericFileOperationException, indicating that there is already an existing file. - Ignore - silently ignores the problem and does not override the existing file, but assumes everything is okay. - Move - option requires to use the moveExisting option to be configured as well. The opti [...]
 | *flatten* (producer) | 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 they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths. | false | boolean
 | *jailStartingDirectory* (producer) | 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 secured out of the box). You can turn this off to allow writing files to directories outside the starting directory, such as parent or root folders. | true | boolean
 | *lazyStartProducer* (producer) | 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 otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
@@ -172,15 +153,31 @@ with the following path and query parameters:
 | *tempFileName* (producer) | 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 option 'fileName', not the target directory in the base uri. For example if option fileName includes a directory prefix: dir/finalFilename then tempFileName is relative to that subdirectory dir. |  | String
 | *tempPrefix* (producer) | 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 locks) reading in progress files. Is often used by FTP when uploading big files. |  | String
 | *allowNullBody* (producer) | 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 component, a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override', then the file will be truncated, and if set to append the file will remain unchanged. | false | boolean
+| *chmod* (producer) | Allows you to set chmod on the stored file. For example chmod=640. |  | String
+| *disconnectOnBatchComplete* (producer) | Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server. | false | boolean
 | *eagerDeleteTargetFile* (producer) | 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 this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment, just before t [...]
 | *keepLastModified* (producer) | Will keep the last modified timestamp from the source file (if any). Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This header can contain either a java.util.Date or long with the timestamp. If the timestamp exists and the option is enabled it will set this timestamp on the written file. Note: This option only applies to the file producer. You cannot use this option with any of the \ftp producers. | false | boolean
 | *moveExistingFileStrategy* (producer) | Strategy (Custom Strategy) used to move file with special naming token to use when fileExist=Move is configured. By default, there is an implementation used if no custom strategy is provided |  | FileMoveExistingStrategy
+| *sendNoop* (producer) | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid, which allows to silently re-connect to be able to upload the file. However if this causes problems, you can turn this option off. | true | boolean
+| *activePortRange* (advanced) | Set the client side port range in active mode. The syntax is: minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to include all 1xxxx ports. |  | String
 | *autoCreate* (advanced) | 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. | true | boolean
 | *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
 | *bufferSize* (advanced) | Buffer size in bytes used for writing files (or in case of FTP for downloading and uploading files). | 131072 | int
+| *connectTimeout* (advanced) | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH | 10000 | int
+| *ftpClient* (advanced) | To use a custom instance of FTPClient |  | FTPClient
+| *ftpClientConfig* (advanced) | To use a custom instance of FTPClientConfig to configure the FTP client the endpoint should use. |  | FTPClientConfig
+| *ftpClientConfigParameters* (advanced) | Used by FtpComponent to provide additional parameters for the FTPClientConfig |  | Map
+| *ftpClientParameters* (advanced) | Used by FtpComponent to provide additional parameters for the FTPClient |  | Map
+| *maximumReconnectAttempts* (advanced) | Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior. |  | int
+| *reconnectDelay* (advanced) | Delay in millis Camel will wait before performing a reconnect attempt. |  | long
+| *siteCommand* (advanced) | Sets optional site command(s) to be executed after successful login. Multiple site commands can be separated using a new line character. |  | String
+| *soTimeout* (advanced) | Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in millis. Recommended option is to set this to 300000 so as not have a hanged connection. On SFTP this option is set as timeout on the JSCH Session instance. | 300000 | int
+| *stepwise* (advanced) | Sets whether we should stepwise change directories while traversing file structures when downloading files, or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons. | true | boolean
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+| *throwExceptionOnConnectFailed* (advanced) | 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. | false | boolean
+| *timeout* (advanced) | Sets the data timeout for waiting for reply Used only by FTPClient | 30000 | int
 | *antExclude* (filter) | 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. |  | String
-| *antFilterCaseSensitive* (filter) | Sets case sensitive flag on ant filter | true | boolean
+| *antFilterCaseSensitive* (filter) | Sets case sensitive flag on ant filter. | true | boolean
 | *antInclude* (filter) | Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format. |  | String
 | *eagerMaxMessagesPerPoll* (filter) | Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files, and then perform sorting. Setting this option to false allows for sorting all files first, and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting. | true | boolean
 | *exclude* (filter) | Is used to exclude files, if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris |  | String
@@ -234,6 +231,9 @@ Notice: The various read locks is not all suited to work in clustered mode, wher
 | *shuffle* (sort) | To shuffle the list of files (sort in random order) | false | boolean
 | *sortBy* (sort) | Built-in sort by using the File Language. Supports nested sorts, so you can have a sort by file name and as a 2nd group sort by modified date. |  | String
 | *sorter* (sort) | Pluggable sorter as a java.util.Comparator class. |  | Comparator
+| *account* (security) | Account to use for login |  | String
+| *password* (security) | Password to use for login |  | String
+| *username* (security) | Username to use for login |  | String
 |===
 // endpoint options: END
 // spring-boot-auto-configure options: START
diff --git a/components/camel-ftp/src/main/docs/ftps-component.adoc b/components/camel-ftp/src/main/docs/ftps-component.adoc
index e14f62a..d6430d7 100644
--- a/components/camel-ftp/src/main/docs/ftps-component.adoc
+++ b/components/camel-ftp/src/main/docs/ftps-component.adoc
@@ -66,42 +66,23 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (104 parameters):
+=== Query Parameters (118 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *binary* (common) | Specifies the file transfer mode, BINARY or ASCII. Default is ASCII (false). | false | boolean
-| *passiveMode* (common) | Sets passive mode connections. Default is active mode connections. | false | boolean
-| *separator* (common) | Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name | UNIX | PathSeparator
-| *streamDownload* (consumer) | Sets the download method to use when not using a local working directory. If set to true, the remote files are streamed to the route as they are read. When set to false, the remote files are loaded into memory before being sent into the route. | false | boolean
-| *handleDirectoryParserAbsolute Result* (consumer) | Allows you to set how the consumer will handle subfolders and files in the path if the directory parser results in with absolute paths The reason for this is that some FTP servers may return file names with absolute paths, and if so then the FTP component needs to handle this by converting the returned path into a relative path. | false | boolean
-| *ignoreFileNotFoundOrPermission Error* (consumer) | Whether to ignore when (trying to list files in directories or when downloading a file), which does not exist or due to permission error. By default when a directory or file does not exists or insufficient permission, then an exception is thrown. Setting this option to true allows to ignore that instead. | false | boolean
-| *useList* (consumer) | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command, and therefore you can set this option to false. Notice when using this option, then the specific file to download does not include meta-data information such as file size, timestamp, permissions etc, because those information is only possible to retrieve when LIST command is in use. | [...]
-| *chmod* (producer) | Allows you to set chmod on the stored file. For example chmod=640. |  | String
-| *sendNoop* (producer) | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid, which allows to silently re-connect to be able to upload the file. However if this causes problems, you can turn this option off. | true | boolean
-| *activePortRange* (advanced) | Set the client side port range in active mode. The syntax is: minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to include all 1xxxx ports. |  | String
-| *connectTimeout* (advanced) | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH | 10000 | int
-| *siteCommand* (advanced) | Sets optional site command(s) to be executed after successful login. Multiple site commands can be separated using a new line character. |  | String
-| *soTimeout* (advanced) | Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in millis. Recommended option is to set this to 300000 so as not have a hanged connection. On SFTP this option is set as timeout on the JSCH Session instance. | 300000 | int
-| *stepwise* (advanced) | Sets whether we should stepwise change directories while traversing file structures when downloading files, or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons. | true | boolean
-| *throwExceptionOnConnectFailed* (advanced) | 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. | false | boolean
-| *timeout* (advanced) | Sets the data timeout for waiting for reply Used only by FTPClient | 30000 | int
-| *account* (security) | Account to use for login |  | String
-| *disableSecureDataChannel Defaults* (security) | Use this option to disable default options when using secure data channel. This allows you to be in full control what the execPbsz and execProt setting should be used. Default is false | false | boolean
-| *execPbsz* (security) | When using secure data channel you can set the exec protection buffer size |  | Long
-| *execProt* (security) | The exec protection level PROT command. C - Clear S - Safe(SSL protocol only) E - Confidential(SSL protocol only) P - Private |  | String
-| *ftpClientKeyStoreParameters* (security) | Set the key store parameters |  | Map
-| *ftpClientTrustStoreParameters* (security) | Set the trust store parameters |  | Map
-| *implicit* (security) | Set the security mode (Implicit/Explicit). true - Implicit Mode / False - Explicit Mode | false | boolean
-| *password* (security) | Password to use for login |  | String
-| *securityProtocol* (security) | Set the underlying security protocol. | TLSv1.2 | String
-| *sslContextParameters* (security) | Gets the JSSE configuration that overrides any settings in FtpsEndpoint#\ftpClientKeyStoreParameters, \ftpClientTrustStoreParameters, and FtpsConfiguration#getSecurityProtocol(). |  | SSLContextParameters
-| *username* (security) | Username to use for login |  | String
 | *charset* (common) | This option is used to specify the encoding of the file. You can use this on the consumer, to specify the encodings of the files, which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file, you can use this option to specify which charset to write the file as well. Do mind that when writing the file Camel may have to read the message content into memory to be able to convert the dat [...]
-| *doneFileName* (common) | Producer: If provided, then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided, Camel will only consume files if a done file exists. This option configures what file name to use. Either you ca [...]
+| *disconnect* (common) | Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop, then you need to stop the consumer/route instead. | false | boolean
+| *doneFileName* (common) | Producer: If provided, then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided, Camel will only consume files if a done file exists. This option configures what file name to use. Either you ca [...]
 | *fileName* (common) | Use Expression such as File Language to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type, it is always evaluated using the File Language. If the express [...]
+| *passiveMode* (common) | Sets passive mode connections. Default is active mode connections. | false | boolean
+| *separator* (common) | Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name | UNIX | PathSeparator
+| *transferLoggingIntervalSeconds* (common) | Configures the interval in seconds to use when logging the progress of upload and download operations that are in-flight. This is used for logging progress when operations takes longer time. | 5 | int
+| *transferLoggingLevel* (common) | Configure the logging level to use when logging the progress of upload and download operations. | DEBUG | LoggingLevel
+| *transferLoggingVerbose* (common) | Configures whether the perform verbose (fine grained) logging of the progress of upload and download operations. | false | boolean
+| *fastExistsCheck* (common) | If set this option to be true, camel-\ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly, if the option is false, camel-\ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server ha [...]
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *delete* (consumer) | If true, the file will be deleted after it is processed successfully. | false | boolean
 | *moveFailed* (consumer) | Sets the move failure expression based on Simple language. For example, to move files into a .error subdirectory use: .error. Note: When moving the files to the fail location Camel will handle the error and will not pick up the file again. |  | String
@@ -109,21 +90,21 @@ with the following path and query parameters:
 | *preMove* (consumer) | Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order. |  | String
 | *preSort* (consumer) | When pre-sort is enabled then the consumer will sort the file and directory names during polling, that was retrieved from the file system. You may want to do this in case you need to operate on the files in a sorted order. The pre-sort is executed before the consumer starts to filter, and accept files to process by Camel. This option is default=false meaning disabled. | false | boolean
 | *recursive* (consumer) | If a directory, will look for files in all the sub-directories as well. | false | boolean
+| *resumeDownload* (consumer) | Configures whether resume download is enabled. This must be supported by the FTP server (almost all FTP servers support it). In addition the options localWorkDirectory must be configured so downloaded files are stored in a local directory, and the option binary must be enabled, which is required to support resuming of downloads. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
+| *streamDownload* (consumer) | Sets the download method to use when not using a local working directory. If set to true, the remote files are streamed to the route as they are read. When set to false, the remote files are loaded into memory before being sent into the route. | false | boolean
+| *download* (consumer) | Whether the FTP consumer should download the file. If this option is set to false, then the message body will be null, but the consumer will still trigger a Camel Exchange that has details about the file such as file name, file size, etc. It's just that the file will not be downloaded. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
+| *handleDirectoryParserAbsolute Result* (consumer) | Allows you to set how the consumer will handle subfolders and files in the path if the directory parser results in with absolute paths The reason for this is that some FTP servers may return file names with absolute paths, and if so then the FTP component needs to handle this by converting the returned path into a relative path. | false | boolean
+| *ignoreFileNotFoundOrPermission Error* (consumer) | Whether to ignore when (trying to list files in directories or when downloading a file), which does not exist or due to permission error. By default when a directory or file does not exists or insufficient permission, then an exception is thrown. Setting this option to true allows to ignore that instead. | false | boolean
 | *inProgressRepository* (consumer) | A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used. |  | IdempotentRepository
 | *localWorkDirectory* (consumer) | When consuming, a local work directory can be used to store the remote file content directly in local files, to avoid loading the content into memory. This is beneficial, if you consume a very big remote file and thus can conserve memory. |  | String
 | *onCompletionExceptionHandler* (consumer) | To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore. |  | ExceptionHandler
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *processStrategy* (consumer) | A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed, such as a special ready file exists. If this option is set then the readLock option does not apply. |  | GenericFileProcessStrategy
-| *fileExist* (producer) a| What to do if a file already exists with the same name. Override, which is the default, replaces the existing file. 
-
- - Append - adds content to the existing file.
- - Fail - throws a GenericFileOperationException, indicating that there is already an existing file.
- - Ignore - silently ignores the problem and does not override the existing file, but assumes everything is okay.
- - Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file, and there exists already an existing file, otherwise causing the move operation to fail. The Move option will move any existing files, before writing the target file.
- - TryRename is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name, without doing any exists check. This check may be faster on some file systems and especially FTP servers. | Override | GenericFileExist
+| *useList* (consumer) | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command, and therefore you can set this option to false. Notice when using this option, then the specific file to download does not include meta-data information such as file size, timestamp, permissions etc, because those information is only possible to retrieve when LIST command is in use. | [...]
+| *fileExist* (producer) | What to do if a file already exists with the same name. Override, which is the default, replaces the existing file. - Append - adds content to the existing file. - Fail - throws a GenericFileOperationException, indicating that there is already an existing file. - Ignore - silently ignores the problem and does not override the existing file, but assumes everything is okay. - Move - option requires to use the moveExisting option to be configured as well. The opti [...]
 | *flatten* (producer) | 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 they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths. | false | boolean
 | *jailStartingDirectory* (producer) | 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 secured out of the box). You can turn this off to allow writing files to directories outside the starting directory, such as parent or root folders. | true | boolean
 | *lazyStartProducer* (producer) | 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 otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
@@ -131,15 +112,31 @@ with the following path and query parameters:
 | *tempFileName* (producer) | 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 option 'fileName', not the target directory in the base uri. For example if option fileName includes a directory prefix: dir/finalFilename then tempFileName is relative to that subdirectory dir. |  | String
 | *tempPrefix* (producer) | 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 locks) reading in progress files. Is often used by FTP when uploading big files. |  | String
 | *allowNullBody* (producer) | 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 component, a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override', then the file will be truncated, and if set to append the file will remain unchanged. | false | boolean
+| *chmod* (producer) | Allows you to set chmod on the stored file. For example chmod=640. |  | String
+| *disconnectOnBatchComplete* (producer) | Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server. | false | boolean
 | *eagerDeleteTargetFile* (producer) | 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 this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment, just before t [...]
 | *keepLastModified* (producer) | Will keep the last modified timestamp from the source file (if any). Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This header can contain either a java.util.Date or long with the timestamp. If the timestamp exists and the option is enabled it will set this timestamp on the written file. Note: This option only applies to the file producer. You cannot use this option with any of the \ftp producers. | false | boolean
 | *moveExistingFileStrategy* (producer) | Strategy (Custom Strategy) used to move file with special naming token to use when fileExist=Move is configured. By default, there is an implementation used if no custom strategy is provided |  | FileMoveExistingStrategy
+| *sendNoop* (producer) | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid, which allows to silently re-connect to be able to upload the file. However if this causes problems, you can turn this option off. | true | boolean
+| *activePortRange* (advanced) | Set the client side port range in active mode. The syntax is: minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to include all 1xxxx ports. |  | String
 | *autoCreate* (advanced) | 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. | true | boolean
 | *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
 | *bufferSize* (advanced) | Buffer size in bytes used for writing files (or in case of FTP for downloading and uploading files). | 131072 | int
+| *connectTimeout* (advanced) | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH | 10000 | int
+| *ftpClient* (advanced) | To use a custom instance of FTPClient |  | FTPClient
+| *ftpClientConfig* (advanced) | To use a custom instance of FTPClientConfig to configure the FTP client the endpoint should use. |  | FTPClientConfig
+| *ftpClientConfigParameters* (advanced) | Used by FtpComponent to provide additional parameters for the FTPClientConfig |  | Map
+| *ftpClientParameters* (advanced) | Used by FtpComponent to provide additional parameters for the FTPClient |  | Map
+| *maximumReconnectAttempts* (advanced) | Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior. |  | int
+| *reconnectDelay* (advanced) | Delay in millis Camel will wait before performing a reconnect attempt. |  | long
+| *siteCommand* (advanced) | Sets optional site command(s) to be executed after successful login. Multiple site commands can be separated using a new line character. |  | String
+| *soTimeout* (advanced) | Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in millis. Recommended option is to set this to 300000 so as not have a hanged connection. On SFTP this option is set as timeout on the JSCH Session instance. | 300000 | int
+| *stepwise* (advanced) | Sets whether we should stepwise change directories while traversing file structures when downloading files, or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons. | true | boolean
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+| *throwExceptionOnConnectFailed* (advanced) | 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. | false | boolean
+| *timeout* (advanced) | Sets the data timeout for waiting for reply Used only by FTPClient | 30000 | int
 | *antExclude* (filter) | 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. |  | String
-| *antFilterCaseSensitive* (filter) | Sets case sensitive flag on ant filter | true | boolean
+| *antFilterCaseSensitive* (filter) | Sets case sensitive flag on ant filter. | true | boolean
 | *antInclude* (filter) | Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format. |  | String
 | *eagerMaxMessagesPerPoll* (filter) | Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files, and then perform sorting. Setting this option to false allows for sorting all files first, and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting. | true | boolean
 | *exclude* (filter) | Is used to exclude files, if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris |  | String
@@ -193,6 +190,17 @@ Notice: The various read locks is not all suited to work in clustered mode, wher
 | *shuffle* (sort) | To shuffle the list of files (sort in random order) | false | boolean
 | *sortBy* (sort) | Built-in sort by using the File Language. Supports nested sorts, so you can have a sort by file name and as a 2nd group sort by modified date. |  | String
 | *sorter* (sort) | Pluggable sorter as a java.util.Comparator class. |  | Comparator
+| *account* (security) | Account to use for login |  | String
+| *disableSecureDataChannel Defaults* (security) | Use this option to disable default options when using secure data channel. This allows you to be in full control what the execPbsz and execProt setting should be used. Default is false | false | boolean
+| *execPbsz* (security) | When using secure data channel you can set the exec protection buffer size |  | Long
+| *execProt* (security) | The exec protection level PROT command. C - Clear S - Safe(SSL protocol only) E - Confidential(SSL protocol only) P - Private |  | String
+| *ftpClientKeyStoreParameters* (security) | Set the key store parameters |  | Map
+| *ftpClientTrustStoreParameters* (security) | Set the trust store parameters |  | Map
+| *implicit* (security) | Set the security mode (Implicit/Explicit). true - Implicit Mode / False - Explicit Mode | false | boolean
+| *password* (security) | Password to use for login |  | String
+| *securityProtocol* (security) | Set the underlying security protocol. | TLSv1.2 | String
+| *sslContextParameters* (security) | Gets the JSSE configuration that overrides any settings in FtpsEndpoint#\ftpClientKeyStoreParameters, \ftpClientTrustStoreParameters, and FtpsConfiguration#getSecurityProtocol(). |  | SSLContextParameters
+| *username* (security) | Username to use for login |  | String
 |===
 // endpoint options: END
 // spring-boot-auto-configure options: START
diff --git a/components/camel-ftp/src/main/docs/sftp-component.adoc b/components/camel-ftp/src/main/docs/sftp-component.adoc
index c38bda0..d890fcc 100644
--- a/components/camel-ftp/src/main/docs/sftp-component.adoc
+++ b/components/camel-ftp/src/main/docs/sftp-component.adoc
@@ -65,47 +65,19 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (112 parameters):
+=== Query Parameters (118 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *jschLoggingLevel* (common) | The logging level to use for JSCH activity logging. As JSCH is verbose at by default at INFO level the threshold is WARN by default. | WARN | LoggingLevel
-| *separator* (common) | Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name | UNIX | PathSeparator
-| *streamDownload* (consumer) | Sets the download method to use when not using a local working directory. If set to true, the remote files are streamed to the route as they are read. When set to false, the remote files are loaded into memory before being sent into the route. | false | boolean
-| *ignoreFileNotFoundOrPermission Error* (consumer) | Whether to ignore when (trying to list files in directories or when downloading a file), which does not exist or due to permission error. By default when a directory or file does not exists or insufficient permission, then an exception is thrown. Setting this option to true allows to ignore that instead. | false | boolean
-| *useList* (consumer) | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command, and therefore you can set this option to false. Notice when using this option, then the specific file to download does not include meta-data information such as file size, timestamp, permissions etc, because those information is only possible to retrieve when LIST command is in use. | [...]
-| *chmod* (producer) | Allows you to set chmod on the stored file. For example chmod=640. |  | String
-| *sendNoop* (producer) | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid, which allows to silently re-connect to be able to upload the file. However if this causes problems, you can turn this option off. | true | boolean
-| *bindAddress* (advanced) | Specifies the address of the local interface against which the connection should bind. |  | String
-| *bulkRequests* (advanced) | Specifies how many requests may be outstanding at any one time. Increasing this value may slightly improve file transfer speed but will increase memory usage. |  | Integer
-| *compression* (advanced) | To use compression. Specify a level from 1 to 10. Important: You must manually add the needed JSCH zlib JAR to the classpath for compression support. |  | int
-| *connectTimeout* (advanced) | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH | 10000 | int
-| *proxy* (advanced) | To use a custom configured com.jcraft.jsch.Proxy. This proxy is used to consume/send messages from the target SFTP host. |  | Proxy
-| *serverAliveCountMax* (advanced) | Sets the number of keep-alive messages which may be sent without receiving any messages back from the server. If this threshold is reached while keep-alive messages are being sent, the connection will be disconnected. The default value is one. | 1 | int
-| *serverAliveInterval* (advanced) | Sets the interval (millis) to send a keep-alive message. If zero is specified, any keep-alive message must not be sent. The default interval is zero. |  | int
-| *soTimeout* (advanced) | Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in millis. Recommended option is to set this to 300000 so as not have a hanged connection. On SFTP this option is set as timeout on the JSCH Session instance. | 300000 | int
-| *stepwise* (advanced) | Sets whether we should stepwise change directories while traversing file structures when downloading files, or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons. | true | boolean
-| *throwExceptionOnConnectFailed* (advanced) | 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. | false | boolean
-| *timeout* (advanced) | Sets the data timeout for waiting for reply Used only by FTPClient | 30000 | int
-| *ciphers* (security) | Set a comma separated list of ciphers that will be used in order of preference. Possible cipher names are defined by JCraft JSCH. Some examples include: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc. If not specified the default list from JSCH will be used. |  | String
-| *keyPair* (security) | Sets a key pair of the public and private key so to that the SFTP endpoint can do public/private key verification. |  | KeyPair
-| *knownHosts* (security) | Sets the known_hosts from the byte array, so that the SFTP endpoint can do host key verification. |  | byte[]
-| *knownHostsFile* (security) | Sets the known_hosts file, so that the SFTP endpoint can do host key verification. |  | String
-| *knownHostsUri* (security) | Sets the known_hosts file (loaded from classpath by default), so that the SFTP endpoint can do host key verification. |  | String
-| *password* (security) | Password to use for login |  | String
-| *preferredAuthentications* (security) | Set the preferred authentications which SFTP endpoint will used. Some example include:password,publickey. If not specified the default list from JSCH will be used. |  | String
-| *privateKey* (security) | Set the private key as byte so that the SFTP endpoint can do private key verification. |  | byte[]
-| *privateKeyFile* (security) | Set the private key file so that the SFTP endpoint can do private key verification. |  | String
-| *privateKeyPassphrase* (security) | Set the private key file passphrase so that the SFTP endpoint can do private key verification. |  | String
-| *privateKeyUri* (security) | Set the private key file (loaded from classpath by default) so that the SFTP endpoint can do private key verification. |  | String
-| *strictHostKeyChecking* (security) | Sets whether to use strict host key checking. | no | String
-| *username* (security) | Username to use for login |  | String
-| *useUserKnownHostsFile* (security) | If knownHostFile has not been explicit configured then use the host file from System.getProperty(user.home)/.ssh/known_hosts | true | boolean
 | *charset* (common) | This option is used to specify the encoding of the file. You can use this on the consumer, to specify the encodings of the files, which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file, you can use this option to specify which charset to write the file as well. Do mind that when writing the file Camel may have to read the message content into memory to be able to convert the dat [...]
-| *doneFileName* (common) | Producer: If provided, then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided, Camel will only consume files if a done file exists. This option configures what file name to use. Either you ca [...]
+| *disconnect* (common) | Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop, then you need to stop the consumer/route instead. | false | boolean
+| *doneFileName* (common) | Producer: If provided, then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided, Camel will only consume files if a done file exists. This option configures what file name to use. Either you ca [...]
 | *fileName* (common) | Use Expression such as File Language to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type, it is always evaluated using the File Language. If the express [...]
+| *jschLoggingLevel* (common) | The logging level to use for JSCH activity logging. As JSCH is verbose at by default at INFO level the threshold is WARN by default. | WARN | LoggingLevel
+| *separator* (common) | Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name | UNIX | PathSeparator
+| *fastExistsCheck* (common) | If set this option to be true, camel-\ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly, if the option is false, camel-\ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server ha [...]
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *delete* (consumer) | If true, the file will be deleted after it is processed successfully. | false | boolean
 | *moveFailed* (consumer) | Sets the move failure expression based on Simple language. For example, to move files into a .error subdirectory use: .error. Note: When moving the files to the fail location Camel will handle the error and will not pick up the file again. |  | String
@@ -114,20 +86,18 @@ with the following path and query parameters:
 | *preSort* (consumer) | When pre-sort is enabled then the consumer will sort the file and directory names during polling, that was retrieved from the file system. You may want to do this in case you need to operate on the files in a sorted order. The pre-sort is executed before the consumer starts to filter, and accept files to process by Camel. This option is default=false meaning disabled. | false | boolean
 | *recursive* (consumer) | If a directory, will look for files in all the sub-directories as well. | false | boolean
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
+| *streamDownload* (consumer) | Sets the download method to use when not using a local working directory. If set to true, the remote files are streamed to the route as they are read. When set to false, the remote files are loaded into memory before being sent into the route. | false | boolean
+| *download* (consumer) | Whether the FTP consumer should download the file. If this option is set to false, then the message body will be null, but the consumer will still trigger a Camel Exchange that has details about the file such as file name, file size, etc. It's just that the file will not be downloaded. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
+| *ignoreFileNotFoundOrPermission Error* (consumer) | Whether to ignore when (trying to list files in directories or when downloading a file), which does not exist or due to permission error. By default when a directory or file does not exists or insufficient permission, then an exception is thrown. Setting this option to true allows to ignore that instead. | false | boolean
 | *inProgressRepository* (consumer) | A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used. |  | IdempotentRepository
 | *localWorkDirectory* (consumer) | When consuming, a local work directory can be used to store the remote file content directly in local files, to avoid loading the content into memory. This is beneficial, if you consume a very big remote file and thus can conserve memory. |  | String
 | *onCompletionExceptionHandler* (consumer) | To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore. |  | ExceptionHandler
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
 | *processStrategy* (consumer) | A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed, such as a special ready file exists. If this option is set then the readLock option does not apply. |  | GenericFileProcessStrategy
-| *fileExist* (producer) a| What to do if a file already exists with the same name. Override, which is the default, replaces the existing file. 
-
- - Append - adds content to the existing file.
- - Fail - throws a GenericFileOperationException, indicating that there is already an existing file.
- - Ignore - silently ignores the problem and does not override the existing file, but assumes everything is okay.
- - Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file, and there exists already an existing file, otherwise causing the move operation to fail. The Move option will move any existing files, before writing the target file.
- - TryRename is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name, without doing any exists check. This check may be faster on some file systems and especially FTP servers. | Override | GenericFileExist
+| *useList* (consumer) | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command, and therefore you can set this option to false. Notice when using this option, then the specific file to download does not include meta-data information such as file size, timestamp, permissions etc, because those information is only possible to retrieve when LIST command is in use. | [...]
+| *fileExist* (producer) | What to do if a file already exists with the same name. Override, which is the default, replaces the existing file. - Append - adds content to the existing file. - Fail - throws a GenericFileOperationException, indicating that there is already an existing file. - Ignore - silently ignores the problem and does not override the existing file, but assumes everything is okay. - Move - option requires to use the moveExisting option to be configured as well. The opti [...]
 | *flatten* (producer) | 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 they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths. | false | boolean
 | *jailStartingDirectory* (producer) | 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 secured out of the box). You can turn this off to allow writing files to directories outside the starting directory, such as parent or root folders. | true | boolean
 | *lazyStartProducer* (producer) | 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 otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
@@ -135,14 +105,30 @@ with the following path and query parameters:
 | *tempFileName* (producer) | 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 option 'fileName', not the target directory in the base uri. For example if option fileName includes a directory prefix: dir/finalFilename then tempFileName is relative to that subdirectory dir. |  | String
 | *tempPrefix* (producer) | 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 locks) reading in progress files. Is often used by FTP when uploading big files. |  | String
 | *allowNullBody* (producer) | 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 component, a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override', then the file will be truncated, and if set to append the file will remain unchanged. | false | boolean
+| *chmod* (producer) | Allows you to set chmod on the stored file. For example chmod=640. |  | String
+| *disconnectOnBatchComplete* (producer) | Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server. | false | boolean
 | *eagerDeleteTargetFile* (producer) | 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 this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment, just before t [...]
 | *keepLastModified* (producer) | Will keep the last modified timestamp from the source file (if any). Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This header can contain either a java.util.Date or long with the timestamp. If the timestamp exists and the option is enabled it will set this timestamp on the written file. Note: This option only applies to the file producer. You cannot use this option with any of the \ftp producers. | false | boolean
 | *moveExistingFileStrategy* (producer) | Strategy (Custom Strategy) used to move file with special naming token to use when fileExist=Move is configured. By default, there is an implementation used if no custom strategy is provided |  | FileMoveExistingStrategy
+| *sendNoop* (producer) | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid, which allows to silently re-connect to be able to upload the file. However if this causes problems, you can turn this option off. | true | boolean
 | *autoCreate* (advanced) | 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. | true | boolean
 | *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *bindAddress* (advanced) | Specifies the address of the local interface against which the connection should bind. |  | String
+| *bulkRequests* (advanced) | Specifies how many requests may be outstanding at any one time. Increasing this value may slightly improve file transfer speed but will increase memory usage. |  | Integer
+| *compression* (advanced) | To use compression. Specify a level from 1 to 10. Important: You must manually add the needed JSCH zlib JAR to the classpath for compression support. |  | int
+| *connectTimeout* (advanced) | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH | 10000 | int
+| *maximumReconnectAttempts* (advanced) | Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior. |  | int
+| *proxy* (advanced) | To use a custom configured com.jcraft.jsch.Proxy. This proxy is used to consume/send messages from the target SFTP host. |  | Proxy
+| *reconnectDelay* (advanced) | Delay in millis Camel will wait before performing a reconnect attempt. |  | long
+| *serverAliveCountMax* (advanced) | Sets the number of keep-alive messages which may be sent without receiving any messages back from the server. If this threshold is reached while keep-alive messages are being sent, the connection will be disconnected. The default value is one. | 1 | int
+| *serverAliveInterval* (advanced) | Sets the interval (millis) to send a keep-alive message. If zero is specified, any keep-alive message must not be sent. The default interval is zero. |  | int
+| *soTimeout* (advanced) | Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in millis. Recommended option is to set this to 300000 so as not have a hanged connection. On SFTP this option is set as timeout on the JSCH Session instance. | 300000 | int
+| *stepwise* (advanced) | Sets whether we should stepwise change directories while traversing file structures when downloading files, or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons. | true | boolean
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+| *throwExceptionOnConnectFailed* (advanced) | 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. | false | boolean
+| *timeout* (advanced) | Sets the data timeout for waiting for reply Used only by FTPClient | 30000 | int
 | *antExclude* (filter) | 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. |  | String
-| *antFilterCaseSensitive* (filter) | Sets case sensitive flag on ant filter | true | boolean
+| *antFilterCaseSensitive* (filter) | Sets case sensitive flag on ant filter. | true | boolean
 | *antInclude* (filter) | Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format. |  | String
 | *eagerMaxMessagesPerPoll* (filter) | Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files, and then perform sorting. Setting this option to false allows for sorting all files first, and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting. | true | boolean
 | *exclude* (filter) | Is used to exclude files, if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris |  | String
@@ -200,5 +186,19 @@ Notice: The various read locks is not all suited to work in clustered mode, wher
 | *shuffle* (sort) | To shuffle the list of files (sort in random order) | false | boolean
 | *sortBy* (sort) | Built-in sort by using the File Language. Supports nested sorts, so you can have a sort by file name and as a 2nd group sort by modified date. |  | String
 | *sorter* (sort) | Pluggable sorter as a java.util.Comparator class. |  | Comparator
+| *ciphers* (security) | Set a comma separated list of ciphers that will be used in order of preference. Possible cipher names are defined by JCraft JSCH. Some examples include: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc. If not specified the default list from JSCH will be used. |  | String
+| *keyPair* (security) | Sets a key pair of the public and private key so to that the SFTP endpoint can do public/private key verification. |  | KeyPair
+| *knownHosts* (security) | Sets the known_hosts from the byte array, so that the SFTP endpoint can do host key verification. |  | byte[]
+| *knownHostsFile* (security) | Sets the known_hosts file, so that the SFTP endpoint can do host key verification. |  | String
+| *knownHostsUri* (security) | Sets the known_hosts file (loaded from classpath by default), so that the SFTP endpoint can do host key verification. |  | String
+| *password* (security) | Password to use for login |  | String
+| *preferredAuthentications* (security) | Set the preferred authentications which SFTP endpoint will used. Some example include:password,publickey. If not specified the default list from JSCH will be used. |  | String
+| *privateKey* (security) | Set the private key as byte so that the SFTP endpoint can do private key verification. |  | byte[]
+| *privateKeyFile* (security) | Set the private key file so that the SFTP endpoint can do private key verification. |  | String
+| *privateKeyPassphrase* (security) | Set the private key file passphrase so that the SFTP endpoint can do private key verification. |  | String
+| *privateKeyUri* (security) | Set the private key file (loaded from classpath by default) so that the SFTP endpoint can do private key verification. |  | String
+| *strictHostKeyChecking* (security) | Sets whether to use strict host key checking. | no | String
+| *username* (security) | Username to use for login |  | String
+| *useUserKnownHostsFile* (security) | If knownHostFile has not been explicit configured then use the host file from System.getProperty(user.home)/.ssh/known_hosts | true | boolean
 |===
 // endpoint options: END
diff --git a/components/camel-jsch/src/main/docs/scp-component.adoc b/components/camel-jsch/src/main/docs/scp-component.adoc
index 5a6f468..dcf217d 100644
--- a/components/camel-jsch/src/main/docs/scp-component.adoc
+++ b/components/camel-jsch/src/main/docs/scp-component.adoc
@@ -46,7 +46,7 @@ in code).
 
 
 // component options: START
-The SCP component supports 4 options, which are listed below.
+The SCP component supports 3 options, which are listed below.
 
 
 
@@ -56,7 +56,6 @@ The SCP component supports 4 options, which are listed below.
 | *verboseLogging* (producer) | JSCH is verbose logging out of the box. Therefore we turn the logging down to DEBUG logging by default. But setting this option to true turns on the verbose logging again. | false | boolean
 | *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
 | *lazyStartProducer* (producer) | 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 otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
-| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 |===
 // component options: END
 
@@ -89,16 +88,26 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (84 parameters):
+=== Query Parameters (24 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
+| *disconnect* (common) | Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop, then you need to stop the consumer/route instead. | false | boolean
 | *chmod* (producer) | Allows you to set chmod on the stored file. For example chmod=664. | 664 | String
+| *fileName* (producer) | Use Expression such as File Language to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type, it is always evaluated using the File Language. If the expre [...]
+| *flatten* (producer) | 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 they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths. | false | boolean
+| *jailStartingDirectory* (producer) | 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 secured out of the box). You can turn this off to allow writing files to directories outside the starting directory, such as parent or root folders. | true | boolean
+| *lazyStartProducer* (producer) | 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 otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
 | *strictHostKeyChecking* (producer) | Sets whether to use strict host key checking. Possible values are: no, yes | no | String
+| *allowNullBody* (producer) | 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 component, a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override', then the file will be truncated, and if set to append the file will remain unchanged. | false | boolean
+| *disconnectOnBatchComplete* (producer) | Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server. | false | boolean
+| *moveExistingFileStrategy* (producer) | Strategy (Custom Strategy) used to move file with special naming token to use when fileExist=Move is configured. By default, there is an implementation used if no custom strategy is provided |  | FileMoveExistingStrategy
+| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
 | *connectTimeout* (advanced) | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH | 10000 | int
 | *soTimeout* (advanced) | Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in millis. Recommended option is to set this to 300000 so as not have a hanged connection. On SFTP this option is set as timeout on the JSCH Session instance. | 300000 | int
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 | *timeout* (advanced) | Sets the data timeout for waiting for reply Used only by FTPClient | 30000 | int
 | *knownHostsFile* (security) | Sets the known_hosts file, so that the jsch endpoint can do host key verification. You can prefix with classpath: to load the file from classpath instead of file system. |  | String
 | *password* (security) | Password to use for login |  | String
@@ -109,87 +118,6 @@ with the following path and query parameters:
 | *username* (security) | Username to use for login |  | String
 | *useUserKnownHostsFile* (security) | If knownHostFile has not been explicit configured, then use the host file from System.getProperty(user.home) /.ssh/known_hosts | true | boolean
 | *ciphers* (security) | Set a comma separated list of ciphers that will be used in order of preference. Possible cipher names are defined by JCraft JSCH. Some examples include: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc. If not specified the default list from JSCH will be used. |  | String
-| *streamDownload* (consumer) | Sets the download method to use when not using a local working directory. If set to true, the remote files are streamed to the route as they are read. When set to false, the remote files are loaded into memory before being sent into the route. | false | boolean
-| *ignoreFileNotFoundOrPermission Error* (consumer) | Whether to ignore when (trying to list files in directories or when downloading a file), which does not exist or due to permission error. By default when a directory or file does not exists or insufficient permission, then an exception is thrown. Setting this option to true allows to ignore that instead. | false | boolean
-| *useList* (consumer) | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command, and therefore you can set this option to false. Notice when using this option, then the specific file to download does not include meta-data information such as file size, timestamp, permissions etc, because those information is only possible to retrieve when LIST command is in use. | [...]
-| *fileName* (common) | Use Expression such as File Language to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type, it is always evaluated using the File Language. If the express [...]
-| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
-| *delete* (consumer) | If true, the file will be deleted after it is processed successfully. | false | boolean
-| *moveFailed* (consumer) | Sets the move failure expression based on Simple language. For example, to move files into a .error subdirectory use: .error. Note: When moving the files to the fail location Camel will handle the error and will not pick up the file again. |  | String
-| *noop* (consumer) | If true, the file is not moved or deleted in any way. This option is good for readonly data, or for ETL type requirements. If noop=true, Camel will set idempotent=true as well, to avoid consuming the same files over and over again. | false | boolean
-| *preMove* (consumer) | Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order. |  | String
-| *preSort* (consumer) | When pre-sort is enabled then the consumer will sort the file and directory names during polling, that was retrieved from the file system. You may want to do this in case you need to operate on the files in a sorted order. The pre-sort is executed before the consumer starts to filter, and accept files to process by Camel. This option is default=false meaning disabled. | false | boolean
-| *recursive* (consumer) | If a directory, will look for files in all the sub-directories as well. | false | boolean
-| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
-| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
-| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
-| *inProgressRepository* (consumer) | A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used. |  | IdempotentRepository
-| *localWorkDirectory* (consumer) | When consuming, a local work directory can be used to store the remote file content directly in local files, to avoid loading the content into memory. This is beneficial, if you consume a very big remote file and thus can conserve memory. |  | String
-| *onCompletionExceptionHandler* (consumer) | To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore. |  | ExceptionHandler
-| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
-| *processStrategy* (consumer) | A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed, such as a special ready file exists. If this option is set then the readLock option does not apply. |  | GenericFileProcessStrategy
-| *flatten* (producer) | 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 they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths. | false | boolean
-| *jailStartingDirectory* (producer) | 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 secured out of the box). You can turn this off to allow writing files to directories outside the starting directory, such as parent or root folders. | true | boolean
-| *lazyStartProducer* (producer) | 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 otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
-| *allowNullBody* (producer) | 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 component, a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override', then the file will be truncated, and if set to append the file will remain unchanged. | false | boolean
-| *moveExistingFileStrategy* (producer) | Strategy (Custom Strategy) used to move file with special naming token to use when fileExist=Move is configured. By default, there is an implementation used if no custom strategy is provided |  | FileMoveExistingStrategy
-| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
-| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
-| *antExclude* (filter) | 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. |  | String
-| *antFilterCaseSensitive* (filter) | Sets case sensitive flag on ant filter | true | boolean
-| *antInclude* (filter) | Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format. |  | String
-| *eagerMaxMessagesPerPoll* (filter) | Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files, and then perform sorting. Setting this option to false allows for sorting all files first, and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting. | true | boolean
-| *exclude* (filter) | Is used to exclude files, if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris |  | String
-| *filter* (filter) | Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. Will skip files if filter returns false in its accept() method. |  | GenericFileFilter
-| *filterDirectory* (filter) | Filters the directory based on Simple language. For example to filter on current date, you can use a simple date pattern such as \${date:now:yyyMMdd} |  | String
-| *filterFile* (filter) | Filters the file based on Simple language. For example to filter on file size, you can use \${file:size} 5000 |  | String
-| *idempotent* (filter) | Option to use the Idempotent Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid consuming the same files over and over again. | false | Boolean
-| *idempotentKey* (filter) | To use a custom idempotent key. By default the absolute path of the file is used. You can use the File Language, for example to use the file name and file size, you can do: idempotentKey=\${file:name}-\${file:size} |  | String
-| *idempotentRepository* (filter) | A pluggable repository org.apache.camel.spi.IdempotentRepository which by default use MemoryMessageIdRepository if none is specified and idempotent is true. |  | IdempotentRepository
-| *include* (filter) | Is used to include files, if filename matches the regex pattern (matching is case in-sensitive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris |  | String
-| *maxDepth* (filter) | The maximum depth to traverse when recursively processing a directory. | 2147483647 | int
-| *maxMessagesPerPoll* (filter) | To define a maximum messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disabled it. Notice: If this option is in use then the File and FTP components will limit before any sorting. For example if you have 100000 files and use maxMessagesPerPoll=500, then only the first 500 files will be picked up, and the [...]
-| *minDepth* (filter) | The minimum depth to start processing when recursively processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first sub directory. |  | int
-| *move* (filter) | Expression (such as Simple Language) used to dynamically set the filename when moving it after processing. To move files into a .done subdirectory just enter .done. |  | String
-| *exclusiveReadLockStrategy* (lock) | Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation. |  | GenericFileExclusiveReadLockStrategy
-| *readLock* (lock) a| Used by consumer, to only poll the files if it has exclusive read-lock on the file (i.e. the file is not in-progress or being written). Camel will wait until the file lock is granted. This option provides the build in strategies:
-
- - none - No read lock is in use
- - markerFile - Camel creates a marker file (fileName.camelLock) and then holds a lock on it. This option is not available for the FTP component
- - changed - Changed is using file length/modification timestamp to detect whether the file is currently being copied or not. Will at least use 1 sec to determine this, so this option cannot consume files as fast as the others, but can be more reliable as the JDK IO API cannot always determine whether a file is currently being used by another process. The option readLockCheckInterval can be used to set the check frequency.
- - fileLock - is for using java.nio.channels.FileLock. This option is not avail for Windows OS and the FTP component. This approach should be avoided when accessing a remote file system via a mount/share unless that file system supports distributed file locks.
- - rename - rename is for using a try to rename the file as a test if we can get exclusive read-lock.
- - idempotent - (only for file component) idempotent is for using a idempotentRepository as the read-lock. This allows to use read locks that supports clustering if the idempotent repository implementation supports that.
- - idempotent-changed - (only for file component) idempotent-changed is for using a idempotentRepository and changed as the combined read-lock. This allows to use read locks that supports clustering if the idempotent repository implementation supports that.
- - idempotent-rename - (only for file component) idempotent-rename is for using a idempotentRepository and rename as the combined read-lock. This allows to use read locks that supports clustering if the idempotent repository implementation supports that.
- 
-Notice: The various read locks is not all suited to work in clustered mode, where concurrent consumers on different nodes is competing for the same files on a shared file system. The markerFile using a close to atomic operation to create the empty marker file, but its not guaranteed to work in a cluster. The fileLock may work better but then the file system need to support distributed file locks, and so on. Using the idempotent read lock can support clustering if the idempotent repositor [...]
-| *readLockCheckInterval* (lock) | Interval in millis for the read-lock, if supported by the read lock. This interval is used for sleeping between attempts to acquire the read lock. For example when using the changed read lock, you can set a higher interval period to cater for slow writes. The default of 1 sec. may be too fast if the producer is very slow writing the file. Notice: For FTP the default readLockCheckInterval is 5000. The readLockTimeout value must be higher than readLockChe [...]
-| *readLockDeleteOrphanLockFiles* (lock) | Whether or not read lock with marker files should upon startup delete any orphan read lock files, which may have been left on the file system, if Camel was not properly shutdown (such as a JVM crash). If turning this option to false then any orphaned lock file will cause Camel to not attempt to pickup that file, this could also be due another node is concurrently reading files from the same shared directory. | true | boolean
-| *readLockLoggingLevel* (lock) | Logging level used when a read lock could not be acquired. By default a DEBUG is logged. You can change this level, for example to OFF to not have any logging. This option is only applicable for readLock of types: changed, fileLock, idempotent, idempotent-changed, idempotent-rename, rename. | DEBUG | LoggingLevel
-| *readLockMarkerFile* (lock) | Whether to use marker file with the changed, rename, or exclusive read lock types. By default a marker file is used as well to guard against other processes picking up the same files. This behavior can be turned off by setting this option to false. For example if you do not want to write marker files to the file systems by the Camel application. | true | boolean
-| *readLockMinAge* (lock) | This option is applied only for readLock=changed. It allows to specify a minimum age the file must be before attempting to acquire the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This can speedup the changed read lock as it will only attempt to acquire files which are at least that given age. | 0 | long
-| *readLockMinLength* (lock) | This option is applied only for readLock=changed. It allows you to configure a minimum file length. By default Camel expects the file to contain data, and thus the default value is 1. You can set this option to zero, to allow consuming zero-length files. | 1 | long
-| *readLockRemoveOnCommit* (lock) | This option is applied only for readLock=idempotent. It allows to specify whether to remove the file name entry from the idempotent repository when processing the file is succeeded and a commit happens. By default the file is not removed which ensures that any race-condition do not occur so another active node may attempt to grab the file. Instead the idempotent repository may support eviction strategies that you can configure to evict the file name en [...]
-| *readLockRemoveOnRollback* (lock) | This option is applied only for readLock=idempotent. It allows to specify whether to remove the file name entry from the idempotent repository when processing the file failed and a rollback happens. If this option is false, then the file name entry is confirmed (as if the file did a commit). | true | boolean
-| *readLockTimeout* (lock) | Optional timeout in millis for the read-lock, if supported by the read-lock. If the read-lock could not be granted and the timeout triggered, then Camel will skip the file. At next poll Camel, will try the file again, and this time maybe the read-lock could be granted. Use a value of 0 or lower to indicate forever. Currently fileLock, changed and rename support the timeout. Notice: For FTP the default readLockTimeout value is 20000 instead of 10000. The readL [...]
-| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
-| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
-| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
-| *delay* (scheduler) | Milliseconds before the next poll. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 500 | long
-| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
-| *initialDelay* (scheduler) | Milliseconds before the first poll starts. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 1000 | long
-| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
-| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. | TRACE | LoggingLevel
-| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
-| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component | none | String
-| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
-| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
-| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. | MILLISECONDS | TimeUnit
-| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
-| *shuffle* (sort) | To shuffle the list of files (sort in random order) | false | boolean
-| *sortBy* (sort) | Built-in sort by using the File Language. Supports nested sorts, so you can have a sort by file name and as a 2nd group sort by modified date. |  | String
-| *sorter* (sort) | Pluggable sorter as a java.util.Comparator class. |  | Comparator
 |===
 // endpoint options: END
 // spring-boot-auto-configure options: START
diff --git a/components/camel-rss/src/main/docs/rss-component.adoc b/components/camel-rss/src/main/docs/rss-component.adoc
index 6538f60..6f5d68c 100644
--- a/components/camel-rss/src/main/docs/rss-component.adoc
+++ b/components/camel-rss/src/main/docs/rss-component.adoc
@@ -81,15 +81,15 @@ with the following path and query parameters:
 |===
 | Name | Description | Default | Type
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
-| *feedHeader* (consumer) | Sets whether to add the feed object as a header | true | boolean
+| *feedHeader* (consumer) | Sets whether to add the feed object as a header. | true | boolean
 | *filter* (consumer) | Sets whether to use filtering or not of the entries. | true | boolean
 | *lastUpdate* (consumer) | Sets the timestamp to be used for filtering entries from the atom feeds. This options is only in conjunction with the splitEntries. |  | Date
-| *password* (consumer) | Sets the password to be used for basic authentication when polling from a HTTP feed |  | String
+| *password* (consumer) | Sets the password to be used for basic authentication when polling from a HTTP feed. |  | String
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *sortEntries* (consumer) | Sets whether to sort entries by published date. Only works when splitEntries = true. | false | boolean
 | *splitEntries* (consumer) | Sets whether or not entries should be sent individually or whether the entire feed should be sent as a single message | true | boolean
 | *throttleEntries* (consumer) | Sets whether all entries identified in a single feed poll should be delivered immediately. If true, only one entry is processed per consumer.delay. Only applicable when splitEntries = true. | true | boolean
-| *username* (consumer) | Sets the username to be used for basic authentication when polling from a HTTP feed |  | String
+| *username* (consumer) | Sets the username to be used for basic authentication when polling from a HTTP feed. |  | String
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
 | *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FtpEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FtpEndpointBuilderFactory.java
index b2433ad..48bc767 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FtpEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FtpEndpointBuilderFactory.java
@@ -79,6 +79,129 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
+         * This option is used to specify the encoding of the file. You can use
+         * this on the consumer, to specify the encodings of the files, which
+         * allow Camel to know the charset it should load the file content in
+         * case the file content is being accessed. Likewise when writing a
+         * file, you can use this option to specify which charset to write the
+         * file as well. Do mind that when writing the file Camel may have to
+         * read the message content into memory to be able to convert the data
+         * into the configured charset, so do not use this if you have big
+         * messages.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointConsumerBuilder charset(String charset) {
+            doSetProperty("charset", charset);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpEndpointConsumerBuilder disconnect(boolean disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpEndpointConsumerBuilder disconnect(String disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Producer: If provided, then Camel will write a 2nd done file when the
+         * original file has been written. The done file will be empty. This
+         * option configures what file name to use. Either you can specify a
+         * fixed name. Or you can use dynamic placeholders. The done file will
+         * always be written in the same folder as the original file. Consumer:
+         * If provided, Camel will only consume files if a done file exists.
+         * This option configures what file name to use. Either you can specify
+         * a fixed name. Or you can use dynamic placeholders.The done file is
+         * always expected in the same folder as the original file. Only
+         * ${file.name} and ${file.name.next} is supported as dynamic
+         * placeholders.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointConsumerBuilder doneFileName(String doneFileName) {
+            doSetProperty("doneFileName", doneFileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointConsumerBuilder fileName(Expression fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointConsumerBuilder fileName(String fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
          * Sets passive mode connections. Default is active mode connections.
          * 
          * The option is a: <code>boolean</code> type.
@@ -220,325 +343,137 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
-         * Configures whether resume download is enabled. This must be supported
-         * by the FTP server (almost all FTP servers support it). In addition
-         * the options localWorkDirectory must be configured so downloaded files
-         * are stored in a local directory, and the option binary must be
-         * enabled, which is required to support resuming of downloads.
+         * Allows for bridging the consumer to the Camel routing Error Handler,
+         * which mean any exceptions occurred while the consumer is trying to
+         * pickup incoming messages, or the likes, will now be processed as a
+         * message and handled by the routing Error Handler. By default the
+         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
+         * with exceptions, that will be logged at WARN or ERROR level and
+         * ignored.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
          * Group: consumer
          */
-        default FtpEndpointConsumerBuilder resumeDownload(boolean resumeDownload) {
-            doSetProperty("resumeDownload", resumeDownload);
+        default FtpEndpointConsumerBuilder bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
             return this;
         }
         /**
-         * Configures whether resume download is enabled. This must be supported
-         * by the FTP server (almost all FTP servers support it). In addition
-         * the options localWorkDirectory must be configured so downloaded files
-         * are stored in a local directory, and the option binary must be
-         * enabled, which is required to support resuming of downloads.
+         * Allows for bridging the consumer to the Camel routing Error Handler,
+         * which mean any exceptions occurred while the consumer is trying to
+         * pickup incoming messages, or the likes, will now be processed as a
+         * message and handled by the routing Error Handler. By default the
+         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
+         * with exceptions, that will be logged at WARN or ERROR level and
+         * ignored.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
          * Group: consumer
          */
-        default FtpEndpointConsumerBuilder resumeDownload(String resumeDownload) {
-            doSetProperty("resumeDownload", resumeDownload);
+        default FtpEndpointConsumerBuilder bridgeErrorHandler(
+                String bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
             return this;
         }
         /**
-         * Sets the download method to use when not using a local working
-         * directory. If set to true, the remote files are streamed to the route
-         * as they are read. When set to false, the remote files are loaded into
-         * memory before being sent into the route.
+         * If true, the file will be deleted after it is processed successfully.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
          * Group: consumer
          */
-        default FtpEndpointConsumerBuilder streamDownload(boolean streamDownload) {
-            doSetProperty("streamDownload", streamDownload);
+        default FtpEndpointConsumerBuilder delete(boolean delete) {
+            doSetProperty("delete", delete);
             return this;
         }
         /**
-         * Sets the download method to use when not using a local working
-         * directory. If set to true, the remote files are streamed to the route
-         * as they are read. When set to false, the remote files are loaded into
-         * memory before being sent into the route.
+         * If true, the file will be deleted after it is processed successfully.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
          * Group: consumer
          */
-        default FtpEndpointConsumerBuilder streamDownload(String streamDownload) {
-            doSetProperty("streamDownload", streamDownload);
+        default FtpEndpointConsumerBuilder delete(String delete) {
+            doSetProperty("delete", delete);
             return this;
         }
         /**
-         * Account to use for login.
+         * Sets the move failure expression based on Simple language. For
+         * example, to move files into a .error subdirectory use: .error. Note:
+         * When moving the files to the fail location Camel will handle the
+         * error and will not pick up the file again.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>org.apache.camel.Expression</code> type.
          * 
-         * Group: security
+         * Group: consumer
          */
-        default FtpEndpointConsumerBuilder account(String account) {
-            doSetProperty("account", account);
+        default FtpEndpointConsumerBuilder moveFailed(Expression moveFailed) {
+            doSetProperty("moveFailed", moveFailed);
             return this;
         }
         /**
-         * Password to use for login.
+         * Sets the move failure expression based on Simple language. For
+         * example, to move files into a .error subdirectory use: .error. Note:
+         * When moving the files to the fail location Camel will handle the
+         * error and will not pick up the file again.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a
+         * <code>org.apache.camel.Expression</code> type.
          * 
-         * Group: security
+         * Group: consumer
          */
-        default FtpEndpointConsumerBuilder password(String password) {
-            doSetProperty("password", password);
+        default FtpEndpointConsumerBuilder moveFailed(String moveFailed) {
+            doSetProperty("moveFailed", moveFailed);
             return this;
         }
         /**
-         * Username to use for login.
+         * If true, the file is not moved or deleted in any way. This option is
+         * good for readonly data, or for ETL type requirements. If noop=true,
+         * Camel will set idempotent=true as well, to avoid consuming the same
+         * files over and over again.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: consumer
          */
-        default FtpEndpointConsumerBuilder username(String username) {
-            doSetProperty("username", username);
+        default FtpEndpointConsumerBuilder noop(boolean noop) {
+            doSetProperty("noop", noop);
             return this;
         }
         /**
-         * This option is used to specify the encoding of the file. You can use
-         * this on the consumer, to specify the encodings of the files, which
-         * allow Camel to know the charset it should load the file content in
-         * case the file content is being accessed. Likewise when writing a
-         * file, you can use this option to specify which charset to write the
-         * file as well. Do mind that when writing the file Camel may have to
-         * read the message content into memory to be able to convert the data
-         * into the configured charset, so do not use this if you have big
-         * messages.
+         * If true, the file is not moved or deleted in any way. This option is
+         * good for readonly data, or for ETL type requirements. If noop=true,
+         * Camel will set idempotent=true as well, to avoid consuming the same
+         * files over and over again.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: common
+         * Default: false
+         * Group: consumer
          */
-        default FtpEndpointConsumerBuilder charset(String charset) {
-            doSetProperty("charset", charset);
+        default FtpEndpointConsumerBuilder noop(String noop) {
+            doSetProperty("noop", noop);
             return this;
         }
         /**
-         * Producer: If provided, then Camel will write a 2nd done file when the
-         * original file has been written. The done file will be empty. This
-         * option configures what file name to use. Either you can specify a
-         * fixed name. Or you can use dynamic placeholders. The done file will
-         * always be written in the same folder as the original file. Consumer:
-         * If provided, Camel will only consume files if a done file exists.
-         * This option configures what file name to use. Either you can specify
-         * a fixed name. Or you can use dynamic placeholders.The done file is
-         * always expected in the same folder as the original file. Only
-         * ${file.name} and ${file.name.noext} is supported as dynamic
-         * placeholders.
+         * Expression (such as File Language) used to dynamically set the
+         * filename when moving it before processing. For example to move
+         * in-progress files into the order directory set this value to order.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>org.apache.camel.Expression</code> type.
          * 
-         * Group: common
+         * Group: consumer
          */
-        default FtpEndpointConsumerBuilder doneFileName(String doneFileName) {
-            doSetProperty("doneFileName", doneFileName);
-            return this;
-        }
-        /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: common
-         */
-        default FtpEndpointConsumerBuilder fileName(Expression fileName) {
-            doSetProperty("fileName", fileName);
-            return this;
-        }
-        /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: common
-         */
-        default FtpEndpointConsumerBuilder fileName(String fileName) {
-            doSetProperty("fileName", fileName);
-            return this;
-        }
-        /**
-         * Allows for bridging the consumer to the Camel routing Error Handler,
-         * which mean any exceptions occurred while the consumer is trying to
-         * pickup incoming messages, or the likes, will now be processed as a
-         * message and handled by the routing Error Handler. By default the
-         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
-         * with exceptions, that will be logged at WARN or ERROR level and
-         * ignored.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder bridgeErrorHandler(
-                boolean bridgeErrorHandler) {
-            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
-            return this;
-        }
-        /**
-         * Allows for bridging the consumer to the Camel routing Error Handler,
-         * which mean any exceptions occurred while the consumer is trying to
-         * pickup incoming messages, or the likes, will now be processed as a
-         * message and handled by the routing Error Handler. By default the
-         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
-         * with exceptions, that will be logged at WARN or ERROR level and
-         * ignored.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder bridgeErrorHandler(
-                String bridgeErrorHandler) {
-            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
-            return this;
-        }
-        /**
-         * If true, the file will be deleted after it is processed successfully.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder delete(boolean delete) {
-            doSetProperty("delete", delete);
-            return this;
-        }
-        /**
-         * If true, the file will be deleted after it is processed successfully.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder delete(String delete) {
-            doSetProperty("delete", delete);
-            return this;
-        }
-        /**
-         * Sets the move failure expression based on Simple language. For
-         * example, to move files into a .error subdirectory use: .error. Note:
-         * When moving the files to the fail location Camel will handle the
-         * error and will not pick up the file again.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder moveFailed(Expression moveFailed) {
-            doSetProperty("moveFailed", moveFailed);
-            return this;
-        }
-        /**
-         * Sets the move failure expression based on Simple language. For
-         * example, to move files into a .error subdirectory use: .error. Note:
-         * When moving the files to the fail location Camel will handle the
-         * error and will not pick up the file again.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder moveFailed(String moveFailed) {
-            doSetProperty("moveFailed", moveFailed);
-            return this;
-        }
-        /**
-         * If true, the file is not moved or deleted in any way. This option is
-         * good for readonly data, or for ETL type requirements. If noop=true,
-         * Camel will set idempotent=true as well, to avoid consuming the same
-         * files over and over again.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder noop(boolean noop) {
-            doSetProperty("noop", noop);
-            return this;
-        }
-        /**
-         * If true, the file is not moved or deleted in any way. This option is
-         * good for readonly data, or for ETL type requirements. If noop=true,
-         * Camel will set idempotent=true as well, to avoid consuming the same
-         * files over and over again.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder noop(String noop) {
-            doSetProperty("noop", noop);
-            return this;
-        }
-        /**
-         * Expression (such as File Language) used to dynamically set the
-         * filename when moving it before processing. For example to move
-         * in-progress files into the order directory set this value to order.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default FtpEndpointConsumerBuilder preMove(Expression preMove) {
-            doSetProperty("preMove", preMove);
+        default FtpEndpointConsumerBuilder preMove(Expression preMove) {
+            doSetProperty("preMove", preMove);
             return this;
         }
         /**
@@ -616,6 +551,38 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
+         * Configures whether resume download is enabled. This must be supported
+         * by the FTP server (almost all FTP servers support it). In addition
+         * the options localWorkDirectory must be configured so downloaded files
+         * are stored in a local directory, and the option binary must be
+         * enabled, which is required to support resuming of downloads.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default FtpEndpointConsumerBuilder resumeDownload(boolean resumeDownload) {
+            doSetProperty("resumeDownload", resumeDownload);
+            return this;
+        }
+        /**
+         * Configures whether resume download is enabled. This must be supported
+         * by the FTP server (almost all FTP servers support it). In addition
+         * the options localWorkDirectory must be configured so downloaded files
+         * are stored in a local directory, and the option binary must be
+         * enabled, which is required to support resuming of downloads.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default FtpEndpointConsumerBuilder resumeDownload(String resumeDownload) {
+            doSetProperty("resumeDownload", resumeDownload);
+            return this;
+        }
+        /**
          * If the polling consumer did not poll any files, you can enable this
          * option to send an empty message (no body) instead.
          * 
@@ -644,6 +611,36 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
+         * Sets the download method to use when not using a local working
+         * directory. If set to true, the remote files are streamed to the route
+         * as they are read. When set to false, the remote files are loaded into
+         * memory before being sent into the route.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default FtpEndpointConsumerBuilder streamDownload(boolean streamDownload) {
+            doSetProperty("streamDownload", streamDownload);
+            return this;
+        }
+        /**
+         * Sets the download method to use when not using a local working
+         * directory. If set to true, the remote files are streamed to the route
+         * as they are read. When set to false, the remote files are loaded into
+         * memory before being sent into the route.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         */
+        default FtpEndpointConsumerBuilder streamDownload(String streamDownload) {
+            doSetProperty("streamDownload", streamDownload);
+            return this;
+        }
+        /**
          * 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.
@@ -1925,23 +1922,185 @@ public interface FtpEndpointBuilderFactory {
             doSetProperty("sorter", sorter);
             return this;
         }
-    }
-
-    /**
-     * Advanced builder for endpoint consumers for the FTP component.
-     */
-    public interface AdvancedFtpEndpointConsumerBuilder
-            extends
-                EndpointConsumerBuilder {
-        default FtpEndpointConsumerBuilder basic() {
-            return (FtpEndpointConsumerBuilder) this;
-        }
         /**
-         * Allows you to set how the consumer will handle subfolders and files
-         * in the path if the directory parser results in with absolute paths
-         * The reason for this is that some FTP servers may return file names
-         * with absolute paths, and if so then the FTP component needs to handle
-         * this by converting the returned path into a relative path.
+         * Account to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpEndpointConsumerBuilder account(String account) {
+            doSetProperty("account", account);
+            return this;
+        }
+        /**
+         * Password to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpEndpointConsumerBuilder password(String password) {
+            doSetProperty("password", password);
+            return this;
+        }
+        /**
+         * Username to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpEndpointConsumerBuilder username(String username) {
+            doSetProperty("username", username);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint consumers for the FTP component.
+     */
+    public interface AdvancedFtpEndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default FtpEndpointConsumerBuilder basic() {
+            return (FtpEndpointConsumerBuilder) this;
+        }
+        /**
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpEndpointConsumerBuilder fastExistsCheck(
+                boolean fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpEndpointConsumerBuilder fastExistsCheck(
+                String fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * Whether the FTP consumer should download the file. If this option is
+         * set to false, then the message body will be null, but the consumer
+         * will still trigger a Camel Exchange that has details about the file
+         * such as file name, file size, etc. It's just that the file will not
+         * be downloaded.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpEndpointConsumerBuilder download(boolean download) {
+            doSetProperty("download", download);
+            return this;
+        }
+        /**
+         * Whether the FTP consumer should download the file. If this option is
+         * set to false, then the message body will be null, but the consumer
+         * will still trigger a Camel Exchange that has details about the file
+         * such as file name, file size, etc. It's just that the file will not
+         * be downloaded.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpEndpointConsumerBuilder download(String download) {
+            doSetProperty("download", download);
+            return this;
+        }
+        /**
+         * To let the consumer use a custom ExceptionHandler. Notice if the
+         * option bridgeErrorHandler is enabled then this option is not in use.
+         * By default the consumer will deal with exceptions, that will be
+         * logged at WARN or ERROR level and ignored.
+         * 
+         * The option is a: <code>org.apache.camel.spi.ExceptionHandler</code>
+         * type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpEndpointConsumerBuilder exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            doSetProperty("exceptionHandler", exceptionHandler);
+            return this;
+        }
+        /**
+         * To let the consumer use a custom ExceptionHandler. Notice if the
+         * option bridgeErrorHandler is enabled then this option is not in use.
+         * By default the consumer will deal with exceptions, that will be
+         * logged at WARN or ERROR level and ignored.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.spi.ExceptionHandler</code> type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpEndpointConsumerBuilder exceptionHandler(
+                String exceptionHandler) {
+            doSetProperty("exceptionHandler", exceptionHandler);
+            return this;
+        }
+        /**
+         * Sets the exchange pattern when the consumer creates an exchange.
+         * 
+         * The option is a: <code>org.apache.camel.ExchangePattern</code> type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpEndpointConsumerBuilder exchangePattern(
+                ExchangePattern exchangePattern) {
+            doSetProperty("exchangePattern", exchangePattern);
+            return this;
+        }
+        /**
+         * Sets the exchange pattern when the consumer creates an exchange.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.ExchangePattern</code> type.
+         * 
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpEndpointConsumerBuilder exchangePattern(
+                String exchangePattern) {
+            doSetProperty("exchangePattern", exchangePattern);
+            return this;
+        }
+        /**
+         * Allows you to set how the consumer will handle subfolders and files
+         * in the path if the directory parser results in with absolute paths
+         * The reason for this is that some FTP servers may return file names
+         * with absolute paths, and if so then the FTP component needs to handle
+         * this by converting the returned path into a relative path.
          * 
          * The option is a: <code>boolean</code> type.
          * 
@@ -2005,642 +2164,637 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
-         * Whether to allow using LIST command when downloading a file. Default
-         * is true. In some use cases you may want to download a specific file
-         * and are not allowed to use the LIST command, and therefore you can
-         * set this option to false. Notice when using this option, then the
-         * specific file to download does not include meta-data information such
-         * as file size, timestamp, permissions etc, because those information
-         * is only possible to retrieve when LIST command is in use.
+         * A pluggable in-progress repository
+         * org.apache.camel.spi.IdempotentRepository. The in-progress repository
+         * is used to account the current in progress files being consumed. By
+         * default a memory based repository is used.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a:
+         * <code>org.apache.camel.spi.IdempotentRepository</code> type.
          * 
-         * Default: true
          * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder useList(boolean useList) {
-            doSetProperty("useList", useList);
+        default AdvancedFtpEndpointConsumerBuilder inProgressRepository(
+                IdempotentRepository inProgressRepository) {
+            doSetProperty("inProgressRepository", inProgressRepository);
             return this;
         }
         /**
-         * Whether to allow using LIST command when downloading a file. Default
-         * is true. In some use cases you may want to download a specific file
-         * and are not allowed to use the LIST command, and therefore you can
-         * set this option to false. Notice when using this option, then the
-         * specific file to download does not include meta-data information such
-         * as file size, timestamp, permissions etc, because those information
-         * is only possible to retrieve when LIST command is in use.
+         * A pluggable in-progress repository
+         * org.apache.camel.spi.IdempotentRepository. The in-progress repository
+         * is used to account the current in progress files being consumed. By
+         * default a memory based repository is used.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>org.apache.camel.spi.IdempotentRepository</code> type.
          * 
-         * Default: true
          * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder useList(String useList) {
-            doSetProperty("useList", useList);
+        default AdvancedFtpEndpointConsumerBuilder inProgressRepository(
+                String inProgressRepository) {
+            doSetProperty("inProgressRepository", inProgressRepository);
             return this;
         }
         /**
-         * Set the client side port range in active mode. The syntax is:
-         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
-         * include all 1xxxx ports.
+         * When consuming, a local work directory can be used to store the
+         * remote file content directly in local files, to avoid loading the
+         * content into memory. This is beneficial, if you consume a very big
+         * remote file and thus can conserve memory.
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointConsumerBuilder activePortRange(
-                String activePortRange) {
-            doSetProperty("activePortRange", activePortRange);
-            return this;
-        }
-        /**
-         * Sets the connect timeout for waiting for a connection to be
-         * established Used by both FTPClient and JSCH.
-         * 
-         * The option is a: <code>int</code> type.
-         * 
-         * Default: 10000
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointConsumerBuilder connectTimeout(
-                int connectTimeout) {
-            doSetProperty("connectTimeout", connectTimeout);
-            return this;
-        }
-        /**
-         * Sets the connect timeout for waiting for a connection to be
-         * established Used by both FTPClient and JSCH.
-         * 
-         * The option will be converted to a <code>int</code> type.
-         * 
-         * Default: 10000
-         * Group: advanced
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder connectTimeout(
-                String connectTimeout) {
-            doSetProperty("connectTimeout", connectTimeout);
+        default AdvancedFtpEndpointConsumerBuilder localWorkDirectory(
+                String localWorkDirectory) {
+            doSetProperty("localWorkDirectory", localWorkDirectory);
             return this;
         }
         /**
-         * To use a custom instance of FTPClient.
+         * To use a custom org.apache.camel.spi.ExceptionHandler to handle any
+         * thrown exceptions that happens during the file on completion process
+         * where the consumer does either a commit or rollback. The default
+         * implementation will log any exception at WARN level and ignore.
          * 
-         * The option is a: <code>org.apache.commons.net.ftp.FTPClient</code>
+         * The option is a: <code>org.apache.camel.spi.ExceptionHandler</code>
          * type.
          * 
-         * Group: advanced
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder ftpClient(Object ftpClient) {
-            doSetProperty("ftpClient", ftpClient);
+        default AdvancedFtpEndpointConsumerBuilder onCompletionExceptionHandler(
+                ExceptionHandler onCompletionExceptionHandler) {
+            doSetProperty("onCompletionExceptionHandler", onCompletionExceptionHandler);
             return this;
         }
         /**
-         * To use a custom instance of FTPClient.
+         * To use a custom org.apache.camel.spi.ExceptionHandler to handle any
+         * thrown exceptions that happens during the file on completion process
+         * where the consumer does either a commit or rollback. The default
+         * implementation will log any exception at WARN level and ignore.
          * 
          * The option will be converted to a
-         * <code>org.apache.commons.net.ftp.FTPClient</code> type.
+         * <code>org.apache.camel.spi.ExceptionHandler</code> type.
          * 
-         * Group: advanced
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder ftpClient(String ftpClient) {
-            doSetProperty("ftpClient", ftpClient);
+        default AdvancedFtpEndpointConsumerBuilder onCompletionExceptionHandler(
+                String onCompletionExceptionHandler) {
+            doSetProperty("onCompletionExceptionHandler", onCompletionExceptionHandler);
             return this;
         }
         /**
-         * To use a custom instance of FTPClientConfig to configure the FTP
-         * client the endpoint should use.
+         * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
+         * you to provide your custom implementation to control error handling
+         * usually occurred during the poll operation before an Exchange have
+         * been created and being routed in Camel.
          * 
          * The option is a:
-         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
+         * <code>org.apache.camel.spi.PollingConsumerPollStrategy</code> type.
          * 
-         * Group: advanced
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder ftpClientConfig(
-                Object ftpClientConfig) {
-            doSetProperty("ftpClientConfig", ftpClientConfig);
+        default AdvancedFtpEndpointConsumerBuilder pollStrategy(
+                PollingConsumerPollStrategy pollStrategy) {
+            doSetProperty("pollStrategy", pollStrategy);
             return this;
         }
         /**
-         * To use a custom instance of FTPClientConfig to configure the FTP
-         * client the endpoint should use.
+         * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
+         * you to provide your custom implementation to control error handling
+         * usually occurred during the poll operation before an Exchange have
+         * been created and being routed in Camel.
          * 
          * The option will be converted to a
-         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
+         * <code>org.apache.camel.spi.PollingConsumerPollStrategy</code> type.
          * 
-         * Group: advanced
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder ftpClientConfig(
-                String ftpClientConfig) {
-            doSetProperty("ftpClientConfig", ftpClientConfig);
+        default AdvancedFtpEndpointConsumerBuilder pollStrategy(
+                String pollStrategy) {
+            doSetProperty("pollStrategy", pollStrategy);
             return this;
         }
         /**
-         * Used by FtpComponent to provide additional parameters for the
-         * FTPClientConfig.
+         * A pluggable
+         * org.apache.camel.component.file.GenericFileProcessStrategy allowing
+         * you to implement your own readLock option or similar. Can also be
+         * used when special conditions must be met before a file can be
+         * consumed, such as a special ready file exists. If this option is set
+         * then the readLock option does not apply.
          * 
-         * The option is a: <code>java.util.Map&lt;java.lang.String,
-         * java.lang.Object&gt;</code> type.
+         * The option is a:
+         * <code>org.apache.camel.component.file.GenericFileProcessStrategy&lt;org.apache.commons.net.ftp.FTPFile&gt;</code> type.
          * 
-         * Group: advanced
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder ftpClientConfigParameters(
-                Map<String, Object> ftpClientConfigParameters) {
-            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
+        default AdvancedFtpEndpointConsumerBuilder processStrategy(
+                Object processStrategy) {
+            doSetProperty("processStrategy", processStrategy);
             return this;
         }
         /**
-         * Used by FtpComponent to provide additional parameters for the
-         * FTPClientConfig.
+         * A pluggable
+         * org.apache.camel.component.file.GenericFileProcessStrategy allowing
+         * you to implement your own readLock option or similar. Can also be
+         * used when special conditions must be met before a file can be
+         * consumed, such as a special ready file exists. If this option is set
+         * then the readLock option does not apply.
          * 
          * The option will be converted to a
-         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
-         * type.
+         * <code>org.apache.camel.component.file.GenericFileProcessStrategy&lt;org.apache.commons.net.ftp.FTPFile&gt;</code> type.
          * 
-         * Group: advanced
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder ftpClientConfigParameters(
-                String ftpClientConfigParameters) {
-            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
+        default AdvancedFtpEndpointConsumerBuilder processStrategy(
+                String processStrategy) {
+            doSetProperty("processStrategy", processStrategy);
             return this;
         }
         /**
-         * Used by FtpComponent to provide additional parameters for the
-         * FTPClient.
+         * Whether to allow using LIST command when downloading a file. Default
+         * is true. In some use cases you may want to download a specific file
+         * and are not allowed to use the LIST command, and therefore you can
+         * set this option to false. Notice when using this option, then the
+         * specific file to download does not include meta-data information such
+         * as file size, timestamp, permissions etc, because those information
+         * is only possible to retrieve when LIST command is in use.
          * 
-         * The option is a: <code>java.util.Map&lt;java.lang.String,
-         * java.lang.Object&gt;</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: advanced
+         * Default: true
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder ftpClientParameters(
-                Map<String, Object> ftpClientParameters) {
-            doSetProperty("ftpClientParameters", ftpClientParameters);
+        default AdvancedFtpEndpointConsumerBuilder useList(boolean useList) {
+            doSetProperty("useList", useList);
             return this;
         }
         /**
-         * Used by FtpComponent to provide additional parameters for the
-         * FTPClient.
+         * Whether to allow using LIST command when downloading a file. Default
+         * is true. In some use cases you may want to download a specific file
+         * and are not allowed to use the LIST command, and therefore you can
+         * set this option to false. Notice when using this option, then the
+         * specific file to download does not include meta-data information such
+         * as file size, timestamp, permissions etc, because those information
+         * is only possible to retrieve when LIST command is in use.
          * 
-         * The option will be converted to a
-         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
-         * type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: advanced
+         * Default: true
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpEndpointConsumerBuilder ftpClientParameters(
-                String ftpClientParameters) {
-            doSetProperty("ftpClientParameters", ftpClientParameters);
+        default AdvancedFtpEndpointConsumerBuilder useList(String useList) {
+            doSetProperty("useList", useList);
             return this;
         }
         /**
-         * Sets optional site command(s) to be executed after successful login.
-         * Multiple site commands can be separated using a new line character.
+         * Set the client side port range in active mode. The syntax is:
+         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
+         * include all 1xxxx ports.
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder siteCommand(
-                String siteCommand) {
-            doSetProperty("siteCommand", siteCommand);
+        default AdvancedFtpEndpointConsumerBuilder activePortRange(
+                String activePortRange) {
+            doSetProperty("activePortRange", activePortRange);
             return this;
         }
         /**
-         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
-         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
-         * millis. Recommended option is to set this to 300000 so as not have a
-         * hanged connection. On SFTP this option is set as timeout on the JSCH
-         * Session instance.
+         * 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.
          * 
-         * The option is a: <code>int</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Default: 300000
+         * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder soTimeout(int soTimeout) {
-            doSetProperty("soTimeout", soTimeout);
+        default AdvancedFtpEndpointConsumerBuilder autoCreate(boolean autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
             return this;
         }
         /**
-         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
-         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
-         * millis. Recommended option is to set this to 300000 so as not have a
-         * hanged connection. On SFTP this option is set as timeout on the JSCH
-         * Session instance.
+         * 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.
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: 300000
+         * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder soTimeout(String soTimeout) {
-            doSetProperty("soTimeout", soTimeout);
+        default AdvancedFtpEndpointConsumerBuilder autoCreate(String autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
             return this;
         }
         /**
-         * Sets whether we should stepwise change directories while traversing
-         * file structures when downloading files, or as well when uploading a
-         * file to a directory. You can disable this if you for example are in a
-         * situation where you cannot change directory on the FTP server due
-         * security reasons.
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
          * 
          * The option is a: <code>boolean</code> type.
          * 
-         * Default: true
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder stepwise(boolean stepwise) {
-            doSetProperty("stepwise", stepwise);
+        default AdvancedFtpEndpointConsumerBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
         }
         /**
-         * Sets whether we should stepwise change directories while traversing
-         * file structures when downloading files, or as well when uploading a
-         * file to a directory. You can disable this if you for example are in a
-         * situation where you cannot change directory on the FTP server due
-         * security reasons.
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: true
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder stepwise(String stepwise) {
-            doSetProperty("stepwise", stepwise);
+        default AdvancedFtpEndpointConsumerBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
             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.
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: false
+         * Default: 131072
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder throwExceptionOnConnectFailed(
-                boolean throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
+        default AdvancedFtpEndpointConsumerBuilder bufferSize(int bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
             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.
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Default: false
+         * Default: 131072
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder throwExceptionOnConnectFailed(
-                String throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
+        default AdvancedFtpEndpointConsumerBuilder bufferSize(String bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
             return this;
         }
         /**
-         * Sets the data timeout for waiting for reply Used only by FTPClient.
+         * Sets the connect timeout for waiting for a connection to be
+         * established Used by both FTPClient and JSCH.
          * 
          * The option is a: <code>int</code> type.
          * 
-         * Default: 30000
+         * Default: 10000
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder timeout(int timeout) {
-            doSetProperty("timeout", timeout);
+        default AdvancedFtpEndpointConsumerBuilder connectTimeout(
+                int connectTimeout) {
+            doSetProperty("connectTimeout", connectTimeout);
             return this;
         }
         /**
-         * Sets the data timeout for waiting for reply Used only by FTPClient.
+         * Sets the connect timeout for waiting for a connection to be
+         * established Used by both FTPClient and JSCH.
          * 
          * The option will be converted to a <code>int</code> type.
          * 
-         * Default: 30000
+         * Default: 10000
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder timeout(String timeout) {
-            doSetProperty("timeout", timeout);
+        default AdvancedFtpEndpointConsumerBuilder connectTimeout(
+                String connectTimeout) {
+            doSetProperty("connectTimeout", connectTimeout);
             return this;
         }
         /**
-         * To let the consumer use a custom ExceptionHandler. Notice if the
-         * option bridgeErrorHandler is enabled then this option is not in use.
-         * By default the consumer will deal with exceptions, that will be
-         * logged at WARN or ERROR level and ignored.
+         * To use a custom instance of FTPClient.
          * 
-         * The option is a: <code>org.apache.camel.spi.ExceptionHandler</code>
+         * The option is a: <code>org.apache.commons.net.ftp.FTPClient</code>
          * type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder exceptionHandler(
-                ExceptionHandler exceptionHandler) {
-            doSetProperty("exceptionHandler", exceptionHandler);
+        default AdvancedFtpEndpointConsumerBuilder ftpClient(Object ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
             return this;
         }
         /**
-         * To let the consumer use a custom ExceptionHandler. Notice if the
-         * option bridgeErrorHandler is enabled then this option is not in use.
-         * By default the consumer will deal with exceptions, that will be
-         * logged at WARN or ERROR level and ignored.
+         * To use a custom instance of FTPClient.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClient</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointConsumerBuilder ftpClient(String ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
+            return this;
+        }
+        /**
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
+         * 
+         * The option is a:
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointConsumerBuilder ftpClientConfig(
+                Object ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
+            return this;
+        }
+        /**
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
          * 
          * The option will be converted to a
-         * <code>org.apache.camel.spi.ExceptionHandler</code> type.
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder exceptionHandler(
-                String exceptionHandler) {
-            doSetProperty("exceptionHandler", exceptionHandler);
+        default AdvancedFtpEndpointConsumerBuilder ftpClientConfig(
+                String ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
             return this;
         }
         /**
-         * Sets the exchange pattern when the consumer creates an exchange.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
-         * The option is a: <code>org.apache.camel.ExchangePattern</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder exchangePattern(
-                ExchangePattern exchangePattern) {
-            doSetProperty("exchangePattern", exchangePattern);
+        default AdvancedFtpEndpointConsumerBuilder ftpClientConfigParameters(
+                Map<String, Object> ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             return this;
         }
         /**
-         * Sets the exchange pattern when the consumer creates an exchange.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
          * The option will be converted to a
-         * <code>org.apache.camel.ExchangePattern</code> type.
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder exchangePattern(
-                String exchangePattern) {
-            doSetProperty("exchangePattern", exchangePattern);
+        default AdvancedFtpEndpointConsumerBuilder ftpClientConfigParameters(
+                String ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             return this;
         }
         /**
-         * A pluggable in-progress repository
-         * org.apache.camel.spi.IdempotentRepository. The in-progress repository
-         * is used to account the current in progress files being consumed. By
-         * default a memory based repository is used.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
-         * The option is a:
-         * <code>org.apache.camel.spi.IdempotentRepository</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder inProgressRepository(
-                IdempotentRepository inProgressRepository) {
-            doSetProperty("inProgressRepository", inProgressRepository);
+        default AdvancedFtpEndpointConsumerBuilder ftpClientParameters(
+                Map<String, Object> ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * A pluggable in-progress repository
-         * org.apache.camel.spi.IdempotentRepository. The in-progress repository
-         * is used to account the current in progress files being consumed. By
-         * default a memory based repository is used.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
          * The option will be converted to a
-         * <code>org.apache.camel.spi.IdempotentRepository</code> type.
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder inProgressRepository(
-                String inProgressRepository) {
-            doSetProperty("inProgressRepository", inProgressRepository);
+        default AdvancedFtpEndpointConsumerBuilder ftpClientParameters(
+                String ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * When consuming, a local work directory can be used to store the
-         * remote file content directly in local files, to avoid loading the
-         * content into memory. This is beneficial, if you consume a very big
-         * remote file and thus can conserve memory.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder localWorkDirectory(
-                String localWorkDirectory) {
-            doSetProperty("localWorkDirectory", localWorkDirectory);
+        default AdvancedFtpEndpointConsumerBuilder maximumReconnectAttempts(
+                int maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * To use a custom org.apache.camel.spi.ExceptionHandler to handle any
-         * thrown exceptions that happens during the file on completion process
-         * where the consumer does either a commit or rollback. The default
-         * implementation will log any exception at WARN level and ignore.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option is a: <code>org.apache.camel.spi.ExceptionHandler</code>
-         * type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder onCompletionExceptionHandler(
-                ExceptionHandler onCompletionExceptionHandler) {
-            doSetProperty("onCompletionExceptionHandler", onCompletionExceptionHandler);
+        default AdvancedFtpEndpointConsumerBuilder maximumReconnectAttempts(
+                String maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * To use a custom org.apache.camel.spi.ExceptionHandler to handle any
-         * thrown exceptions that happens during the file on completion process
-         * where the consumer does either a commit or rollback. The default
-         * implementation will log any exception at WARN level and ignore.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.spi.ExceptionHandler</code> type.
+         * The option is a: <code>long</code> type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder onCompletionExceptionHandler(
-                String onCompletionExceptionHandler) {
-            doSetProperty("onCompletionExceptionHandler", onCompletionExceptionHandler);
+        default AdvancedFtpEndpointConsumerBuilder reconnectDelay(
+                long reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
         /**
-         * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
-         * you to provide your custom implementation to control error handling
-         * usually occurred during the poll operation before an Exchange have
-         * been created and being routed in Camel.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option is a:
-         * <code>org.apache.camel.spi.PollingConsumerPollStrategy</code> type.
+         * The option will be converted to a <code>long</code> type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder pollStrategy(
-                PollingConsumerPollStrategy pollStrategy) {
-            doSetProperty("pollStrategy", pollStrategy);
+        default AdvancedFtpEndpointConsumerBuilder reconnectDelay(
+                String reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
         /**
-         * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
-         * you to provide your custom implementation to control error handling
-         * usually occurred during the poll operation before an Exchange have
-         * been created and being routed in Camel.
+         * Sets optional site command(s) to be executed after successful login.
+         * Multiple site commands can be separated using a new line character.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.spi.PollingConsumerPollStrategy</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
-         * Group: consumer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder pollStrategy(
-                String pollStrategy) {
-            doSetProperty("pollStrategy", pollStrategy);
+        default AdvancedFtpEndpointConsumerBuilder siteCommand(
+                String siteCommand) {
+            doSetProperty("siteCommand", siteCommand);
             return this;
         }
         /**
-         * A pluggable
-         * org.apache.camel.component.file.GenericFileProcessStrategy allowing
-         * you to implement your own readLock option or similar. Can also be
-         * used when special conditions must be met before a file can be
-         * consumed, such as a special ready file exists. If this option is set
-         * then the readLock option does not apply.
+         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
+         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
+         * millis. Recommended option is to set this to 300000 so as not have a
+         * hanged connection. On SFTP this option is set as timeout on the JSCH
+         * Session instance.
          * 
-         * The option is a:
-         * <code>org.apache.camel.component.file.GenericFileProcessStrategy&lt;org.apache.commons.net.ftp.FTPFile&gt;</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Group: consumer (advanced)
+         * Default: 300000
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder processStrategy(
-                Object processStrategy) {
-            doSetProperty("processStrategy", processStrategy);
+        default AdvancedFtpEndpointConsumerBuilder soTimeout(int soTimeout) {
+            doSetProperty("soTimeout", soTimeout);
             return this;
         }
         /**
-         * A pluggable
-         * org.apache.camel.component.file.GenericFileProcessStrategy allowing
-         * you to implement your own readLock option or similar. Can also be
-         * used when special conditions must be met before a file can be
-         * consumed, such as a special ready file exists. If this option is set
-         * then the readLock option does not apply.
+         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
+         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
+         * millis. Recommended option is to set this to 300000 so as not have a
+         * hanged connection. On SFTP this option is set as timeout on the JSCH
+         * Session instance.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.component.file.GenericFileProcessStrategy&lt;org.apache.commons.net.ftp.FTPFile&gt;</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Group: consumer (advanced)
+         * Default: 300000
+         * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder processStrategy(
-                String processStrategy) {
-            doSetProperty("processStrategy", processStrategy);
+        default AdvancedFtpEndpointConsumerBuilder soTimeout(String soTimeout) {
+            doSetProperty("soTimeout", soTimeout);
             return this;
         }
         /**
-         * 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.
+         * Sets whether we should stepwise change directories while traversing
+         * file structures when downloading files, or as well when uploading a
+         * file to a directory. You can disable this if you for example are in a
+         * situation where you cannot change directory on the FTP server due
+         * security reasons.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder autoCreate(boolean autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
+        default AdvancedFtpEndpointConsumerBuilder stepwise(boolean stepwise) {
+            doSetProperty("stepwise", stepwise);
             return this;
         }
         /**
-         * 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.
+         * Sets whether we should stepwise change directories while traversing
+         * file structures when downloading files, or as well when uploading a
+         * file to a directory. You can disable this if you for example are in a
+         * situation where you cannot change directory on the FTP server due
+         * security reasons.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder autoCreate(String autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
+        default AdvancedFtpEndpointConsumerBuilder stepwise(String stepwise) {
+            doSetProperty("stepwise", stepwise);
             return this;
         }
         /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder basicPropertyBinding(
-                boolean basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+        default AdvancedFtpEndpointConsumerBuilder synchronous(
+                boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder basicPropertyBinding(
-                String basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+        default AdvancedFtpEndpointConsumerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
+         * 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>int</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Default: 131072
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder bufferSize(int bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
+        default AdvancedFtpEndpointConsumerBuilder throwExceptionOnConnectFailed(
+                boolean throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
             return this;
         }
         /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
+         * 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>int</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: 131072
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder bufferSize(String bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
+        default AdvancedFtpEndpointConsumerBuilder throwExceptionOnConnectFailed(
+                String throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: false
+         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder synchronous(
-                boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedFtpEndpointConsumerBuilder timeout(int timeout) {
+            doSetProperty("timeout", timeout);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Default: false
+         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpEndpointConsumerBuilder synchronous(
-                String synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedFtpEndpointConsumerBuilder timeout(String timeout) {
+            doSetProperty("timeout", timeout);
             return this;
         }
     }
@@ -2681,6 +2835,129 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
+         * This option is used to specify the encoding of the file. You can use
+         * this on the consumer, to specify the encodings of the files, which
+         * allow Camel to know the charset it should load the file content in
+         * case the file content is being accessed. Likewise when writing a
+         * file, you can use this option to specify which charset to write the
+         * file as well. Do mind that when writing the file Camel may have to
+         * read the message content into memory to be able to convert the data
+         * into the configured charset, so do not use this if you have big
+         * messages.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointProducerBuilder charset(String charset) {
+            doSetProperty("charset", charset);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpEndpointProducerBuilder disconnect(boolean disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpEndpointProducerBuilder disconnect(String disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Producer: If provided, then Camel will write a 2nd done file when the
+         * original file has been written. The done file will be empty. This
+         * option configures what file name to use. Either you can specify a
+         * fixed name. Or you can use dynamic placeholders. The done file will
+         * always be written in the same folder as the original file. Consumer:
+         * If provided, Camel will only consume files if a done file exists.
+         * This option configures what file name to use. Either you can specify
+         * a fixed name. Or you can use dynamic placeholders.The done file is
+         * always expected in the same folder as the original file. Only
+         * ${file.name} and ${file.name.next} is supported as dynamic
+         * placeholders.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointProducerBuilder doneFileName(String doneFileName) {
+            doSetProperty("doneFileName", doneFileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointProducerBuilder fileName(Expression fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointProducerBuilder fileName(String fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
          * Sets passive mode connections. Default is active mode connections.
          * 
          * The option is a: <code>boolean</code> type.
@@ -2797,172 +3074,46 @@ public interface FtpEndpointBuilderFactory {
          * Configures whether the perform verbose (fine grained) logging of the
          * progress of upload and download operations.
          * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: common
-         */
-        default FtpEndpointProducerBuilder transferLoggingVerbose(
-                boolean transferLoggingVerbose) {
-            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
-            return this;
-        }
-        /**
-         * Configures whether the perform verbose (fine grained) logging of the
-         * progress of upload and download operations.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: common
-         */
-        default FtpEndpointProducerBuilder transferLoggingVerbose(
-                String transferLoggingVerbose) {
-            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
-            return this;
-        }
-        /**
-         * Account to use for login.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default FtpEndpointProducerBuilder account(String account) {
-            doSetProperty("account", account);
-            return this;
-        }
-        /**
-         * Password to use for login.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default FtpEndpointProducerBuilder password(String password) {
-            doSetProperty("password", password);
-            return this;
-        }
-        /**
-         * Username to use for login.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default FtpEndpointProducerBuilder username(String username) {
-            doSetProperty("username", username);
-            return this;
-        }
-        /**
-         * This option is used to specify the encoding of the file. You can use
-         * this on the consumer, to specify the encodings of the files, which
-         * allow Camel to know the charset it should load the file content in
-         * case the file content is being accessed. Likewise when writing a
-         * file, you can use this option to specify which charset to write the
-         * file as well. Do mind that when writing the file Camel may have to
-         * read the message content into memory to be able to convert the data
-         * into the configured charset, so do not use this if you have big
-         * messages.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: common
-         */
-        default FtpEndpointProducerBuilder charset(String charset) {
-            doSetProperty("charset", charset);
-            return this;
-        }
-        /**
-         * Producer: If provided, then Camel will write a 2nd done file when the
-         * original file has been written. The done file will be empty. This
-         * option configures what file name to use. Either you can specify a
-         * fixed name. Or you can use dynamic placeholders. The done file will
-         * always be written in the same folder as the original file. Consumer:
-         * If provided, Camel will only consume files if a done file exists.
-         * This option configures what file name to use. Either you can specify
-         * a fixed name. Or you can use dynamic placeholders.The done file is
-         * always expected in the same folder as the original file. Only
-         * ${file.name} and ${file.name.noext} is supported as dynamic
-         * placeholders.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: common
-         */
-        default FtpEndpointProducerBuilder doneFileName(String doneFileName) {
-            doSetProperty("doneFileName", doneFileName);
-            return this;
-        }
-        /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
+         * Default: false
          * Group: common
          */
-        default FtpEndpointProducerBuilder fileName(Expression fileName) {
-            doSetProperty("fileName", fileName);
+        default FtpEndpointProducerBuilder transferLoggingVerbose(
+                boolean transferLoggingVerbose) {
+            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
             return this;
         }
         /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
+         * Configures whether the perform verbose (fine grained) logging of the
+         * progress of upload and download operations.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
+         * Default: false
          * Group: common
          */
-        default FtpEndpointProducerBuilder fileName(String fileName) {
-            doSetProperty("fileName", fileName);
+        default FtpEndpointProducerBuilder transferLoggingVerbose(
+                String transferLoggingVerbose) {
+            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
             return this;
         }
         /**
          * What to do if a file already exists with the same name. Override,
-         * which is the default, replaces the existing file. \n\n - Append -
-         * adds content to the existing file.\n - Fail - throws a
+         * which is the default, replaces the existing file. - Append - adds
+         * content to the existing file. - Fail - throws a
          * GenericFileOperationException, indicating that there is already an
-         * existing file.\n - Ignore - silently ignores the problem and does not
-         * override the existing file, but assumes everything is okay.\n - Move
-         * - option requires to use the moveExisting option to be configured as
+         * existing file. - Ignore - silently ignores the problem and does not
+         * override the existing file, but assumes everything is okay. - Move -
+         * option requires to use the moveExisting option to be configured as
          * well. The option eagerDeleteTargetFile can be used to control what to
          * do if an moving the file, and there exists already an existing file,
          * otherwise causing the move operation to fail. The Move option will
-         * move any existing files, before writing the target file.\n -
-         * TryRename is only applicable if tempFileName option is in use. This
-         * allows to try renaming the file from the temporary name to the actual
-         * name, without doing any exists check. This check may be faster on
-         * some file systems and especially FTP servers.
+         * move any existing files, before writing the target file. - TryRename
+         * is only applicable if tempFileName option is in use. This allows to
+         * try renaming the file from the temporary name to the actual name,
+         * without doing any exists check. This check may be faster on some file
+         * systems and especially FTP servers.
          * 
          * The option is a:
          * <code>org.apache.camel.component.file.GenericFileExist</code> type.
@@ -2976,20 +3127,20 @@ public interface FtpEndpointBuilderFactory {
         }
         /**
          * What to do if a file already exists with the same name. Override,
-         * which is the default, replaces the existing file. \n\n - Append -
-         * adds content to the existing file.\n - Fail - throws a
+         * which is the default, replaces the existing file. - Append - adds
+         * content to the existing file. - Fail - throws a
          * GenericFileOperationException, indicating that there is already an
-         * existing file.\n - Ignore - silently ignores the problem and does not
-         * override the existing file, but assumes everything is okay.\n - Move
-         * - option requires to use the moveExisting option to be configured as
+         * existing file. - Ignore - silently ignores the problem and does not
+         * override the existing file, but assumes everything is okay. - Move -
+         * option requires to use the moveExisting option to be configured as
          * well. The option eagerDeleteTargetFile can be used to control what to
          * do if an moving the file, and there exists already an existing file,
          * otherwise causing the move operation to fail. The Move option will
-         * move any existing files, before writing the target file.\n -
-         * TryRename is only applicable if tempFileName option is in use. This
-         * allows to try renaming the file from the temporary name to the actual
-         * name, without doing any exists check. This check may be faster on
-         * some file systems and especially FTP servers.
+         * move any existing files, before writing the target file. - TryRename
+         * is only applicable if tempFileName option is in use. This allows to
+         * try renaming the file from the temporary name to the actual name,
+         * without doing any exists check. This check may be faster on some file
+         * systems and especially FTP servers.
          * 
          * The option will be converted to a
          * <code>org.apache.camel.component.file.GenericFileExist</code> type.
@@ -3192,34 +3343,293 @@ public interface FtpEndpointBuilderFactory {
          * using exclusive read locks) reading in progress files. Is often used
          * by FTP when uploading big files.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer
+         */
+        default FtpEndpointProducerBuilder tempPrefix(String tempPrefix) {
+            doSetProperty("tempPrefix", tempPrefix);
+            return this;
+        }
+        /**
+         * Account to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpEndpointProducerBuilder account(String account) {
+            doSetProperty("account", account);
+            return this;
+        }
+        /**
+         * Password to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpEndpointProducerBuilder password(String password) {
+            doSetProperty("password", password);
+            return this;
+        }
+        /**
+         * Username to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpEndpointProducerBuilder username(String username) {
+            doSetProperty("username", username);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint producers for the FTP component.
+     */
+    public interface AdvancedFtpEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default FtpEndpointProducerBuilder basic() {
+            return (FtpEndpointProducerBuilder) this;
+        }
+        /**
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder fastExistsCheck(
+                boolean fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder fastExistsCheck(
+                String fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * 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 component, a
+         * GenericFileWriteException of 'Cannot write null body to file.' will
+         * be thrown. If the fileExist option is set to 'Override', then the
+         * file will be truncated, and if set to append the file will remain
+         * unchanged.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder allowNullBody(
+                boolean allowNullBody) {
+            doSetProperty("allowNullBody", allowNullBody);
+            return this;
+        }
+        /**
+         * 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 component, a
+         * GenericFileWriteException of 'Cannot write null body to file.' will
+         * be thrown. If the fileExist option is set to 'Override', then the
+         * file will be truncated, and if set to append the file will remain
+         * unchanged.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder allowNullBody(
+                String allowNullBody) {
+            doSetProperty("allowNullBody", allowNullBody);
+            return this;
+        }
+        /**
+         * Allows you to set chmod on the stored file. For example chmod=640.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder chmod(String chmod) {
+            doSetProperty("chmod", chmod);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after a
+         * Batch upload is complete. disconnectOnBatchComplete will only
+         * disconnect the current connection to the FTP server.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder disconnectOnBatchComplete(
+                boolean disconnectOnBatchComplete) {
+            doSetProperty("disconnectOnBatchComplete", disconnectOnBatchComplete);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after a
+         * Batch upload is complete. disconnectOnBatchComplete will only
+         * disconnect the current connection to the FTP server.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder disconnectOnBatchComplete(
+                String disconnectOnBatchComplete) {
+            doSetProperty("disconnectOnBatchComplete", disconnectOnBatchComplete);
+            return this;
+        }
+        /**
+         * 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 this to disable (set it to
+         * false) deleting the target file before the temp file is written. For
+         * example you may write big files and want the target file to exists
+         * during the temp file is being written. This ensure the target file is
+         * only deleted until the very last moment, just before the temp file is
+         * being renamed to the target filename. This option is also used to
+         * control whether to delete any existing files when fileExist=Move is
+         * enabled, and an existing file exists. If this option
+         * copyAndDeleteOnRenameFails false, then an exception will be thrown if
+         * an existing file existed, if its true, then the existing file is
+         * deleted before the move operation.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder eagerDeleteTargetFile(
+                boolean eagerDeleteTargetFile) {
+            doSetProperty("eagerDeleteTargetFile", eagerDeleteTargetFile);
+            return this;
+        }
+        /**
+         * 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 this to disable (set it to
+         * false) deleting the target file before the temp file is written. For
+         * example you may write big files and want the target file to exists
+         * during the temp file is being written. This ensure the target file is
+         * only deleted until the very last moment, just before the temp file is
+         * being renamed to the target filename. This option is also used to
+         * control whether to delete any existing files when fileExist=Move is
+         * enabled, and an existing file exists. If this option
+         * copyAndDeleteOnRenameFails false, then an exception will be thrown if
+         * an existing file existed, if its true, then the existing file is
+         * deleted before the move operation.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder eagerDeleteTargetFile(
+                String eagerDeleteTargetFile) {
+            doSetProperty("eagerDeleteTargetFile", eagerDeleteTargetFile);
+            return this;
+        }
+        /**
+         * Will keep the last modified timestamp from the source file (if any).
+         * Will use the Exchange.FILE_LAST_MODIFIED header to located the
+         * timestamp. This header can contain either a java.util.Date or long
+         * with the timestamp. If the timestamp exists and the option is enabled
+         * it will set this timestamp on the written file. Note: This option
+         * only applies to the file producer. You cannot use this option with
+         * any of the ftp producers.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder keepLastModified(
+                boolean keepLastModified) {
+            doSetProperty("keepLastModified", keepLastModified);
+            return this;
+        }
+        /**
+         * Will keep the last modified timestamp from the source file (if any).
+         * Will use the Exchange.FILE_LAST_MODIFIED header to located the
+         * timestamp. This header can contain either a java.util.Date or long
+         * with the timestamp. If the timestamp exists and the option is enabled
+         * it will set this timestamp on the written file. Note: This option
+         * only applies to the file producer. You cannot use this option with
+         * any of the ftp producers.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpEndpointProducerBuilder keepLastModified(
+                String keepLastModified) {
+            doSetProperty("keepLastModified", keepLastModified);
+            return this;
+        }
+        /**
+         * Strategy (Custom Strategy) used to move file with special naming
+         * token to use when fileExist=Move is configured. By default, there is
+         * an implementation used if no custom strategy is provided.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.file.strategy.FileMoveExistingStrategy</code> type.
          * 
-         * Group: producer
+         * Group: producer (advanced)
          */
-        default FtpEndpointProducerBuilder tempPrefix(String tempPrefix) {
-            doSetProperty("tempPrefix", tempPrefix);
+        default AdvancedFtpEndpointProducerBuilder moveExistingFileStrategy(
+                Object moveExistingFileStrategy) {
+            doSetProperty("moveExistingFileStrategy", moveExistingFileStrategy);
             return this;
         }
-    }
-
-    /**
-     * Advanced builder for endpoint producers for the FTP component.
-     */
-    public interface AdvancedFtpEndpointProducerBuilder
-            extends
-                EndpointProducerBuilder {
-        default FtpEndpointProducerBuilder basic() {
-            return (FtpEndpointProducerBuilder) this;
-        }
         /**
-         * Allows you to set chmod on the stored file. For example chmod=640.
+         * Strategy (Custom Strategy) used to move file with special naming
+         * token to use when fileExist=Move is configured. By default, there is
+         * an implementation used if no custom strategy is provided.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a
+         * <code>org.apache.camel.component.file.strategy.FileMoveExistingStrategy</code> type.
          * 
          * Group: producer (advanced)
          */
-        default AdvancedFtpEndpointProducerBuilder chmod(String chmod) {
-            doSetProperty("chmod", chmod);
+        default AdvancedFtpEndpointProducerBuilder moveExistingFileStrategy(
+                String moveExistingFileStrategy) {
+            doSetProperty("moveExistingFileStrategy", moveExistingFileStrategy);
             return this;
         }
         /**
@@ -3269,544 +3679,440 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
-         * Sets the connect timeout for waiting for a connection to be
-         * established Used by both FTPClient and JSCH.
-         * 
-         * The option is a: <code>int</code> type.
-         * 
-         * Default: 10000
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointProducerBuilder connectTimeout(
-                int connectTimeout) {
-            doSetProperty("connectTimeout", connectTimeout);
-            return this;
-        }
-        /**
-         * Sets the connect timeout for waiting for a connection to be
-         * established Used by both FTPClient and JSCH.
+         * 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.
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Default: 10000
+         * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder connectTimeout(
-                String connectTimeout) {
-            doSetProperty("connectTimeout", connectTimeout);
+        default AdvancedFtpEndpointProducerBuilder autoCreate(boolean autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
             return this;
         }
         /**
-         * To use a custom instance of FTPClient.
+         * 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.
          * 
-         * The option is a: <code>org.apache.commons.net.ftp.FTPClient</code>
-         * type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
+         * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder ftpClient(Object ftpClient) {
-            doSetProperty("ftpClient", ftpClient);
+        default AdvancedFtpEndpointProducerBuilder autoCreate(String autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
             return this;
         }
         /**
-         * To use a custom instance of FTPClient.
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
          * 
-         * The option will be converted to a
-         * <code>org.apache.commons.net.ftp.FTPClient</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder ftpClient(String ftpClient) {
-            doSetProperty("ftpClient", ftpClient);
+        default AdvancedFtpEndpointProducerBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
         }
         /**
-         * To use a custom instance of FTPClientConfig to configure the FTP
-         * client the endpoint should use.
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
          * 
-         * The option is a:
-         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder ftpClientConfig(
-                Object ftpClientConfig) {
-            doSetProperty("ftpClientConfig", ftpClientConfig);
+        default AdvancedFtpEndpointProducerBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
         }
         /**
-         * To use a custom instance of FTPClientConfig to configure the FTP
-         * client the endpoint should use.
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
          * 
-         * The option will be converted to a
-         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
+         * The option is a: <code>int</code> type.
          * 
+         * Default: 131072
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder ftpClientConfig(
-                String ftpClientConfig) {
-            doSetProperty("ftpClientConfig", ftpClientConfig);
+        default AdvancedFtpEndpointProducerBuilder bufferSize(int bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
             return this;
         }
         /**
-         * Used by FtpComponent to provide additional parameters for the
-         * FTPClientConfig.
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
          * 
-         * The option is a: <code>java.util.Map&lt;java.lang.String,
-         * java.lang.Object&gt;</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
+         * Default: 131072
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder ftpClientConfigParameters(
-                Map<String, Object> ftpClientConfigParameters) {
-            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
+        default AdvancedFtpEndpointProducerBuilder bufferSize(String bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
             return this;
         }
         /**
-         * Used by FtpComponent to provide additional parameters for the
-         * FTPClientConfig.
+         * Sets the connect timeout for waiting for a connection to be
+         * established Used by both FTPClient and JSCH.
          * 
-         * The option will be converted to a
-         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
-         * type.
+         * The option is a: <code>int</code> type.
          * 
+         * Default: 10000
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder ftpClientConfigParameters(
-                String ftpClientConfigParameters) {
-            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
+        default AdvancedFtpEndpointProducerBuilder connectTimeout(
+                int connectTimeout) {
+            doSetProperty("connectTimeout", connectTimeout);
             return this;
         }
         /**
-         * Used by FtpComponent to provide additional parameters for the
-         * FTPClient.
+         * Sets the connect timeout for waiting for a connection to be
+         * established Used by both FTPClient and JSCH.
          * 
-         * The option is a: <code>java.util.Map&lt;java.lang.String,
-         * java.lang.Object&gt;</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
+         * Default: 10000
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder ftpClientParameters(
-                Map<String, Object> ftpClientParameters) {
-            doSetProperty("ftpClientParameters", ftpClientParameters);
+        default AdvancedFtpEndpointProducerBuilder connectTimeout(
+                String connectTimeout) {
+            doSetProperty("connectTimeout", connectTimeout);
             return this;
         }
         /**
-         * Used by FtpComponent to provide additional parameters for the
-         * FTPClient.
+         * To use a custom instance of FTPClient.
          * 
-         * The option will be converted to a
-         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * The option is a: <code>org.apache.commons.net.ftp.FTPClient</code>
          * type.
          * 
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder ftpClientParameters(
-                String ftpClientParameters) {
-            doSetProperty("ftpClientParameters", ftpClientParameters);
-            return this;
-        }
-        /**
-         * Sets optional site command(s) to be executed after successful login.
-         * Multiple site commands can be separated using a new line character.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointProducerBuilder siteCommand(
-                String siteCommand) {
-            doSetProperty("siteCommand", siteCommand);
-            return this;
-        }
-        /**
-         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
-         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
-         * millis. Recommended option is to set this to 300000 so as not have a
-         * hanged connection. On SFTP this option is set as timeout on the JSCH
-         * Session instance.
-         * 
-         * The option is a: <code>int</code> type.
-         * 
-         * Default: 300000
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointProducerBuilder soTimeout(int soTimeout) {
-            doSetProperty("soTimeout", soTimeout);
-            return this;
-        }
-        /**
-         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
-         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
-         * millis. Recommended option is to set this to 300000 so as not have a
-         * hanged connection. On SFTP this option is set as timeout on the JSCH
-         * Session instance.
-         * 
-         * The option will be converted to a <code>int</code> type.
-         * 
-         * Default: 300000
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointProducerBuilder soTimeout(String soTimeout) {
-            doSetProperty("soTimeout", soTimeout);
+        default AdvancedFtpEndpointProducerBuilder ftpClient(Object ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
             return this;
         }
         /**
-         * Sets whether we should stepwise change directories while traversing
-         * file structures when downloading files, or as well when uploading a
-         * file to a directory. You can disable this if you for example are in a
-         * situation where you cannot change directory on the FTP server due
-         * security reasons.
+         * To use a custom instance of FTPClient.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClient</code> type.
          * 
-         * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder stepwise(boolean stepwise) {
-            doSetProperty("stepwise", stepwise);
+        default AdvancedFtpEndpointProducerBuilder ftpClient(String ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
             return this;
         }
         /**
-         * Sets whether we should stepwise change directories while traversing
-         * file structures when downloading files, or as well when uploading a
-         * file to a directory. You can disable this if you for example are in a
-         * situation where you cannot change directory on the FTP server due
-         * security reasons.
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a:
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
          * 
-         * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder stepwise(String stepwise) {
-            doSetProperty("stepwise", stepwise);
+        default AdvancedFtpEndpointProducerBuilder ftpClientConfig(
+                Object ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
             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.
+        }
+        /**
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
          * 
-         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder throwExceptionOnConnectFailed(
-                boolean throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
+        default AdvancedFtpEndpointProducerBuilder ftpClientConfig(
+                String ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
             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.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder throwExceptionOnConnectFailed(
-                String throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
+        default AdvancedFtpEndpointProducerBuilder ftpClientConfigParameters(
+                Map<String, Object> ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             return this;
         }
         /**
-         * Sets the data timeout for waiting for reply Used only by FTPClient.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
-         * The option is a: <code>int</code> type.
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder timeout(int timeout) {
-            doSetProperty("timeout", timeout);
+        default AdvancedFtpEndpointProducerBuilder ftpClientConfigParameters(
+                String ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             return this;
         }
         /**
-         * Sets the data timeout for waiting for reply Used only by FTPClient.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder timeout(String timeout) {
-            doSetProperty("timeout", timeout);
+        default AdvancedFtpEndpointProducerBuilder ftpClientParameters(
+                Map<String, Object> ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * 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 component, a
-         * GenericFileWriteException of 'Cannot write null body to file.' will
-         * be thrown. If the fileExist option is set to 'Override', then the
-         * file will be truncated, and if set to append the file will remain
-         * unchanged.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Default: false
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder allowNullBody(
-                boolean allowNullBody) {
-            doSetProperty("allowNullBody", allowNullBody);
+        default AdvancedFtpEndpointProducerBuilder ftpClientParameters(
+                String ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * 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 component, a
-         * GenericFileWriteException of 'Cannot write null body to file.' will
-         * be thrown. If the fileExist option is set to 'Override', then the
-         * file will be truncated, and if set to append the file will remain
-         * unchanged.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: false
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder allowNullBody(
-                String allowNullBody) {
-            doSetProperty("allowNullBody", allowNullBody);
+        default AdvancedFtpEndpointProducerBuilder maximumReconnectAttempts(
+                int maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * 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 this to disable (set it to
-         * false) deleting the target file before the temp file is written. For
-         * example you may write big files and want the target file to exists
-         * during the temp file is being written. This ensure the target file is
-         * only deleted until the very last moment, just before the temp file is
-         * being renamed to the target filename. This option is also used to
-         * control whether to delete any existing files when fileExist=Move is
-         * enabled, and an existing file exists. If this option
-         * copyAndDeleteOnRenameFails false, then an exception will be thrown if
-         * an existing file existed, if its true, then the existing file is
-         * deleted before the move operation.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Default: true
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder eagerDeleteTargetFile(
-                boolean eagerDeleteTargetFile) {
-            doSetProperty("eagerDeleteTargetFile", eagerDeleteTargetFile);
+        default AdvancedFtpEndpointProducerBuilder maximumReconnectAttempts(
+                String maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * 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 this to disable (set it to
-         * false) deleting the target file before the temp file is written. For
-         * example you may write big files and want the target file to exists
-         * during the temp file is being written. This ensure the target file is
-         * only deleted until the very last moment, just before the temp file is
-         * being renamed to the target filename. This option is also used to
-         * control whether to delete any existing files when fileExist=Move is
-         * enabled, and an existing file exists. If this option
-         * copyAndDeleteOnRenameFails false, then an exception will be thrown if
-         * an existing file existed, if its true, then the existing file is
-         * deleted before the move operation.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>long</code> type.
          * 
-         * Default: true
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder eagerDeleteTargetFile(
-                String eagerDeleteTargetFile) {
-            doSetProperty("eagerDeleteTargetFile", eagerDeleteTargetFile);
+        default AdvancedFtpEndpointProducerBuilder reconnectDelay(
+                long reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
         /**
-         * Will keep the last modified timestamp from the source file (if any).
-         * Will use the Exchange.FILE_LAST_MODIFIED header to located the
-         * timestamp. This header can contain either a java.util.Date or long
-         * with the timestamp. If the timestamp exists and the option is enabled
-         * it will set this timestamp on the written file. Note: This option
-         * only applies to the file producer. You cannot use this option with
-         * any of the ftp producers.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a <code>long</code> type.
          * 
-         * Default: false
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder keepLastModified(
-                boolean keepLastModified) {
-            doSetProperty("keepLastModified", keepLastModified);
+        default AdvancedFtpEndpointProducerBuilder reconnectDelay(
+                String reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
         /**
-         * Will keep the last modified timestamp from the source file (if any).
-         * Will use the Exchange.FILE_LAST_MODIFIED header to located the
-         * timestamp. This header can contain either a java.util.Date or long
-         * with the timestamp. If the timestamp exists and the option is enabled
-         * it will set this timestamp on the written file. Note: This option
-         * only applies to the file producer. You cannot use this option with
-         * any of the ftp producers.
+         * Sets optional site command(s) to be executed after successful login.
+         * Multiple site commands can be separated using a new line character.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
-         * Default: false
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder keepLastModified(
-                String keepLastModified) {
-            doSetProperty("keepLastModified", keepLastModified);
+        default AdvancedFtpEndpointProducerBuilder siteCommand(
+                String siteCommand) {
+            doSetProperty("siteCommand", siteCommand);
             return this;
         }
         /**
-         * Strategy (Custom Strategy) used to move file with special naming
-         * token to use when fileExist=Move is configured. By default, there is
-         * an implementation used if no custom strategy is provided.
+         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
+         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
+         * millis. Recommended option is to set this to 300000 so as not have a
+         * hanged connection. On SFTP this option is set as timeout on the JSCH
+         * Session instance.
          * 
-         * The option is a:
-         * <code>org.apache.camel.component.file.strategy.FileMoveExistingStrategy</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Group: producer (advanced)
+         * Default: 300000
+         * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder moveExistingFileStrategy(
-                Object moveExistingFileStrategy) {
-            doSetProperty("moveExistingFileStrategy", moveExistingFileStrategy);
+        default AdvancedFtpEndpointProducerBuilder soTimeout(int soTimeout) {
+            doSetProperty("soTimeout", soTimeout);
             return this;
         }
         /**
-         * Strategy (Custom Strategy) used to move file with special naming
-         * token to use when fileExist=Move is configured. By default, there is
-         * an implementation used if no custom strategy is provided.
+         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
+         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
+         * millis. Recommended option is to set this to 300000 so as not have a
+         * hanged connection. On SFTP this option is set as timeout on the JSCH
+         * Session instance.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.component.file.strategy.FileMoveExistingStrategy</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Group: producer (advanced)
+         * Default: 300000
+         * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder moveExistingFileStrategy(
-                String moveExistingFileStrategy) {
-            doSetProperty("moveExistingFileStrategy", moveExistingFileStrategy);
+        default AdvancedFtpEndpointProducerBuilder soTimeout(String soTimeout) {
+            doSetProperty("soTimeout", soTimeout);
             return this;
         }
         /**
-         * 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.
+         * Sets whether we should stepwise change directories while traversing
+         * file structures when downloading files, or as well when uploading a
+         * file to a directory. You can disable this if you for example are in a
+         * situation where you cannot change directory on the FTP server due
+         * security reasons.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder autoCreate(boolean autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
+        default AdvancedFtpEndpointProducerBuilder stepwise(boolean stepwise) {
+            doSetProperty("stepwise", stepwise);
             return this;
         }
         /**
-         * 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.
+         * Sets whether we should stepwise change directories while traversing
+         * file structures when downloading files, or as well when uploading a
+         * file to a directory. You can disable this if you for example are in a
+         * situation where you cannot change directory on the FTP server due
+         * security reasons.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: true
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder autoCreate(String autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
+        default AdvancedFtpEndpointProducerBuilder stepwise(String stepwise) {
+            doSetProperty("stepwise", stepwise);
             return this;
         }
         /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder basicPropertyBinding(
-                boolean basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+        default AdvancedFtpEndpointProducerBuilder synchronous(
+                boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder basicPropertyBinding(
-                String basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+        default AdvancedFtpEndpointProducerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
+         * 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>int</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Default: 131072
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder bufferSize(int bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
+        default AdvancedFtpEndpointProducerBuilder throwExceptionOnConnectFailed(
+                boolean throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
             return this;
         }
         /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
+         * 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>int</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: 131072
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder bufferSize(String bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
+        default AdvancedFtpEndpointProducerBuilder throwExceptionOnConnectFailed(
+                String throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: false
+         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder synchronous(
-                boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedFtpEndpointProducerBuilder timeout(int timeout) {
+            doSetProperty("timeout", timeout);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Default: false
+         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpEndpointProducerBuilder synchronous(
-                String synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedFtpEndpointProducerBuilder timeout(String timeout) {
+            doSetProperty("timeout", timeout);
             return this;
         }
     }
@@ -3848,6 +4154,129 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
+         * This option is used to specify the encoding of the file. You can use
+         * this on the consumer, to specify the encodings of the files, which
+         * allow Camel to know the charset it should load the file content in
+         * case the file content is being accessed. Likewise when writing a
+         * file, you can use this option to specify which charset to write the
+         * file as well. Do mind that when writing the file Camel may have to
+         * read the message content into memory to be able to convert the data
+         * into the configured charset, so do not use this if you have big
+         * messages.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointBuilder charset(String charset) {
+            doSetProperty("charset", charset);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpEndpointBuilder disconnect(boolean disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpEndpointBuilder disconnect(String disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Producer: If provided, then Camel will write a 2nd done file when the
+         * original file has been written. The done file will be empty. This
+         * option configures what file name to use. Either you can specify a
+         * fixed name. Or you can use dynamic placeholders. The done file will
+         * always be written in the same folder as the original file. Consumer:
+         * If provided, Camel will only consume files if a done file exists.
+         * This option configures what file name to use. Either you can specify
+         * a fixed name. Or you can use dynamic placeholders.The done file is
+         * always expected in the same folder as the original file. Only
+         * ${file.name} and ${file.name.next} is supported as dynamic
+         * placeholders.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointBuilder doneFileName(String doneFileName) {
+            doSetProperty("doneFileName", doneFileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointBuilder fileName(Expression fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpEndpointBuilder fileName(String fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
          * Sets passive mode connections. Default is active mode connections.
          * 
          * The option is a: <code>boolean</code> type.
@@ -4021,123 +4450,154 @@ public interface FtpEndpointBuilderFactory {
             doSetProperty("username", username);
             return this;
         }
+    }
+
+    /**
+     * Advanced builder for endpoint for the FTP component.
+     */
+    public interface AdvancedFtpEndpointBuilder
+            extends
+                AdvancedFtpEndpointConsumerBuilder,
+                AdvancedFtpEndpointProducerBuilder {
+        default FtpEndpointBuilder basic() {
+            return (FtpEndpointBuilder) this;
+        }
         /**
-         * This option is used to specify the encoding of the file. You can use
-         * this on the consumer, to specify the encodings of the files, which
-         * allow Camel to know the charset it should load the file content in
-         * case the file content is being accessed. Likewise when writing a
-         * file, you can use this option to specify which charset to write the
-         * file as well. Do mind that when writing the file Camel may have to
-         * read the message content into memory to be able to convert the data
-         * into the configured charset, so do not use this if you have big
-         * messages.
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: common
+         * Default: false
+         * Group: common (advanced)
          */
-        default FtpEndpointBuilder charset(String charset) {
-            doSetProperty("charset", charset);
+        default AdvancedFtpEndpointBuilder fastExistsCheck(
+                boolean fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
             return this;
         }
         /**
-         * Producer: If provided, then Camel will write a 2nd done file when the
-         * original file has been written. The done file will be empty. This
-         * option configures what file name to use. Either you can specify a
-         * fixed name. Or you can use dynamic placeholders. The done file will
-         * always be written in the same folder as the original file. Consumer:
-         * If provided, Camel will only consume files if a done file exists.
-         * This option configures what file name to use. Either you can specify
-         * a fixed name. Or you can use dynamic placeholders.The done file is
-         * always expected in the same folder as the original file. Only
-         * ${file.name} and ${file.name.noext} is supported as dynamic
-         * placeholders.
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpEndpointBuilder fastExistsCheck(
+                String fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * Set the client side port range in active mode. The syntax is:
+         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
+         * include all 1xxxx ports.
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
-         * Group: common
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder activePortRange(
+                String activePortRange) {
+            doSetProperty("activePortRange", activePortRange);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder autoCreate(boolean autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder autoCreate(String autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
          */
-        default FtpEndpointBuilder doneFileName(String doneFileName) {
-            doSetProperty("doneFileName", doneFileName);
+        default AdvancedFtpEndpointBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
         }
         /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
          * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: common
+         * Default: false
+         * Group: advanced
          */
-        default FtpEndpointBuilder fileName(Expression fileName) {
-            doSetProperty("fileName", fileName);
+        default AdvancedFtpEndpointBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
         }
         /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Group: common
+         * Default: 131072
+         * Group: advanced
          */
-        default FtpEndpointBuilder fileName(String fileName) {
-            doSetProperty("fileName", fileName);
+        default AdvancedFtpEndpointBuilder bufferSize(int bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
             return this;
         }
-    }
-
-    /**
-     * Advanced builder for endpoint for the FTP component.
-     */
-    public interface AdvancedFtpEndpointBuilder
-            extends
-                AdvancedFtpEndpointConsumerBuilder,
-                AdvancedFtpEndpointProducerBuilder {
-        default FtpEndpointBuilder basic() {
-            return (FtpEndpointBuilder) this;
-        }
         /**
-         * Set the client side port range in active mode. The syntax is:
-         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
-         * include all 1xxxx ports.
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
+         * Default: 131072
          * Group: advanced
          */
-        default AdvancedFtpEndpointBuilder activePortRange(
-                String activePortRange) {
-            doSetProperty("activePortRange", activePortRange);
+        default AdvancedFtpEndpointBuilder bufferSize(String bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
             return this;
         }
         /**
@@ -4277,6 +4737,56 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder maximumReconnectAttempts(
+                int maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
+            return this;
+        }
+        /**
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder maximumReconnectAttempts(
+                String maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
+            return this;
+        }
+        /**
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
+         * 
+         * The option is a: <code>long</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder reconnectDelay(long reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
+            return this;
+        }
+        /**
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
+         * 
+         * The option will be converted to a <code>long</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder reconnectDelay(String reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
+            return this;
+        }
+        /**
          * Sets optional site command(s) to be executed after successful login.
          * Multiple site commands can be separated using a new line character.
          * 
@@ -4353,6 +4863,32 @@ public interface FtpEndpointBuilderFactory {
             return this;
         }
         /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder synchronous(boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedFtpEndpointBuilder synchronous(String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            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
@@ -4410,116 +4946,6 @@ public interface FtpEndpointBuilderFactory {
             doSetProperty("timeout", timeout);
             return this;
         }
-        /**
-         * 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.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointBuilder autoCreate(boolean autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointBuilder autoCreate(String autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
-            return this;
-        }
-        /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointBuilder basicPropertyBinding(
-                boolean basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
-            return this;
-        }
-        /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointBuilder basicPropertyBinding(
-                String basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
-            return this;
-        }
-        /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
-         * 
-         * The option is a: <code>int</code> type.
-         * 
-         * Default: 131072
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointBuilder bufferSize(int bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
-            return this;
-        }
-        /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
-         * 
-         * The option will be converted to a <code>int</code> type.
-         * 
-         * Default: 131072
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointBuilder bufferSize(String bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
-            return this;
-        }
-        /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointBuilder synchronous(boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
-            return this;
-        }
-        /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         */
-        default AdvancedFtpEndpointBuilder synchronous(String synchronous) {
-            doSetProperty("synchronous", synchronous);
-            return this;
-        }
     }
 
     /**
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FtpsEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FtpsEndpointBuilderFactory.java
index 57d1013..afc34e0 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FtpsEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FtpsEndpointBuilderFactory.java
@@ -79,6 +79,129 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
+         * This option is used to specify the encoding of the file. You can use
+         * this on the consumer, to specify the encodings of the files, which
+         * allow Camel to know the charset it should load the file content in
+         * case the file content is being accessed. Likewise when writing a
+         * file, you can use this option to specify which charset to write the
+         * file as well. Do mind that when writing the file Camel may have to
+         * read the message content into memory to be able to convert the data
+         * into the configured charset, so do not use this if you have big
+         * messages.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpsEndpointConsumerBuilder charset(String charset) {
+            doSetProperty("charset", charset);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointConsumerBuilder disconnect(boolean disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointConsumerBuilder disconnect(String disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Producer: If provided, then Camel will write a 2nd done file when the
+         * original file has been written. The done file will be empty. This
+         * option configures what file name to use. Either you can specify a
+         * fixed name. Or you can use dynamic placeholders. The done file will
+         * always be written in the same folder as the original file. Consumer:
+         * If provided, Camel will only consume files if a done file exists.
+         * This option configures what file name to use. Either you can specify
+         * a fixed name. Or you can use dynamic placeholders.The done file is
+         * always expected in the same folder as the original file. Only
+         * ${file.name} and ${file.name.next} is supported as dynamic
+         * placeholders.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpsEndpointConsumerBuilder doneFileName(String doneFileName) {
+            doSetProperty("doneFileName", doneFileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpsEndpointConsumerBuilder fileName(Expression fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpsEndpointConsumerBuilder fileName(String fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
          * Sets passive mode connections. Default is active mode connections.
          * 
          * The option is a: <code>boolean</code> type.
@@ -133,587 +256,390 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Sets the download method to use when not using a local working
-         * directory. If set to true, the remote files are streamed to the route
-         * as they are read. When set to false, the remote files are loaded into
-         * memory before being sent into the route.
+         * Configures the interval in seconds to use when logging the progress
+         * of upload and download operations that are in-flight. This is used
+         * for logging progress when operations takes longer time.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: false
-         * Group: consumer
+         * Default: 5
+         * Group: common
          */
-        default FtpsEndpointConsumerBuilder streamDownload(
-                boolean streamDownload) {
-            doSetProperty("streamDownload", streamDownload);
+        default FtpsEndpointConsumerBuilder transferLoggingIntervalSeconds(
+                int transferLoggingIntervalSeconds) {
+            doSetProperty("transferLoggingIntervalSeconds", transferLoggingIntervalSeconds);
             return this;
         }
         /**
-         * Sets the download method to use when not using a local working
-         * directory. If set to true, the remote files are streamed to the route
-         * as they are read. When set to false, the remote files are loaded into
-         * memory before being sent into the route.
+         * Configures the interval in seconds to use when logging the progress
+         * of upload and download operations that are in-flight. This is used
+         * for logging progress when operations takes longer time.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Default: false
-         * Group: consumer
+         * Default: 5
+         * Group: common
          */
-        default FtpsEndpointConsumerBuilder streamDownload(String streamDownload) {
-            doSetProperty("streamDownload", streamDownload);
+        default FtpsEndpointConsumerBuilder transferLoggingIntervalSeconds(
+                String transferLoggingIntervalSeconds) {
+            doSetProperty("transferLoggingIntervalSeconds", transferLoggingIntervalSeconds);
             return this;
         }
         /**
-         * Account to use for login.
+         * Configure the logging level to use when logging the progress of
+         * upload and download operations.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>org.apache.camel.LoggingLevel</code> type.
          * 
-         * Group: security
+         * Default: DEBUG
+         * Group: common
          */
-        default FtpsEndpointConsumerBuilder account(String account) {
-            doSetProperty("account", account);
+        default FtpsEndpointConsumerBuilder transferLoggingLevel(
+                LoggingLevel transferLoggingLevel) {
+            doSetProperty("transferLoggingLevel", transferLoggingLevel);
             return this;
         }
         /**
-         * Use this option to disable default options when using secure data
-         * channel. This allows you to be in full control what the execPbsz and
-         * execProt setting should be used. Default is false.
+         * Configure the logging level to use when logging the progress of
+         * upload and download operations.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>org.apache.camel.LoggingLevel</code> type.
          * 
-         * Default: false
-         * Group: security
+         * Default: DEBUG
+         * Group: common
          */
-        default FtpsEndpointConsumerBuilder disableSecureDataChannelDefaults(
-                boolean disableSecureDataChannelDefaults) {
-            doSetProperty("disableSecureDataChannelDefaults", disableSecureDataChannelDefaults);
+        default FtpsEndpointConsumerBuilder transferLoggingLevel(
+                String transferLoggingLevel) {
+            doSetProperty("transferLoggingLevel", transferLoggingLevel);
             return this;
         }
         /**
-         * Use this option to disable default options when using secure data
-         * channel. This allows you to be in full control what the execPbsz and
-         * execProt setting should be used. Default is false.
+         * Configures whether the perform verbose (fine grained) logging of the
+         * progress of upload and download operations.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
          * Default: false
-         * Group: security
+         * Group: common
          */
-        default FtpsEndpointConsumerBuilder disableSecureDataChannelDefaults(
-                String disableSecureDataChannelDefaults) {
-            doSetProperty("disableSecureDataChannelDefaults", disableSecureDataChannelDefaults);
+        default FtpsEndpointConsumerBuilder transferLoggingVerbose(
+                boolean transferLoggingVerbose) {
+            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
             return this;
         }
         /**
-         * When using secure data channel you can set the exec protection buffer
-         * size.
+         * Configures whether the perform verbose (fine grained) logging of the
+         * progress of upload and download operations.
          * 
-         * The option is a: <code>java.lang.Long</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: common
          */
-        default FtpsEndpointConsumerBuilder execPbsz(Long execPbsz) {
-            doSetProperty("execPbsz", execPbsz);
+        default FtpsEndpointConsumerBuilder transferLoggingVerbose(
+                String transferLoggingVerbose) {
+            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
             return this;
         }
         /**
-         * When using secure data channel you can set the exec protection buffer
-         * size.
+         * Allows for bridging the consumer to the Camel routing Error Handler,
+         * which mean any exceptions occurred while the consumer is trying to
+         * pickup incoming messages, or the likes, will now be processed as a
+         * message and handled by the routing Error Handler. By default the
+         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
+         * with exceptions, that will be logged at WARN or ERROR level and
+         * ignored.
          * 
-         * The option will be converted to a <code>java.lang.Long</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder execPbsz(String execPbsz) {
-            doSetProperty("execPbsz", execPbsz);
+        default FtpsEndpointConsumerBuilder bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
             return this;
         }
         /**
-         * The exec protection level PROT command. C - Clear S - Safe(SSL
-         * protocol only) E - Confidential(SSL protocol only) P - Private.
+         * Allows for bridging the consumer to the Camel routing Error Handler,
+         * which mean any exceptions occurred while the consumer is trying to
+         * pickup incoming messages, or the likes, will now be processed as a
+         * message and handled by the routing Error Handler. By default the
+         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
+         * with exceptions, that will be logged at WARN or ERROR level and
+         * ignored.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder execProt(String execProt) {
-            doSetProperty("execProt", execProt);
+        default FtpsEndpointConsumerBuilder bridgeErrorHandler(
+                String bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
             return this;
         }
         /**
-         * Set the key store parameters.
+         * If true, the file will be deleted after it is processed successfully.
          * 
-         * The option is a: <code>java.util.Map&lt;java.lang.String,
-         * java.lang.Object&gt;</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder ftpClientKeyStoreParameters(
-                Map<String, Object> ftpClientKeyStoreParameters) {
-            doSetProperty("ftpClientKeyStoreParameters", ftpClientKeyStoreParameters);
+        default FtpsEndpointConsumerBuilder delete(boolean delete) {
+            doSetProperty("delete", delete);
             return this;
         }
         /**
-         * Set the key store parameters.
+         * If true, the file will be deleted after it is processed successfully.
          * 
-         * The option will be converted to a
-         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
-         * type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder ftpClientKeyStoreParameters(
-                String ftpClientKeyStoreParameters) {
-            doSetProperty("ftpClientKeyStoreParameters", ftpClientKeyStoreParameters);
+        default FtpsEndpointConsumerBuilder delete(String delete) {
+            doSetProperty("delete", delete);
             return this;
         }
         /**
-         * Set the trust store parameters.
+         * Sets the move failure expression based on Simple language. For
+         * example, to move files into a .error subdirectory use: .error. Note:
+         * When moving the files to the fail location Camel will handle the
+         * error and will not pick up the file again.
          * 
-         * The option is a: <code>java.util.Map&lt;java.lang.String,
-         * java.lang.Object&gt;</code> type.
+         * The option is a: <code>org.apache.camel.Expression</code> type.
          * 
-         * Group: security
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder ftpClientTrustStoreParameters(
-                Map<String, Object> ftpClientTrustStoreParameters) {
-            doSetProperty("ftpClientTrustStoreParameters", ftpClientTrustStoreParameters);
+        default FtpsEndpointConsumerBuilder moveFailed(Expression moveFailed) {
+            doSetProperty("moveFailed", moveFailed);
             return this;
         }
         /**
-         * Set the trust store parameters.
-         * 
-         * The option will be converted to a
-         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
-         * type.
+         * Sets the move failure expression based on Simple language. For
+         * example, to move files into a .error subdirectory use: .error. Note:
+         * When moving the files to the fail location Camel will handle the
+         * error and will not pick up the file again.
          * 
-         * Group: security
+         * The option will be converted to a
+         * <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder ftpClientTrustStoreParameters(
-                String ftpClientTrustStoreParameters) {
-            doSetProperty("ftpClientTrustStoreParameters", ftpClientTrustStoreParameters);
+        default FtpsEndpointConsumerBuilder moveFailed(String moveFailed) {
+            doSetProperty("moveFailed", moveFailed);
             return this;
         }
         /**
-         * Set the security mode (Implicit/Explicit). true - Implicit Mode /
-         * False - Explicit Mode.
+         * If true, the file is not moved or deleted in any way. This option is
+         * good for readonly data, or for ETL type requirements. If noop=true,
+         * Camel will set idempotent=true as well, to avoid consuming the same
+         * files over and over again.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
-         * Group: security
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder implicit(boolean implicit) {
-            doSetProperty("implicit", implicit);
+        default FtpsEndpointConsumerBuilder noop(boolean noop) {
+            doSetProperty("noop", noop);
             return this;
         }
         /**
-         * Set the security mode (Implicit/Explicit). true - Implicit Mode /
-         * False - Explicit Mode.
+         * If true, the file is not moved or deleted in any way. This option is
+         * good for readonly data, or for ETL type requirements. If noop=true,
+         * Camel will set idempotent=true as well, to avoid consuming the same
+         * files over and over again.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
-         * Group: security
-         */
-        default FtpsEndpointConsumerBuilder implicit(String implicit) {
-            doSetProperty("implicit", implicit);
-            return this;
-        }
-        /**
-         * Password to use for login.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder password(String password) {
-            doSetProperty("password", password);
+        default FtpsEndpointConsumerBuilder noop(String noop) {
+            doSetProperty("noop", noop);
             return this;
         }
         /**
-         * Set the underlying security protocol.
+         * Expression (such as File Language) used to dynamically set the
+         * filename when moving it before processing. For example to move
+         * in-progress files into the order directory set this value to order.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>org.apache.camel.Expression</code> type.
          * 
-         * Default: TLSv1.2
-         * Group: security
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder securityProtocol(
-                String securityProtocol) {
-            doSetProperty("securityProtocol", securityProtocol);
+        default FtpsEndpointConsumerBuilder preMove(Expression preMove) {
+            doSetProperty("preMove", preMove);
             return this;
         }
         /**
-         * Gets the JSSE configuration that overrides any settings in
-         * FtpsEndpoint#ftpClientKeyStoreParameters,
-         * ftpClientTrustStoreParameters, and
-         * FtpsConfiguration#getSecurityProtocol().
+         * Expression (such as File Language) used to dynamically set the
+         * filename when moving it before processing. For example to move
+         * in-progress files into the order directory set this value to order.
          * 
-         * The option is a:
-         * <code>org.apache.camel.support.jsse.SSLContextParameters</code> type.
+         * The option will be converted to a
+         * <code>org.apache.camel.Expression</code> type.
          * 
-         * Group: security
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder sslContextParameters(
-                Object sslContextParameters) {
-            doSetProperty("sslContextParameters", sslContextParameters);
+        default FtpsEndpointConsumerBuilder preMove(String preMove) {
+            doSetProperty("preMove", preMove);
             return this;
         }
         /**
-         * Gets the JSSE configuration that overrides any settings in
-         * FtpsEndpoint#ftpClientKeyStoreParameters,
-         * ftpClientTrustStoreParameters, and
-         * FtpsConfiguration#getSecurityProtocol().
+         * When pre-sort is enabled then the consumer will sort the file and
+         * directory names during polling, that was retrieved from the file
+         * system. You may want to do this in case you need to operate on the
+         * files in a sorted order. The pre-sort is executed before the consumer
+         * starts to filter, and accept files to process by Camel. This option
+         * is default=false meaning disabled.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.support.jsse.SSLContextParameters</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder sslContextParameters(
-                String sslContextParameters) {
-            doSetProperty("sslContextParameters", sslContextParameters);
+        default FtpsEndpointConsumerBuilder preSort(boolean preSort) {
+            doSetProperty("preSort", preSort);
             return this;
         }
         /**
-         * Username to use for login.
+         * When pre-sort is enabled then the consumer will sort the file and
+         * directory names during polling, that was retrieved from the file
+         * system. You may want to do this in case you need to operate on the
+         * files in a sorted order. The pre-sort is executed before the consumer
+         * starts to filter, and accept files to process by Camel. This option
+         * is default=false meaning disabled.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder username(String username) {
-            doSetProperty("username", username);
+        default FtpsEndpointConsumerBuilder preSort(String preSort) {
+            doSetProperty("preSort", preSort);
             return this;
         }
         /**
-         * This option is used to specify the encoding of the file. You can use
-         * this on the consumer, to specify the encodings of the files, which
-         * allow Camel to know the charset it should load the file content in
-         * case the file content is being accessed. Likewise when writing a
-         * file, you can use this option to specify which charset to write the
-         * file as well. Do mind that when writing the file Camel may have to
-         * read the message content into memory to be able to convert the data
-         * into the configured charset, so do not use this if you have big
-         * messages.
+         * If a directory, will look for files in all the sub-directories as
+         * well.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: common
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder charset(String charset) {
-            doSetProperty("charset", charset);
+        default FtpsEndpointConsumerBuilder recursive(boolean recursive) {
+            doSetProperty("recursive", recursive);
             return this;
         }
         /**
-         * Producer: If provided, then Camel will write a 2nd done file when the
-         * original file has been written. The done file will be empty. This
-         * option configures what file name to use. Either you can specify a
-         * fixed name. Or you can use dynamic placeholders. The done file will
-         * always be written in the same folder as the original file. Consumer:
-         * If provided, Camel will only consume files if a done file exists.
-         * This option configures what file name to use. Either you can specify
-         * a fixed name. Or you can use dynamic placeholders.The done file is
-         * always expected in the same folder as the original file. Only
-         * ${file.name} and ${file.name.noext} is supported as dynamic
-         * placeholders.
+         * If a directory, will look for files in all the sub-directories as
+         * well.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: common
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder doneFileName(String doneFileName) {
-            doSetProperty("doneFileName", doneFileName);
+        default FtpsEndpointConsumerBuilder recursive(String recursive) {
+            doSetProperty("recursive", recursive);
             return this;
         }
         /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
+         * Configures whether resume download is enabled. This must be supported
+         * by the FTP server (almost all FTP servers support it). In addition
+         * the options localWorkDirectory must be configured so downloaded files
+         * are stored in a local directory, and the option binary must be
+         * enabled, which is required to support resuming of downloads.
          * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: common
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder fileName(Expression fileName) {
-            doSetProperty("fileName", fileName);
+        default FtpsEndpointConsumerBuilder resumeDownload(
+                boolean resumeDownload) {
+            doSetProperty("resumeDownload", resumeDownload);
             return this;
         }
         /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
+         * Configures whether resume download is enabled. This must be supported
+         * by the FTP server (almost all FTP servers support it). In addition
+         * the options localWorkDirectory must be configured so downloaded files
+         * are stored in a local directory, and the option binary must be
+         * enabled, which is required to support resuming of downloads.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: common
+         * Default: false
+         * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder fileName(String fileName) {
-            doSetProperty("fileName", fileName);
+        default FtpsEndpointConsumerBuilder resumeDownload(String resumeDownload) {
+            doSetProperty("resumeDownload", resumeDownload);
             return this;
         }
         /**
-         * Allows for bridging the consumer to the Camel routing Error Handler,
-         * which mean any exceptions occurred while the consumer is trying to
-         * pickup incoming messages, or the likes, will now be processed as a
-         * message and handled by the routing Error Handler. By default the
-         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
-         * with exceptions, that will be logged at WARN or ERROR level and
-         * ignored.
+         * If the polling consumer did not poll any files, you can enable this
+         * option to send an empty message (no body) instead.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
          * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder bridgeErrorHandler(
-                boolean bridgeErrorHandler) {
-            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+        default FtpsEndpointConsumerBuilder sendEmptyMessageWhenIdle(
+                boolean sendEmptyMessageWhenIdle) {
+            doSetProperty("sendEmptyMessageWhenIdle", sendEmptyMessageWhenIdle);
             return this;
         }
         /**
-         * Allows for bridging the consumer to the Camel routing Error Handler,
-         * which mean any exceptions occurred while the consumer is trying to
-         * pickup incoming messages, or the likes, will now be processed as a
-         * message and handled by the routing Error Handler. By default the
-         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
-         * with exceptions, that will be logged at WARN or ERROR level and
-         * ignored.
+         * If the polling consumer did not poll any files, you can enable this
+         * option to send an empty message (no body) instead.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
          * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder bridgeErrorHandler(
-                String bridgeErrorHandler) {
-            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+        default FtpsEndpointConsumerBuilder sendEmptyMessageWhenIdle(
+                String sendEmptyMessageWhenIdle) {
+            doSetProperty("sendEmptyMessageWhenIdle", sendEmptyMessageWhenIdle);
             return this;
         }
         /**
-         * If true, the file will be deleted after it is processed successfully.
+         * Sets the download method to use when not using a local working
+         * directory. If set to true, the remote files are streamed to the route
+         * as they are read. When set to false, the remote files are loaded into
+         * memory before being sent into the route.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
          * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder delete(boolean delete) {
-            doSetProperty("delete", delete);
+        default FtpsEndpointConsumerBuilder streamDownload(
+                boolean streamDownload) {
+            doSetProperty("streamDownload", streamDownload);
             return this;
         }
         /**
-         * If true, the file will be deleted after it is processed successfully.
+         * Sets the download method to use when not using a local working
+         * directory. If set to true, the remote files are streamed to the route
+         * as they are read. When set to false, the remote files are loaded into
+         * memory before being sent into the route.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
          * Group: consumer
          */
-        default FtpsEndpointConsumerBuilder delete(String delete) {
-            doSetProperty("delete", delete);
-            return this;
-        }
-        /**
-         * Sets the move failure expression based on Simple language. For
-         * example, to move files into a .error subdirectory use: .error. Note:
-         * When moving the files to the fail location Camel will handle the
-         * error and will not pick up the file again.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder moveFailed(Expression moveFailed) {
-            doSetProperty("moveFailed", moveFailed);
-            return this;
-        }
-        /**
-         * Sets the move failure expression based on Simple language. For
-         * example, to move files into a .error subdirectory use: .error. Note:
-         * When moving the files to the fail location Camel will handle the
-         * error and will not pick up the file again.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder moveFailed(String moveFailed) {
-            doSetProperty("moveFailed", moveFailed);
-            return this;
-        }
-        /**
-         * If true, the file is not moved or deleted in any way. This option is
-         * good for readonly data, or for ETL type requirements. If noop=true,
-         * Camel will set idempotent=true as well, to avoid consuming the same
-         * files over and over again.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder noop(boolean noop) {
-            doSetProperty("noop", noop);
-            return this;
-        }
-        /**
-         * If true, the file is not moved or deleted in any way. This option is
-         * good for readonly data, or for ETL type requirements. If noop=true,
-         * Camel will set idempotent=true as well, to avoid consuming the same
-         * files over and over again.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder noop(String noop) {
-            doSetProperty("noop", noop);
-            return this;
-        }
-        /**
-         * Expression (such as File Language) used to dynamically set the
-         * filename when moving it before processing. For example to move
-         * in-progress files into the order directory set this value to order.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder preMove(Expression preMove) {
-            doSetProperty("preMove", preMove);
-            return this;
-        }
-        /**
-         * Expression (such as File Language) used to dynamically set the
-         * filename when moving it before processing. For example to move
-         * in-progress files into the order directory set this value to order.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder preMove(String preMove) {
-            doSetProperty("preMove", preMove);
-            return this;
-        }
-        /**
-         * When pre-sort is enabled then the consumer will sort the file and
-         * directory names during polling, that was retrieved from the file
-         * system. You may want to do this in case you need to operate on the
-         * files in a sorted order. The pre-sort is executed before the consumer
-         * starts to filter, and accept files to process by Camel. This option
-         * is default=false meaning disabled.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder preSort(boolean preSort) {
-            doSetProperty("preSort", preSort);
-            return this;
-        }
-        /**
-         * When pre-sort is enabled then the consumer will sort the file and
-         * directory names during polling, that was retrieved from the file
-         * system. You may want to do this in case you need to operate on the
-         * files in a sorted order. The pre-sort is executed before the consumer
-         * starts to filter, and accept files to process by Camel. This option
-         * is default=false meaning disabled.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder preSort(String preSort) {
-            doSetProperty("preSort", preSort);
-            return this;
-        }
-        /**
-         * If a directory, will look for files in all the sub-directories as
-         * well.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder recursive(boolean recursive) {
-            doSetProperty("recursive", recursive);
-            return this;
-        }
-        /**
-         * If a directory, will look for files in all the sub-directories as
-         * well.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder recursive(String recursive) {
-            doSetProperty("recursive", recursive);
-            return this;
-        }
-        /**
-         * If the polling consumer did not poll any files, you can enable this
-         * option to send an empty message (no body) instead.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder sendEmptyMessageWhenIdle(
-                boolean sendEmptyMessageWhenIdle) {
-            doSetProperty("sendEmptyMessageWhenIdle", sendEmptyMessageWhenIdle);
-            return this;
-        }
-        /**
-         * If the polling consumer did not poll any files, you can enable this
-         * option to send an empty message (no body) instead.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default FtpsEndpointConsumerBuilder sendEmptyMessageWhenIdle(
-                String sendEmptyMessageWhenIdle) {
-            doSetProperty("sendEmptyMessageWhenIdle", sendEmptyMessageWhenIdle);
+        default FtpsEndpointConsumerBuilder streamDownload(String streamDownload) {
+            doSetProperty("streamDownload", streamDownload);
             return this;
         }
         /**
@@ -1999,296 +1925,311 @@ public interface FtpsEndpointBuilderFactory {
             doSetProperty("sorter", sorter);
             return this;
         }
-    }
-
-    /**
-     * Advanced builder for endpoint consumers for the FTPS component.
-     */
-    public interface AdvancedFtpsEndpointConsumerBuilder
-            extends
-                EndpointConsumerBuilder {
-        default FtpsEndpointConsumerBuilder basic() {
-            return (FtpsEndpointConsumerBuilder) this;
-        }
         /**
-         * Allows you to set how the consumer will handle subfolders and files
-         * in the path if the directory parser results in with absolute paths
-         * The reason for this is that some FTP servers may return file names
-         * with absolute paths, and if so then the FTP component needs to handle
-         * this by converting the returned path into a relative path.
+         * Account to use for login.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
-         * Default: false
-         * Group: consumer (advanced)
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder handleDirectoryParserAbsoluteResult(
-                boolean handleDirectoryParserAbsoluteResult) {
-            doSetProperty("handleDirectoryParserAbsoluteResult", handleDirectoryParserAbsoluteResult);
+        default FtpsEndpointConsumerBuilder account(String account) {
+            doSetProperty("account", account);
             return this;
         }
         /**
-         * Allows you to set how the consumer will handle subfolders and files
-         * in the path if the directory parser results in with absolute paths
-         * The reason for this is that some FTP servers may return file names
-         * with absolute paths, and if so then the FTP component needs to handle
-         * this by converting the returned path into a relative path.
+         * Use this option to disable default options when using secure data
+         * channel. This allows you to be in full control what the execPbsz and
+         * execProt setting should be used. Default is false.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
          * Default: false
-         * Group: consumer (advanced)
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder handleDirectoryParserAbsoluteResult(
-                String handleDirectoryParserAbsoluteResult) {
-            doSetProperty("handleDirectoryParserAbsoluteResult", handleDirectoryParserAbsoluteResult);
+        default FtpsEndpointConsumerBuilder disableSecureDataChannelDefaults(
+                boolean disableSecureDataChannelDefaults) {
+            doSetProperty("disableSecureDataChannelDefaults", disableSecureDataChannelDefaults);
             return this;
         }
         /**
-         * Whether to ignore when (trying to list files in directories or when
-         * downloading a file), which does not exist or due to permission error.
-         * By default when a directory or file does not exists or insufficient
-         * permission, then an exception is thrown. Setting this option to true
-         * allows to ignore that instead.
+         * Use this option to disable default options when using secure data
+         * channel. This allows you to be in full control what the execPbsz and
+         * execProt setting should be used. Default is false.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
-         * Group: consumer (advanced)
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder ignoreFileNotFoundOrPermissionError(
-                boolean ignoreFileNotFoundOrPermissionError) {
-            doSetProperty("ignoreFileNotFoundOrPermissionError", ignoreFileNotFoundOrPermissionError);
+        default FtpsEndpointConsumerBuilder disableSecureDataChannelDefaults(
+                String disableSecureDataChannelDefaults) {
+            doSetProperty("disableSecureDataChannelDefaults", disableSecureDataChannelDefaults);
             return this;
         }
         /**
-         * Whether to ignore when (trying to list files in directories or when
-         * downloading a file), which does not exist or due to permission error.
-         * By default when a directory or file does not exists or insufficient
-         * permission, then an exception is thrown. Setting this option to true
-         * allows to ignore that instead.
+         * When using secure data channel you can set the exec protection buffer
+         * size.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.lang.Long</code> type.
          * 
-         * Default: false
-         * Group: consumer (advanced)
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder ignoreFileNotFoundOrPermissionError(
-                String ignoreFileNotFoundOrPermissionError) {
-            doSetProperty("ignoreFileNotFoundOrPermissionError", ignoreFileNotFoundOrPermissionError);
+        default FtpsEndpointConsumerBuilder execPbsz(Long execPbsz) {
+            doSetProperty("execPbsz", execPbsz);
             return this;
         }
         /**
-         * Whether to allow using LIST command when downloading a file. Default
-         * is true. In some use cases you may want to download a specific file
-         * and are not allowed to use the LIST command, and therefore you can
-         * set this option to false. Notice when using this option, then the
-         * specific file to download does not include meta-data information such
-         * as file size, timestamp, permissions etc, because those information
-         * is only possible to retrieve when LIST command is in use.
+         * When using secure data channel you can set the exec protection buffer
+         * size.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a <code>java.lang.Long</code> type.
          * 
-         * Default: true
-         * Group: consumer (advanced)
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder useList(boolean useList) {
-            doSetProperty("useList", useList);
+        default FtpsEndpointConsumerBuilder execPbsz(String execPbsz) {
+            doSetProperty("execPbsz", execPbsz);
             return this;
         }
         /**
-         * Whether to allow using LIST command when downloading a file. Default
-         * is true. In some use cases you may want to download a specific file
-         * and are not allowed to use the LIST command, and therefore you can
-         * set this option to false. Notice when using this option, then the
-         * specific file to download does not include meta-data information such
-         * as file size, timestamp, permissions etc, because those information
-         * is only possible to retrieve when LIST command is in use.
+         * The exec protection level PROT command. C - Clear S - Safe(SSL
+         * protocol only) E - Confidential(SSL protocol only) P - Private.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
-         * Default: true
-         * Group: consumer (advanced)
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder useList(String useList) {
-            doSetProperty("useList", useList);
+        default FtpsEndpointConsumerBuilder execProt(String execProt) {
+            doSetProperty("execProt", execProt);
             return this;
         }
         /**
-         * Set the client side port range in active mode. The syntax is:
-         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
-         * include all 1xxxx ports.
+         * Set the key store parameters.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Group: advanced
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder activePortRange(
-                String activePortRange) {
-            doSetProperty("activePortRange", activePortRange);
+        default FtpsEndpointConsumerBuilder ftpClientKeyStoreParameters(
+                Map<String, Object> ftpClientKeyStoreParameters) {
+            doSetProperty("ftpClientKeyStoreParameters", ftpClientKeyStoreParameters);
             return this;
         }
         /**
-         * Sets the connect timeout for waiting for a connection to be
-         * established Used by both FTPClient and JSCH.
+         * Set the key store parameters.
          * 
-         * The option is a: <code>int</code> type.
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Default: 10000
-         * Group: advanced
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder connectTimeout(
-                int connectTimeout) {
-            doSetProperty("connectTimeout", connectTimeout);
+        default FtpsEndpointConsumerBuilder ftpClientKeyStoreParameters(
+                String ftpClientKeyStoreParameters) {
+            doSetProperty("ftpClientKeyStoreParameters", ftpClientKeyStoreParameters);
             return this;
         }
         /**
-         * Sets the connect timeout for waiting for a connection to be
-         * established Used by both FTPClient and JSCH.
+         * Set the trust store parameters.
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Default: 10000
-         * Group: advanced
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder connectTimeout(
-                String connectTimeout) {
-            doSetProperty("connectTimeout", connectTimeout);
+        default FtpsEndpointConsumerBuilder ftpClientTrustStoreParameters(
+                Map<String, Object> ftpClientTrustStoreParameters) {
+            doSetProperty("ftpClientTrustStoreParameters", ftpClientTrustStoreParameters);
             return this;
         }
         /**
-         * Sets optional site command(s) to be executed after successful login.
-         * Multiple site commands can be separated using a new line character.
+         * Set the trust store parameters.
+         * 
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointConsumerBuilder ftpClientTrustStoreParameters(
+                String ftpClientTrustStoreParameters) {
+            doSetProperty("ftpClientTrustStoreParameters", ftpClientTrustStoreParameters);
+            return this;
+        }
+        /**
+         * Set the security mode (Implicit/Explicit). true - Implicit Mode /
+         * False - Explicit Mode.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: security
+         */
+        default FtpsEndpointConsumerBuilder implicit(boolean implicit) {
+            doSetProperty("implicit", implicit);
+            return this;
+        }
+        /**
+         * Set the security mode (Implicit/Explicit). true - Implicit Mode /
+         * False - Explicit Mode.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: security
+         */
+        default FtpsEndpointConsumerBuilder implicit(String implicit) {
+            doSetProperty("implicit", implicit);
+            return this;
+        }
+        /**
+         * Password to use for login.
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
-         * Group: advanced
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder siteCommand(
-                String siteCommand) {
-            doSetProperty("siteCommand", siteCommand);
+        default FtpsEndpointConsumerBuilder password(String password) {
+            doSetProperty("password", password);
             return this;
         }
         /**
-         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
-         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
-         * millis. Recommended option is to set this to 300000 so as not have a
-         * hanged connection. On SFTP this option is set as timeout on the JSCH
-         * Session instance.
+         * Set the underlying security protocol.
          * 
-         * The option is a: <code>int</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
-         * Default: 300000
-         * Group: advanced
+         * Default: TLSv1.2
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder soTimeout(int soTimeout) {
-            doSetProperty("soTimeout", soTimeout);
+        default FtpsEndpointConsumerBuilder securityProtocol(
+                String securityProtocol) {
+            doSetProperty("securityProtocol", securityProtocol);
             return this;
         }
         /**
-         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
-         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
-         * millis. Recommended option is to set this to 300000 so as not have a
-         * hanged connection. On SFTP this option is set as timeout on the JSCH
-         * Session instance.
+         * Gets the JSSE configuration that overrides any settings in
+         * FtpsEndpoint#ftpClientKeyStoreParameters,
+         * ftpClientTrustStoreParameters, and
+         * FtpsConfiguration#getSecurityProtocol().
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option is a:
+         * <code>org.apache.camel.support.jsse.SSLContextParameters</code> type.
          * 
-         * Default: 300000
-         * Group: advanced
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder soTimeout(String soTimeout) {
-            doSetProperty("soTimeout", soTimeout);
+        default FtpsEndpointConsumerBuilder sslContextParameters(
+                Object sslContextParameters) {
+            doSetProperty("sslContextParameters", sslContextParameters);
             return this;
         }
         /**
-         * Sets whether we should stepwise change directories while traversing
-         * file structures when downloading files, or as well when uploading a
-         * file to a directory. You can disable this if you for example are in a
-         * situation where you cannot change directory on the FTP server due
-         * security reasons.
+         * Gets the JSSE configuration that overrides any settings in
+         * FtpsEndpoint#ftpClientKeyStoreParameters,
+         * ftpClientTrustStoreParameters, and
+         * FtpsConfiguration#getSecurityProtocol().
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>org.apache.camel.support.jsse.SSLContextParameters</code> type.
          * 
-         * Default: true
-         * Group: advanced
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder stepwise(boolean stepwise) {
-            doSetProperty("stepwise", stepwise);
+        default FtpsEndpointConsumerBuilder sslContextParameters(
+                String sslContextParameters) {
+            doSetProperty("sslContextParameters", sslContextParameters);
             return this;
         }
         /**
-         * Sets whether we should stepwise change directories while traversing
-         * file structures when downloading files, or as well when uploading a
-         * file to a directory. You can disable this if you for example are in a
-         * situation where you cannot change directory on the FTP server due
-         * security reasons.
+         * Username to use for login.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
-         * Default: true
-         * Group: advanced
+         * Group: security
          */
-        default AdvancedFtpsEndpointConsumerBuilder stepwise(String stepwise) {
-            doSetProperty("stepwise", stepwise);
+        default FtpsEndpointConsumerBuilder username(String username) {
+            doSetProperty("username", username);
             return this;
         }
+    }
+
+    /**
+     * Advanced builder for endpoint consumers for the FTPS component.
+     */
+    public interface AdvancedFtpsEndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default FtpsEndpointConsumerBuilder basic() {
+            return (FtpsEndpointConsumerBuilder) 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.
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
-         * Group: advanced
+         * Group: common (advanced)
          */
-        default AdvancedFtpsEndpointConsumerBuilder throwExceptionOnConnectFailed(
-                boolean throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
+        default AdvancedFtpsEndpointConsumerBuilder fastExistsCheck(
+                boolean fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
             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.
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
-         * Group: advanced
+         * Group: common (advanced)
          */
-        default AdvancedFtpsEndpointConsumerBuilder throwExceptionOnConnectFailed(
-                String throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
+        default AdvancedFtpsEndpointConsumerBuilder fastExistsCheck(
+                String fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
             return this;
         }
         /**
-         * Sets the data timeout for waiting for reply Used only by FTPClient.
+         * Whether the FTP consumer should download the file. If this option is
+         * set to false, then the message body will be null, but the consumer
+         * will still trigger a Camel Exchange that has details about the file
+         * such as file name, file size, etc. It's just that the file will not
+         * be downloaded.
          * 
-         * The option is a: <code>int</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Default: 30000
-         * Group: advanced
+         * Default: false
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpsEndpointConsumerBuilder timeout(int timeout) {
-            doSetProperty("timeout", timeout);
+        default AdvancedFtpsEndpointConsumerBuilder download(boolean download) {
+            doSetProperty("download", download);
             return this;
         }
         /**
-         * Sets the data timeout for waiting for reply Used only by FTPClient.
+         * Whether the FTP consumer should download the file. If this option is
+         * set to false, then the message body will be null, but the consumer
+         * will still trigger a Camel Exchange that has details about the file
+         * such as file name, file size, etc. It's just that the file will not
+         * be downloaded.
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: 30000
-         * Group: advanced
+         * Default: false
+         * Group: consumer (advanced)
          */
-        default AdvancedFtpsEndpointConsumerBuilder timeout(String timeout) {
-            doSetProperty("timeout", timeout);
+        default AdvancedFtpsEndpointConsumerBuilder download(String download) {
+            doSetProperty("download", download);
             return this;
         }
         /**
@@ -2349,12 +2290,80 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
-         * A pluggable in-progress repository
-         * org.apache.camel.spi.IdempotentRepository. The in-progress repository
-         * is used to account the current in progress files being consumed. By
-         * default a memory based repository is used.
-         * 
-         * The option is a:
+         * Allows you to set how the consumer will handle subfolders and files
+         * in the path if the directory parser results in with absolute paths
+         * The reason for this is that some FTP servers may return file names
+         * with absolute paths, and if so then the FTP component needs to handle
+         * this by converting the returned path into a relative path.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpsEndpointConsumerBuilder handleDirectoryParserAbsoluteResult(
+                boolean handleDirectoryParserAbsoluteResult) {
+            doSetProperty("handleDirectoryParserAbsoluteResult", handleDirectoryParserAbsoluteResult);
+            return this;
+        }
+        /**
+         * Allows you to set how the consumer will handle subfolders and files
+         * in the path if the directory parser results in with absolute paths
+         * The reason for this is that some FTP servers may return file names
+         * with absolute paths, and if so then the FTP component needs to handle
+         * this by converting the returned path into a relative path.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpsEndpointConsumerBuilder handleDirectoryParserAbsoluteResult(
+                String handleDirectoryParserAbsoluteResult) {
+            doSetProperty("handleDirectoryParserAbsoluteResult", handleDirectoryParserAbsoluteResult);
+            return this;
+        }
+        /**
+         * Whether to ignore when (trying to list files in directories or when
+         * downloading a file), which does not exist or due to permission error.
+         * By default when a directory or file does not exists or insufficient
+         * permission, then an exception is thrown. Setting this option to true
+         * allows to ignore that instead.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpsEndpointConsumerBuilder ignoreFileNotFoundOrPermissionError(
+                boolean ignoreFileNotFoundOrPermissionError) {
+            doSetProperty("ignoreFileNotFoundOrPermissionError", ignoreFileNotFoundOrPermissionError);
+            return this;
+        }
+        /**
+         * Whether to ignore when (trying to list files in directories or when
+         * downloading a file), which does not exist or due to permission error.
+         * By default when a directory or file does not exists or insufficient
+         * permission, then an exception is thrown. Setting this option to true
+         * allows to ignore that instead.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpsEndpointConsumerBuilder ignoreFileNotFoundOrPermissionError(
+                String ignoreFileNotFoundOrPermissionError) {
+            doSetProperty("ignoreFileNotFoundOrPermissionError", ignoreFileNotFoundOrPermissionError);
+            return this;
+        }
+        /**
+         * A pluggable in-progress repository
+         * org.apache.camel.spi.IdempotentRepository. The in-progress repository
+         * is used to account the current in progress files being consumed. By
+         * default a memory based repository is used.
+         * 
+         * The option is a:
          * <code>org.apache.camel.spi.IdempotentRepository</code> type.
          * 
          * Group: consumer (advanced)
@@ -2496,6 +2505,56 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
+         * Whether to allow using LIST command when downloading a file. Default
+         * is true. In some use cases you may want to download a specific file
+         * and are not allowed to use the LIST command, and therefore you can
+         * set this option to false. Notice when using this option, then the
+         * specific file to download does not include meta-data information such
+         * as file size, timestamp, permissions etc, because those information
+         * is only possible to retrieve when LIST command is in use.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpsEndpointConsumerBuilder useList(boolean useList) {
+            doSetProperty("useList", useList);
+            return this;
+        }
+        /**
+         * Whether to allow using LIST command when downloading a file. Default
+         * is true. In some use cases you may want to download a specific file
+         * and are not allowed to use the LIST command, and therefore you can
+         * set this option to false. Notice when using this option, then the
+         * specific file to download does not include meta-data information such
+         * as file size, timestamp, permissions etc, because those information
+         * is only possible to retrieve when LIST command is in use.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: consumer (advanced)
+         */
+        default AdvancedFtpsEndpointConsumerBuilder useList(String useList) {
+            doSetProperty("useList", useList);
+            return this;
+        }
+        /**
+         * Set the client side port range in active mode. The syntax is:
+         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
+         * include all 1xxxx ports.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointConsumerBuilder activePortRange(
+                String activePortRange) {
+            doSetProperty("activePortRange", activePortRange);
+            return this;
+        }
+        /**
          * 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
@@ -2581,346 +2640,393 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * Sets the connect timeout for waiting for a connection to be
+         * established Used by both FTPClient and JSCH.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: false
+         * Default: 10000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointConsumerBuilder synchronous(
-                boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedFtpsEndpointConsumerBuilder connectTimeout(
+                int connectTimeout) {
+            doSetProperty("connectTimeout", connectTimeout);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * Sets the connect timeout for waiting for a connection to be
+         * established Used by both FTPClient and JSCH.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Default: false
+         * Default: 10000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointConsumerBuilder synchronous(
-                String synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedFtpsEndpointConsumerBuilder connectTimeout(
+                String connectTimeout) {
+            doSetProperty("connectTimeout", connectTimeout);
             return this;
         }
-    }
-
-    /**
-     * Builder for endpoint producers for the FTPS component.
-     */
-    public interface FtpsEndpointProducerBuilder
-            extends
-                EndpointProducerBuilder {
-        default AdvancedFtpsEndpointProducerBuilder advanced() {
-            return (AdvancedFtpsEndpointProducerBuilder) this;
-        }
         /**
-         * Specifies the file transfer mode, BINARY or ASCII. Default is ASCII
-         * (false).
+         * To use a custom instance of FTPClient.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a: <code>org.apache.commons.net.ftp.FTPClient</code>
+         * type.
          * 
-         * Default: false
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder binary(boolean binary) {
-            doSetProperty("binary", binary);
+        default AdvancedFtpsEndpointConsumerBuilder ftpClient(Object ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
             return this;
         }
         /**
-         * Specifies the file transfer mode, BINARY or ASCII. Default is ASCII
-         * (false).
+         * To use a custom instance of FTPClient.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClient</code> type.
          * 
-         * Default: false
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder binary(String binary) {
-            doSetProperty("binary", binary);
+        default AdvancedFtpsEndpointConsumerBuilder ftpClient(String ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
             return this;
         }
         /**
-         * Sets passive mode connections. Default is active mode connections.
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a:
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
          * 
-         * Default: false
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder passiveMode(boolean passiveMode) {
-            doSetProperty("passiveMode", passiveMode);
+        default AdvancedFtpsEndpointConsumerBuilder ftpClientConfig(
+                Object ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
             return this;
         }
         /**
-         * Sets passive mode connections. Default is active mode connections.
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
          * 
-         * Default: false
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder passiveMode(String passiveMode) {
-            doSetProperty("passiveMode", passiveMode);
+        default AdvancedFtpsEndpointConsumerBuilder ftpClientConfig(
+                String ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
             return this;
         }
         /**
-         * Sets the path separator to be used. UNIX = Uses unix style path
-         * separator Windows = Uses windows style path separator Auto = (is
-         * default) Use existing path separator in file name.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
-         * The option is a:
-         * <code>org.apache.camel.component.file.remote.RemoteFileConfiguration$PathSeparator</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Default: UNIX
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder separator(PathSeparator separator) {
-            doSetProperty("separator", separator);
+        default AdvancedFtpsEndpointConsumerBuilder ftpClientConfigParameters(
+                Map<String, Object> ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             return this;
         }
         /**
-         * Sets the path separator to be used. UNIX = Uses unix style path
-         * separator Windows = Uses windows style path separator Auto = (is
-         * default) Use existing path separator in file name.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
          * The option will be converted to a
-         * <code>org.apache.camel.component.file.remote.RemoteFileConfiguration$PathSeparator</code> type.
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Default: UNIX
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder separator(String separator) {
-            doSetProperty("separator", separator);
+        default AdvancedFtpsEndpointConsumerBuilder ftpClientConfigParameters(
+                String ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             return this;
         }
         /**
-         * Account to use for login.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Group: security
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder account(String account) {
-            doSetProperty("account", account);
+        default AdvancedFtpsEndpointConsumerBuilder ftpClientParameters(
+                Map<String, Object> ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * Use this option to disable default options when using secure data
-         * channel. This allows you to be in full control what the execPbsz and
-         * execProt setting should be used. Default is false.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Default: false
-         * Group: security
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder disableSecureDataChannelDefaults(
-                boolean disableSecureDataChannelDefaults) {
-            doSetProperty("disableSecureDataChannelDefaults", disableSecureDataChannelDefaults);
+        default AdvancedFtpsEndpointConsumerBuilder ftpClientParameters(
+                String ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * Use this option to disable default options when using secure data
-         * channel. This allows you to be in full control what the execPbsz and
-         * execProt setting should be used. Default is false.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: false
-         * Group: security
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder disableSecureDataChannelDefaults(
-                String disableSecureDataChannelDefaults) {
-            doSetProperty("disableSecureDataChannelDefaults", disableSecureDataChannelDefaults);
+        default AdvancedFtpsEndpointConsumerBuilder maximumReconnectAttempts(
+                int maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * When using secure data channel you can set the exec protection buffer
-         * size.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option is a: <code>java.lang.Long</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Group: security
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder execPbsz(Long execPbsz) {
-            doSetProperty("execPbsz", execPbsz);
+        default AdvancedFtpsEndpointConsumerBuilder maximumReconnectAttempts(
+                String maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * When using secure data channel you can set the exec protection buffer
-         * size.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option will be converted to a <code>java.lang.Long</code> type.
+         * The option is a: <code>long</code> type.
          * 
-         * Group: security
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder execPbsz(String execPbsz) {
-            doSetProperty("execPbsz", execPbsz);
+        default AdvancedFtpsEndpointConsumerBuilder reconnectDelay(
+                long reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
         /**
-         * The exec protection level PROT command. C - Clear S - Safe(SSL
-         * protocol only) E - Confidential(SSL protocol only) P - Private.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
+         * 
+         * The option will be converted to a <code>long</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointConsumerBuilder reconnectDelay(
+                String reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
+            return this;
+        }
+        /**
+         * Sets optional site command(s) to be executed after successful login.
+         * Multiple site commands can be separated using a new line character.
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
-         * Group: security
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder execProt(String execProt) {
-            doSetProperty("execProt", execProt);
+        default AdvancedFtpsEndpointConsumerBuilder siteCommand(
+                String siteCommand) {
+            doSetProperty("siteCommand", siteCommand);
             return this;
         }
         /**
-         * Set the key store parameters.
+         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
+         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
+         * millis. Recommended option is to set this to 300000 so as not have a
+         * hanged connection. On SFTP this option is set as timeout on the JSCH
+         * Session instance.
          * 
-         * The option is a: <code>java.util.Map&lt;java.lang.String,
-         * java.lang.Object&gt;</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Group: security
+         * Default: 300000
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder ftpClientKeyStoreParameters(
-                Map<String, Object> ftpClientKeyStoreParameters) {
-            doSetProperty("ftpClientKeyStoreParameters", ftpClientKeyStoreParameters);
+        default AdvancedFtpsEndpointConsumerBuilder soTimeout(int soTimeout) {
+            doSetProperty("soTimeout", soTimeout);
             return this;
         }
         /**
-         * Set the key store parameters.
+         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
+         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
+         * millis. Recommended option is to set this to 300000 so as not have a
+         * hanged connection. On SFTP this option is set as timeout on the JSCH
+         * Session instance.
          * 
-         * The option will be converted to a
-         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
-         * type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Group: security
+         * Default: 300000
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder ftpClientKeyStoreParameters(
-                String ftpClientKeyStoreParameters) {
-            doSetProperty("ftpClientKeyStoreParameters", ftpClientKeyStoreParameters);
+        default AdvancedFtpsEndpointConsumerBuilder soTimeout(String soTimeout) {
+            doSetProperty("soTimeout", soTimeout);
             return this;
         }
         /**
-         * Set the trust store parameters.
+         * Sets whether we should stepwise change directories while traversing
+         * file structures when downloading files, or as well when uploading a
+         * file to a directory. You can disable this if you for example are in a
+         * situation where you cannot change directory on the FTP server due
+         * security reasons.
          * 
-         * The option is a: <code>java.util.Map&lt;java.lang.String,
-         * java.lang.Object&gt;</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: true
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder ftpClientTrustStoreParameters(
-                Map<String, Object> ftpClientTrustStoreParameters) {
-            doSetProperty("ftpClientTrustStoreParameters", ftpClientTrustStoreParameters);
+        default AdvancedFtpsEndpointConsumerBuilder stepwise(boolean stepwise) {
+            doSetProperty("stepwise", stepwise);
             return this;
         }
         /**
-         * Set the trust store parameters.
+         * Sets whether we should stepwise change directories while traversing
+         * file structures when downloading files, or as well when uploading a
+         * file to a directory. You can disable this if you for example are in a
+         * situation where you cannot change directory on the FTP server due
+         * security reasons.
          * 
-         * The option will be converted to a
-         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
-         * type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: true
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder ftpClientTrustStoreParameters(
-                String ftpClientTrustStoreParameters) {
-            doSetProperty("ftpClientTrustStoreParameters", ftpClientTrustStoreParameters);
+        default AdvancedFtpsEndpointConsumerBuilder stepwise(String stepwise) {
+            doSetProperty("stepwise", stepwise);
             return this;
         }
         /**
-         * Set the security mode (Implicit/Explicit). true - Implicit Mode /
-         * False - Explicit Mode.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
-         * Group: security
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder implicit(boolean implicit) {
-            doSetProperty("implicit", implicit);
+        default AdvancedFtpsEndpointConsumerBuilder synchronous(
+                boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Set the security mode (Implicit/Explicit). true - Implicit Mode /
-         * False - Explicit Mode.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
-         * Group: security
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder implicit(String implicit) {
-            doSetProperty("implicit", implicit);
+        default AdvancedFtpsEndpointConsumerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Password to use for login.
+         * 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>java.lang.String</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder password(String password) {
-            doSetProperty("password", password);
+        default AdvancedFtpsEndpointConsumerBuilder throwExceptionOnConnectFailed(
+                boolean throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
             return this;
         }
         /**
-         * Set the underlying security protocol.
+         * 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>java.lang.String</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: TLSv1.2
-         * Group: security
+         * Default: false
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder securityProtocol(
-                String securityProtocol) {
-            doSetProperty("securityProtocol", securityProtocol);
+        default AdvancedFtpsEndpointConsumerBuilder throwExceptionOnConnectFailed(
+                String throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
             return this;
         }
         /**
-         * Gets the JSSE configuration that overrides any settings in
-         * FtpsEndpoint#ftpClientKeyStoreParameters,
-         * ftpClientTrustStoreParameters, and
-         * FtpsConfiguration#getSecurityProtocol().
+         * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
-         * The option is a:
-         * <code>org.apache.camel.support.jsse.SSLContextParameters</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Group: security
+         * Default: 30000
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder sslContextParameters(
-                Object sslContextParameters) {
-            doSetProperty("sslContextParameters", sslContextParameters);
+        default AdvancedFtpsEndpointConsumerBuilder timeout(int timeout) {
+            doSetProperty("timeout", timeout);
             return this;
         }
         /**
-         * Gets the JSSE configuration that overrides any settings in
-         * FtpsEndpoint#ftpClientKeyStoreParameters,
-         * ftpClientTrustStoreParameters, and
-         * FtpsConfiguration#getSecurityProtocol().
+         * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.support.jsse.SSLContextParameters</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Group: security
+         * Default: 30000
+         * Group: advanced
          */
-        default FtpsEndpointProducerBuilder sslContextParameters(
-                String sslContextParameters) {
-            doSetProperty("sslContextParameters", sslContextParameters);
+        default AdvancedFtpsEndpointConsumerBuilder timeout(String timeout) {
+            doSetProperty("timeout", timeout);
+            return this;
+        }
+    }
+
+    /**
+     * Builder for endpoint producers for the FTPS component.
+     */
+    public interface FtpsEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default AdvancedFtpsEndpointProducerBuilder advanced() {
+            return (AdvancedFtpsEndpointProducerBuilder) this;
+        }
+        /**
+         * Specifies the file transfer mode, BINARY or ASCII. Default is ASCII
+         * (false).
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder binary(boolean binary) {
+            doSetProperty("binary", binary);
             return this;
         }
         /**
-         * Username to use for login.
+         * Specifies the file transfer mode, BINARY or ASCII. Default is ASCII
+         * (false).
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Group: security
+         * Default: false
+         * Group: common
          */
-        default FtpsEndpointProducerBuilder username(String username) {
-            doSetProperty("username", username);
+        default FtpsEndpointProducerBuilder binary(String binary) {
+            doSetProperty("binary", binary);
             return this;
         }
         /**
@@ -2943,6 +3049,36 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder disconnect(boolean disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder disconnect(String disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
          * Producer: If provided, then Camel will write a 2nd done file when the
          * original file has been written. The done file will be empty. This
          * option configures what file name to use. Either you can specify a
@@ -2952,7 +3088,7 @@ public interface FtpsEndpointBuilderFactory {
          * This option configures what file name to use. Either you can specify
          * a fixed name. Or you can use dynamic placeholders.The done file is
          * always expected in the same folder as the original file. Only
-         * ${file.name} and ${file.name.noext} is supported as dynamic
+         * ${file.name} and ${file.name.next} is supported as dynamic
          * placeholders.
          * 
          * The option is a: <code>java.lang.String</code> type.
@@ -3017,27 +3153,168 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
-         * What to do if a file already exists with the same name. Override,
-         * which is the default, replaces the existing file. \n\n - Append -
-         * adds content to the existing file.\n - Fail - throws a
-         * GenericFileOperationException, indicating that there is already an
-         * existing file.\n - Ignore - silently ignores the problem and does not
-         * override the existing file, but assumes everything is okay.\n - Move
-         * - option requires to use the moveExisting option to be configured as
-         * well. The option eagerDeleteTargetFile can be used to control what to
-         * do if an moving the file, and there exists already an existing file,
-         * otherwise causing the move operation to fail. The Move option will
-         * move any existing files, before writing the target file.\n -
-         * TryRename is only applicable if tempFileName option is in use. This
-         * allows to try renaming the file from the temporary name to the actual
-         * name, without doing any exists check. This check may be faster on
-         * some file systems and especially FTP servers.
+         * Sets passive mode connections. Default is active mode connections.
          * 
-         * The option is a:
-         * <code>org.apache.camel.component.file.GenericFileExist</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Default: Override
-         * Group: producer
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder passiveMode(boolean passiveMode) {
+            doSetProperty("passiveMode", passiveMode);
+            return this;
+        }
+        /**
+         * Sets passive mode connections. Default is active mode connections.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder passiveMode(String passiveMode) {
+            doSetProperty("passiveMode", passiveMode);
+            return this;
+        }
+        /**
+         * Sets the path separator to be used. UNIX = Uses unix style path
+         * separator Windows = Uses windows style path separator Auto = (is
+         * default) Use existing path separator in file name.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.file.remote.RemoteFileConfiguration$PathSeparator</code> type.
+         * 
+         * Default: UNIX
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder separator(PathSeparator separator) {
+            doSetProperty("separator", separator);
+            return this;
+        }
+        /**
+         * Sets the path separator to be used. UNIX = Uses unix style path
+         * separator Windows = Uses windows style path separator Auto = (is
+         * default) Use existing path separator in file name.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.component.file.remote.RemoteFileConfiguration$PathSeparator</code> type.
+         * 
+         * Default: UNIX
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder separator(String separator) {
+            doSetProperty("separator", separator);
+            return this;
+        }
+        /**
+         * Configures the interval in seconds to use when logging the progress
+         * of upload and download operations that are in-flight. This is used
+         * for logging progress when operations takes longer time.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Default: 5
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder transferLoggingIntervalSeconds(
+                int transferLoggingIntervalSeconds) {
+            doSetProperty("transferLoggingIntervalSeconds", transferLoggingIntervalSeconds);
+            return this;
+        }
+        /**
+         * Configures the interval in seconds to use when logging the progress
+         * of upload and download operations that are in-flight. This is used
+         * for logging progress when operations takes longer time.
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Default: 5
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder transferLoggingIntervalSeconds(
+                String transferLoggingIntervalSeconds) {
+            doSetProperty("transferLoggingIntervalSeconds", transferLoggingIntervalSeconds);
+            return this;
+        }
+        /**
+         * Configure the logging level to use when logging the progress of
+         * upload and download operations.
+         * 
+         * The option is a: <code>org.apache.camel.LoggingLevel</code> type.
+         * 
+         * Default: DEBUG
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder transferLoggingLevel(
+                LoggingLevel transferLoggingLevel) {
+            doSetProperty("transferLoggingLevel", transferLoggingLevel);
+            return this;
+        }
+        /**
+         * Configure the logging level to use when logging the progress of
+         * upload and download operations.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.LoggingLevel</code> type.
+         * 
+         * Default: DEBUG
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder transferLoggingLevel(
+                String transferLoggingLevel) {
+            doSetProperty("transferLoggingLevel", transferLoggingLevel);
+            return this;
+        }
+        /**
+         * Configures whether the perform verbose (fine grained) logging of the
+         * progress of upload and download operations.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder transferLoggingVerbose(
+                boolean transferLoggingVerbose) {
+            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
+            return this;
+        }
+        /**
+         * Configures whether the perform verbose (fine grained) logging of the
+         * progress of upload and download operations.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointProducerBuilder transferLoggingVerbose(
+                String transferLoggingVerbose) {
+            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
+            return this;
+        }
+        /**
+         * What to do if a file already exists with the same name. Override,
+         * which is the default, replaces the existing file. - Append - adds
+         * content to the existing file. - Fail - throws a
+         * GenericFileOperationException, indicating that there is already an
+         * existing file. - Ignore - silently ignores the problem and does not
+         * override the existing file, but assumes everything is okay. - Move -
+         * option requires to use the moveExisting option to be configured as
+         * well. The option eagerDeleteTargetFile can be used to control what to
+         * do if an moving the file, and there exists already an existing file,
+         * otherwise causing the move operation to fail. The Move option will
+         * move any existing files, before writing the target file. - TryRename
+         * is only applicable if tempFileName option is in use. This allows to
+         * try renaming the file from the temporary name to the actual name,
+         * without doing any exists check. This check may be faster on some file
+         * systems and especially FTP servers.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.file.GenericFileExist</code> type.
+         * 
+         * Default: Override
+         * Group: producer
          */
         default FtpsEndpointProducerBuilder fileExist(GenericFileExist fileExist) {
             doSetProperty("fileExist", fileExist);
@@ -3045,20 +3322,20 @@ public interface FtpsEndpointBuilderFactory {
         }
         /**
          * What to do if a file already exists with the same name. Override,
-         * which is the default, replaces the existing file. \n\n - Append -
-         * adds content to the existing file.\n - Fail - throws a
+         * which is the default, replaces the existing file. - Append - adds
+         * content to the existing file. - Fail - throws a
          * GenericFileOperationException, indicating that there is already an
-         * existing file.\n - Ignore - silently ignores the problem and does not
-         * override the existing file, but assumes everything is okay.\n - Move
-         * - option requires to use the moveExisting option to be configured as
+         * existing file. - Ignore - silently ignores the problem and does not
+         * override the existing file, but assumes everything is okay. - Move -
+         * option requires to use the moveExisting option to be configured as
          * well. The option eagerDeleteTargetFile can be used to control what to
          * do if an moving the file, and there exists already an existing file,
          * otherwise causing the move operation to fail. The Move option will
-         * move any existing files, before writing the target file.\n -
-         * TryRename is only applicable if tempFileName option is in use. This
-         * allows to try renaming the file from the temporary name to the actual
-         * name, without doing any exists check. This check may be faster on
-         * some file systems and especially FTP servers.
+         * move any existing files, before writing the target file. - TryRename
+         * is only applicable if tempFileName option is in use. This allows to
+         * try renaming the file from the temporary name to the actual name,
+         * without doing any exists check. This check may be faster on some file
+         * systems and especially FTP servers.
          * 
          * The option will be converted to a
          * <code>org.apache.camel.component.file.GenericFileExist</code> type.
@@ -3269,72 +3546,607 @@ public interface FtpsEndpointBuilderFactory {
             doSetProperty("tempPrefix", tempPrefix);
             return this;
         }
-    }
-
-    /**
-     * Advanced builder for endpoint producers for the FTPS component.
-     */
-    public interface AdvancedFtpsEndpointProducerBuilder
-            extends
-                EndpointProducerBuilder {
-        default FtpsEndpointProducerBuilder basic() {
-            return (FtpsEndpointProducerBuilder) this;
+        /**
+         * Account to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder account(String account) {
+            doSetProperty("account", account);
+            return this;
+        }
+        /**
+         * Use this option to disable default options when using secure data
+         * channel. This allows you to be in full control what the execPbsz and
+         * execProt setting should be used. Default is false.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder disableSecureDataChannelDefaults(
+                boolean disableSecureDataChannelDefaults) {
+            doSetProperty("disableSecureDataChannelDefaults", disableSecureDataChannelDefaults);
+            return this;
+        }
+        /**
+         * Use this option to disable default options when using secure data
+         * channel. This allows you to be in full control what the execPbsz and
+         * execProt setting should be used. Default is false.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder disableSecureDataChannelDefaults(
+                String disableSecureDataChannelDefaults) {
+            doSetProperty("disableSecureDataChannelDefaults", disableSecureDataChannelDefaults);
+            return this;
+        }
+        /**
+         * When using secure data channel you can set the exec protection buffer
+         * size.
+         * 
+         * The option is a: <code>java.lang.Long</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder execPbsz(Long execPbsz) {
+            doSetProperty("execPbsz", execPbsz);
+            return this;
+        }
+        /**
+         * When using secure data channel you can set the exec protection buffer
+         * size.
+         * 
+         * The option will be converted to a <code>java.lang.Long</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder execPbsz(String execPbsz) {
+            doSetProperty("execPbsz", execPbsz);
+            return this;
+        }
+        /**
+         * The exec protection level PROT command. C - Clear S - Safe(SSL
+         * protocol only) E - Confidential(SSL protocol only) P - Private.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder execProt(String execProt) {
+            doSetProperty("execProt", execProt);
+            return this;
+        }
+        /**
+         * Set the key store parameters.
+         * 
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder ftpClientKeyStoreParameters(
+                Map<String, Object> ftpClientKeyStoreParameters) {
+            doSetProperty("ftpClientKeyStoreParameters", ftpClientKeyStoreParameters);
+            return this;
+        }
+        /**
+         * Set the key store parameters.
+         * 
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder ftpClientKeyStoreParameters(
+                String ftpClientKeyStoreParameters) {
+            doSetProperty("ftpClientKeyStoreParameters", ftpClientKeyStoreParameters);
+            return this;
+        }
+        /**
+         * Set the trust store parameters.
+         * 
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder ftpClientTrustStoreParameters(
+                Map<String, Object> ftpClientTrustStoreParameters) {
+            doSetProperty("ftpClientTrustStoreParameters", ftpClientTrustStoreParameters);
+            return this;
+        }
+        /**
+         * Set the trust store parameters.
+         * 
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder ftpClientTrustStoreParameters(
+                String ftpClientTrustStoreParameters) {
+            doSetProperty("ftpClientTrustStoreParameters", ftpClientTrustStoreParameters);
+            return this;
+        }
+        /**
+         * Set the security mode (Implicit/Explicit). true - Implicit Mode /
+         * False - Explicit Mode.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder implicit(boolean implicit) {
+            doSetProperty("implicit", implicit);
+            return this;
+        }
+        /**
+         * Set the security mode (Implicit/Explicit). true - Implicit Mode /
+         * False - Explicit Mode.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder implicit(String implicit) {
+            doSetProperty("implicit", implicit);
+            return this;
+        }
+        /**
+         * Password to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder password(String password) {
+            doSetProperty("password", password);
+            return this;
+        }
+        /**
+         * Set the underlying security protocol.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Default: TLSv1.2
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder securityProtocol(
+                String securityProtocol) {
+            doSetProperty("securityProtocol", securityProtocol);
+            return this;
+        }
+        /**
+         * Gets the JSSE configuration that overrides any settings in
+         * FtpsEndpoint#ftpClientKeyStoreParameters,
+         * ftpClientTrustStoreParameters, and
+         * FtpsConfiguration#getSecurityProtocol().
+         * 
+         * The option is a:
+         * <code>org.apache.camel.support.jsse.SSLContextParameters</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder sslContextParameters(
+                Object sslContextParameters) {
+            doSetProperty("sslContextParameters", sslContextParameters);
+            return this;
+        }
+        /**
+         * Gets the JSSE configuration that overrides any settings in
+         * FtpsEndpoint#ftpClientKeyStoreParameters,
+         * ftpClientTrustStoreParameters, and
+         * FtpsConfiguration#getSecurityProtocol().
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.support.jsse.SSLContextParameters</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder sslContextParameters(
+                String sslContextParameters) {
+            doSetProperty("sslContextParameters", sslContextParameters);
+            return this;
+        }
+        /**
+         * Username to use for login.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: security
+         */
+        default FtpsEndpointProducerBuilder username(String username) {
+            doSetProperty("username", username);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint producers for the FTPS component.
+     */
+    public interface AdvancedFtpsEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default FtpsEndpointProducerBuilder basic() {
+            return (FtpsEndpointProducerBuilder) this;
+        }
+        /**
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder fastExistsCheck(
+                boolean fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder fastExistsCheck(
+                String fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * 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 component, a
+         * GenericFileWriteException of 'Cannot write null body to file.' will
+         * be thrown. If the fileExist option is set to 'Override', then the
+         * file will be truncated, and if set to append the file will remain
+         * unchanged.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder allowNullBody(
+                boolean allowNullBody) {
+            doSetProperty("allowNullBody", allowNullBody);
+            return this;
+        }
+        /**
+         * 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 component, a
+         * GenericFileWriteException of 'Cannot write null body to file.' will
+         * be thrown. If the fileExist option is set to 'Override', then the
+         * file will be truncated, and if set to append the file will remain
+         * unchanged.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder allowNullBody(
+                String allowNullBody) {
+            doSetProperty("allowNullBody", allowNullBody);
+            return this;
+        }
+        /**
+         * Allows you to set chmod on the stored file. For example chmod=640.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder chmod(String chmod) {
+            doSetProperty("chmod", chmod);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after a
+         * Batch upload is complete. disconnectOnBatchComplete will only
+         * disconnect the current connection to the FTP server.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder disconnectOnBatchComplete(
+                boolean disconnectOnBatchComplete) {
+            doSetProperty("disconnectOnBatchComplete", disconnectOnBatchComplete);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after a
+         * Batch upload is complete. disconnectOnBatchComplete will only
+         * disconnect the current connection to the FTP server.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder disconnectOnBatchComplete(
+                String disconnectOnBatchComplete) {
+            doSetProperty("disconnectOnBatchComplete", disconnectOnBatchComplete);
+            return this;
+        }
+        /**
+         * 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 this to disable (set it to
+         * false) deleting the target file before the temp file is written. For
+         * example you may write big files and want the target file to exists
+         * during the temp file is being written. This ensure the target file is
+         * only deleted until the very last moment, just before the temp file is
+         * being renamed to the target filename. This option is also used to
+         * control whether to delete any existing files when fileExist=Move is
+         * enabled, and an existing file exists. If this option
+         * copyAndDeleteOnRenameFails false, then an exception will be thrown if
+         * an existing file existed, if its true, then the existing file is
+         * deleted before the move operation.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder eagerDeleteTargetFile(
+                boolean eagerDeleteTargetFile) {
+            doSetProperty("eagerDeleteTargetFile", eagerDeleteTargetFile);
+            return this;
+        }
+        /**
+         * 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 this to disable (set it to
+         * false) deleting the target file before the temp file is written. For
+         * example you may write big files and want the target file to exists
+         * during the temp file is being written. This ensure the target file is
+         * only deleted until the very last moment, just before the temp file is
+         * being renamed to the target filename. This option is also used to
+         * control whether to delete any existing files when fileExist=Move is
+         * enabled, and an existing file exists. If this option
+         * copyAndDeleteOnRenameFails false, then an exception will be thrown if
+         * an existing file existed, if its true, then the existing file is
+         * deleted before the move operation.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder eagerDeleteTargetFile(
+                String eagerDeleteTargetFile) {
+            doSetProperty("eagerDeleteTargetFile", eagerDeleteTargetFile);
+            return this;
+        }
+        /**
+         * Will keep the last modified timestamp from the source file (if any).
+         * Will use the Exchange.FILE_LAST_MODIFIED header to located the
+         * timestamp. This header can contain either a java.util.Date or long
+         * with the timestamp. If the timestamp exists and the option is enabled
+         * it will set this timestamp on the written file. Note: This option
+         * only applies to the file producer. You cannot use this option with
+         * any of the ftp producers.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder keepLastModified(
+                boolean keepLastModified) {
+            doSetProperty("keepLastModified", keepLastModified);
+            return this;
+        }
+        /**
+         * Will keep the last modified timestamp from the source file (if any).
+         * Will use the Exchange.FILE_LAST_MODIFIED header to located the
+         * timestamp. This header can contain either a java.util.Date or long
+         * with the timestamp. If the timestamp exists and the option is enabled
+         * it will set this timestamp on the written file. Note: This option
+         * only applies to the file producer. You cannot use this option with
+         * any of the ftp producers.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder keepLastModified(
+                String keepLastModified) {
+            doSetProperty("keepLastModified", keepLastModified);
+            return this;
+        }
+        /**
+         * Strategy (Custom Strategy) used to move file with special naming
+         * token to use when fileExist=Move is configured. By default, there is
+         * an implementation used if no custom strategy is provided.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.file.strategy.FileMoveExistingStrategy</code> type.
+         * 
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder moveExistingFileStrategy(
+                Object moveExistingFileStrategy) {
+            doSetProperty("moveExistingFileStrategy", moveExistingFileStrategy);
+            return this;
+        }
+        /**
+         * Strategy (Custom Strategy) used to move file with special naming
+         * token to use when fileExist=Move is configured. By default, there is
+         * an implementation used if no custom strategy is provided.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.component.file.strategy.FileMoveExistingStrategy</code> type.
+         * 
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder moveExistingFileStrategy(
+                String moveExistingFileStrategy) {
+            doSetProperty("moveExistingFileStrategy", moveExistingFileStrategy);
+            return this;
+        }
+        /**
+         * Whether to send a noop command as a pre-write check before uploading
+         * files to the FTP server. This is enabled by default as a validation
+         * of the connection is still valid, which allows to silently re-connect
+         * to be able to upload the file. However if this causes problems, you
+         * can turn this option off.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder sendNoop(boolean sendNoop) {
+            doSetProperty("sendNoop", sendNoop);
+            return this;
+        }
+        /**
+         * Whether to send a noop command as a pre-write check before uploading
+         * files to the FTP server. This is enabled by default as a validation
+         * of the connection is still valid, which allows to silently re-connect
+         * to be able to upload the file. However if this causes problems, you
+         * can turn this option off.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: producer (advanced)
+         */
+        default AdvancedFtpsEndpointProducerBuilder sendNoop(String sendNoop) {
+            doSetProperty("sendNoop", sendNoop);
+            return this;
+        }
+        /**
+         * Set the client side port range in active mode. The syntax is:
+         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
+         * include all 1xxxx ports.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointProducerBuilder activePortRange(
+                String activePortRange) {
+            doSetProperty("activePortRange", activePortRange);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointProducerBuilder autoCreate(
+                boolean autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointProducerBuilder autoCreate(String autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
+            return this;
         }
         /**
-         * Allows you to set chmod on the stored file. For example chmod=640.
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Group: producer (advanced)
+         * Default: false
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder chmod(String chmod) {
-            doSetProperty("chmod", chmod);
+        default AdvancedFtpsEndpointProducerBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
         }
         /**
-         * Whether to send a noop command as a pre-write check before uploading
-         * files to the FTP server. This is enabled by default as a validation
-         * of the connection is still valid, which allows to silently re-connect
-         * to be able to upload the file. However if this causes problems, you
-         * can turn this option off.
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: true
-         * Group: producer (advanced)
+         * Default: false
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder sendNoop(boolean sendNoop) {
-            doSetProperty("sendNoop", sendNoop);
+        default AdvancedFtpsEndpointProducerBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
         }
         /**
-         * Whether to send a noop command as a pre-write check before uploading
-         * files to the FTP server. This is enabled by default as a validation
-         * of the connection is still valid, which allows to silently re-connect
-         * to be able to upload the file. However if this causes problems, you
-         * can turn this option off.
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: true
-         * Group: producer (advanced)
+         * Default: 131072
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder sendNoop(String sendNoop) {
-            doSetProperty("sendNoop", sendNoop);
+        default AdvancedFtpsEndpointProducerBuilder bufferSize(int bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
             return this;
         }
         /**
-         * Set the client side port range in active mode. The syntax is:
-         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
-         * include all 1xxxx ports.
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
+         * Default: 131072
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder activePortRange(
-                String activePortRange) {
-            doSetProperty("activePortRange", activePortRange);
+        default AdvancedFtpsEndpointProducerBuilder bufferSize(String bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
             return this;
         }
         /**
@@ -3366,407 +4178,328 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Sets optional site command(s) to be executed after successful login.
-         * Multiple site commands can be separated using a new line character.
+         * To use a custom instance of FTPClient.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>org.apache.commons.net.ftp.FTPClient</code>
+         * type.
          * 
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder siteCommand(
-                String siteCommand) {
-            doSetProperty("siteCommand", siteCommand);
+        default AdvancedFtpsEndpointProducerBuilder ftpClient(Object ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
             return this;
         }
         /**
-         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
-         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
-         * millis. Recommended option is to set this to 300000 so as not have a
-         * hanged connection. On SFTP this option is set as timeout on the JSCH
-         * Session instance.
+         * To use a custom instance of FTPClient.
          * 
-         * The option is a: <code>int</code> type.
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClient</code> type.
          * 
-         * Default: 300000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder soTimeout(int soTimeout) {
-            doSetProperty("soTimeout", soTimeout);
+        default AdvancedFtpsEndpointProducerBuilder ftpClient(String ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
             return this;
         }
         /**
-         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
-         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
-         * millis. Recommended option is to set this to 300000 so as not have a
-         * hanged connection. On SFTP this option is set as timeout on the JSCH
-         * Session instance.
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option is a:
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
          * 
-         * Default: 300000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder soTimeout(String soTimeout) {
-            doSetProperty("soTimeout", soTimeout);
+        default AdvancedFtpsEndpointProducerBuilder ftpClientConfig(
+                Object ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
             return this;
         }
         /**
-         * Sets whether we should stepwise change directories while traversing
-         * file structures when downloading files, or as well when uploading a
-         * file to a directory. You can disable this if you for example are in a
-         * situation where you cannot change directory on the FTP server due
-         * security reasons.
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
          * 
-         * Default: true
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder stepwise(boolean stepwise) {
-            doSetProperty("stepwise", stepwise);
+        default AdvancedFtpsEndpointProducerBuilder ftpClientConfig(
+                String ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
             return this;
         }
         /**
-         * Sets whether we should stepwise change directories while traversing
-         * file structures when downloading files, or as well when uploading a
-         * file to a directory. You can disable this if you for example are in a
-         * situation where you cannot change directory on the FTP server due
-         * security reasons.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Default: true
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder stepwise(String stepwise) {
-            doSetProperty("stepwise", stepwise);
+        default AdvancedFtpsEndpointProducerBuilder ftpClientConfigParameters(
+                Map<String, Object> ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             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.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder throwExceptionOnConnectFailed(
-                boolean throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
+        default AdvancedFtpsEndpointProducerBuilder ftpClientConfigParameters(
+                String ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             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.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder throwExceptionOnConnectFailed(
-                String throwExceptionOnConnectFailed) {
-            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
+        default AdvancedFtpsEndpointProducerBuilder ftpClientParameters(
+                Map<String, Object> ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * Sets the data timeout for waiting for reply Used only by FTPClient.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
-         * The option is a: <code>int</code> type.
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder timeout(int timeout) {
-            doSetProperty("timeout", timeout);
+        default AdvancedFtpsEndpointProducerBuilder ftpClientParameters(
+                String ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * Sets the data timeout for waiting for reply Used only by FTPClient.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder timeout(String timeout) {
-            doSetProperty("timeout", timeout);
-            return this;
-        }
-        /**
-         * 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 component, a
-         * GenericFileWriteException of 'Cannot write null body to file.' will
-         * be thrown. If the fileExist option is set to 'Override', then the
-         * file will be truncated, and if set to append the file will remain
-         * unchanged.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: producer (advanced)
-         */
-        default AdvancedFtpsEndpointProducerBuilder allowNullBody(
-                boolean allowNullBody) {
-            doSetProperty("allowNullBody", allowNullBody);
-            return this;
-        }
-        /**
-         * 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 component, a
-         * GenericFileWriteException of 'Cannot write null body to file.' will
-         * be thrown. If the fileExist option is set to 'Override', then the
-         * file will be truncated, and if set to append the file will remain
-         * unchanged.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: producer (advanced)
-         */
-        default AdvancedFtpsEndpointProducerBuilder allowNullBody(
-                String allowNullBody) {
-            doSetProperty("allowNullBody", allowNullBody);
+        default AdvancedFtpsEndpointProducerBuilder maximumReconnectAttempts(
+                int maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * 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 this to disable (set it to
-         * false) deleting the target file before the temp file is written. For
-         * example you may write big files and want the target file to exists
-         * during the temp file is being written. This ensure the target file is
-         * only deleted until the very last moment, just before the temp file is
-         * being renamed to the target filename. This option is also used to
-         * control whether to delete any existing files when fileExist=Move is
-         * enabled, and an existing file exists. If this option
-         * copyAndDeleteOnRenameFails false, then an exception will be thrown if
-         * an existing file existed, if its true, then the existing file is
-         * deleted before the move operation.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Default: true
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder eagerDeleteTargetFile(
-                boolean eagerDeleteTargetFile) {
-            doSetProperty("eagerDeleteTargetFile", eagerDeleteTargetFile);
+        default AdvancedFtpsEndpointProducerBuilder maximumReconnectAttempts(
+                String maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * 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 this to disable (set it to
-         * false) deleting the target file before the temp file is written. For
-         * example you may write big files and want the target file to exists
-         * during the temp file is being written. This ensure the target file is
-         * only deleted until the very last moment, just before the temp file is
-         * being renamed to the target filename. This option is also used to
-         * control whether to delete any existing files when fileExist=Move is
-         * enabled, and an existing file exists. If this option
-         * copyAndDeleteOnRenameFails false, then an exception will be thrown if
-         * an existing file existed, if its true, then the existing file is
-         * deleted before the move operation.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>long</code> type.
          * 
-         * Default: true
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder eagerDeleteTargetFile(
-                String eagerDeleteTargetFile) {
-            doSetProperty("eagerDeleteTargetFile", eagerDeleteTargetFile);
+        default AdvancedFtpsEndpointProducerBuilder reconnectDelay(
+                long reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
         /**
-         * Will keep the last modified timestamp from the source file (if any).
-         * Will use the Exchange.FILE_LAST_MODIFIED header to located the
-         * timestamp. This header can contain either a java.util.Date or long
-         * with the timestamp. If the timestamp exists and the option is enabled
-         * it will set this timestamp on the written file. Note: This option
-         * only applies to the file producer. You cannot use this option with
-         * any of the ftp producers.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option will be converted to a <code>long</code> type.
          * 
-         * Default: false
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder keepLastModified(
-                boolean keepLastModified) {
-            doSetProperty("keepLastModified", keepLastModified);
-            return this;
-        }
-        /**
-         * Will keep the last modified timestamp from the source file (if any).
-         * Will use the Exchange.FILE_LAST_MODIFIED header to located the
-         * timestamp. This header can contain either a java.util.Date or long
-         * with the timestamp. If the timestamp exists and the option is enabled
-         * it will set this timestamp on the written file. Note: This option
-         * only applies to the file producer. You cannot use this option with
-         * any of the ftp producers.
+        default AdvancedFtpsEndpointProducerBuilder reconnectDelay(
+                String reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
+            return this;
+        }
+        /**
+         * Sets optional site command(s) to be executed after successful login.
+         * Multiple site commands can be separated using a new line character.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
-         * Default: false
-         * Group: producer (advanced)
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder keepLastModified(
-                String keepLastModified) {
-            doSetProperty("keepLastModified", keepLastModified);
+        default AdvancedFtpsEndpointProducerBuilder siteCommand(
+                String siteCommand) {
+            doSetProperty("siteCommand", siteCommand);
             return this;
         }
         /**
-         * Strategy (Custom Strategy) used to move file with special naming
-         * token to use when fileExist=Move is configured. By default, there is
-         * an implementation used if no custom strategy is provided.
+         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
+         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
+         * millis. Recommended option is to set this to 300000 so as not have a
+         * hanged connection. On SFTP this option is set as timeout on the JSCH
+         * Session instance.
          * 
-         * The option is a:
-         * <code>org.apache.camel.component.file.strategy.FileMoveExistingStrategy</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Group: producer (advanced)
+         * Default: 300000
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder moveExistingFileStrategy(
-                Object moveExistingFileStrategy) {
-            doSetProperty("moveExistingFileStrategy", moveExistingFileStrategy);
+        default AdvancedFtpsEndpointProducerBuilder soTimeout(int soTimeout) {
+            doSetProperty("soTimeout", soTimeout);
             return this;
         }
         /**
-         * Strategy (Custom Strategy) used to move file with special naming
-         * token to use when fileExist=Move is configured. By default, there is
-         * an implementation used if no custom strategy is provided.
+         * Sets the so timeout FTP and FTPS Only for Camel 2.4. SFTP for Camel
+         * 2.14.3/2.15.3/2.16 onwards. Is the SocketOptions.SO_TIMEOUT value in
+         * millis. Recommended option is to set this to 300000 so as not have a
+         * hanged connection. On SFTP this option is set as timeout on the JSCH
+         * Session instance.
          * 
-         * The option will be converted to a
-         * <code>org.apache.camel.component.file.strategy.FileMoveExistingStrategy</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Group: producer (advanced)
+         * Default: 300000
+         * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder moveExistingFileStrategy(
-                String moveExistingFileStrategy) {
-            doSetProperty("moveExistingFileStrategy", moveExistingFileStrategy);
+        default AdvancedFtpsEndpointProducerBuilder soTimeout(String soTimeout) {
+            doSetProperty("soTimeout", soTimeout);
             return this;
         }
         /**
-         * 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.
+         * Sets whether we should stepwise change directories while traversing
+         * file structures when downloading files, or as well when uploading a
+         * file to a directory. You can disable this if you for example are in a
+         * situation where you cannot change directory on the FTP server due
+         * security reasons.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: true
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder autoCreate(
-                boolean autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
+        default AdvancedFtpsEndpointProducerBuilder stepwise(boolean stepwise) {
+            doSetProperty("stepwise", stepwise);
             return this;
         }
         /**
-         * 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.
+         * Sets whether we should stepwise change directories while traversing
+         * file structures when downloading files, or as well when uploading a
+         * file to a directory. You can disable this if you for example are in a
+         * situation where you cannot change directory on the FTP server due
+         * security reasons.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: true
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder autoCreate(String autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
+        default AdvancedFtpsEndpointProducerBuilder stepwise(String stepwise) {
+            doSetProperty("stepwise", stepwise);
             return this;
         }
         /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder basicPropertyBinding(
-                boolean basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+        default AdvancedFtpsEndpointProducerBuilder synchronous(
+                boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder basicPropertyBinding(
-                String basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+        default AdvancedFtpsEndpointProducerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
+         * 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>int</code> type.
+         * The option is a: <code>boolean</code> type.
          * 
-         * Default: 131072
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder bufferSize(int bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
+        default AdvancedFtpsEndpointProducerBuilder throwExceptionOnConnectFailed(
+                boolean throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
             return this;
         }
         /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
+         * 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>int</code> type.
+         * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: 131072
+         * Default: false
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder bufferSize(String bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
+        default AdvancedFtpsEndpointProducerBuilder throwExceptionOnConnectFailed(
+                String throwExceptionOnConnectFailed) {
+            doSetProperty("throwExceptionOnConnectFailed", throwExceptionOnConnectFailed);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
-         * The option is a: <code>boolean</code> type.
+         * The option is a: <code>int</code> type.
          * 
-         * Default: false
+         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder synchronous(
-                boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedFtpsEndpointProducerBuilder timeout(int timeout) {
+            doSetProperty("timeout", timeout);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * Sets the data timeout for waiting for reply Used only by FTPClient.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
-         * Default: false
+         * Default: 30000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointProducerBuilder synchronous(
-                String synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedFtpsEndpointProducerBuilder timeout(String timeout) {
+            doSetProperty("timeout", timeout);
             return this;
         }
     }
@@ -3798,13 +4531,136 @@ public interface FtpsEndpointBuilderFactory {
          * Specifies the file transfer mode, BINARY or ASCII. Default is ASCII
          * (false).
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointBuilder binary(String binary) {
+            doSetProperty("binary", binary);
+            return this;
+        }
+        /**
+         * This option is used to specify the encoding of the file. You can use
+         * this on the consumer, to specify the encodings of the files, which
+         * allow Camel to know the charset it should load the file content in
+         * case the file content is being accessed. Likewise when writing a
+         * file, you can use this option to specify which charset to write the
+         * file as well. Do mind that when writing the file Camel may have to
+         * read the message content into memory to be able to convert the data
+         * into the configured charset, so do not use this if you have big
+         * messages.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpsEndpointBuilder charset(String charset) {
+            doSetProperty("charset", charset);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointBuilder disconnect(boolean disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointBuilder disconnect(String disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Producer: If provided, then Camel will write a 2nd done file when the
+         * original file has been written. The done file will be empty. This
+         * option configures what file name to use. Either you can specify a
+         * fixed name. Or you can use dynamic placeholders. The done file will
+         * always be written in the same folder as the original file. Consumer:
+         * If provided, Camel will only consume files if a done file exists.
+         * This option configures what file name to use. Either you can specify
+         * a fixed name. Or you can use dynamic placeholders.The done file is
+         * always expected in the same folder as the original file. Only
+         * ${file.name} and ${file.name.next} is supported as dynamic
+         * placeholders.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: common
+         */
+        default FtpsEndpointBuilder doneFileName(String doneFileName) {
+            doSetProperty("doneFileName", doneFileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * 
+         * Group: common
+         */
+        default FtpsEndpointBuilder fileName(Expression fileName) {
+            doSetProperty("fileName", fileName);
+            return this;
+        }
+        /**
+         * Use Expression such as File Language to dynamically set the filename.
+         * For consumers, it's used as a filename filter. For producers, it's
+         * used to evaluate the filename to write. If an expression is set, it
+         * take precedence over the CamelFileName header. (Note: The header
+         * itself can also be an Expression). The expression options support
+         * both String and Expression types. If the expression is a String type,
+         * it is always evaluated using the File Language. If the expression is
+         * an Expression type, the specified Expression type is used - this
+         * allows you, for instance, to use OGNL expressions. For the consumer,
+         * you can use it to filter filenames, so you can for instance consume
+         * today's file using the File Language syntax:
+         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
+         * CamelOverruleFileName header which takes precedence over any existing
+         * CamelFileName header; the CamelOverruleFileName is a header that is
+         * used only once, and makes it easier as this avoids to temporary store
+         * CamelFileName and have to restore it afterwards.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.Expression</code> type.
          * 
-         * Default: false
          * Group: common
          */
-        default FtpsEndpointBuilder binary(String binary) {
-            doSetProperty("binary", binary);
+        default FtpsEndpointBuilder fileName(String fileName) {
+            doSetProperty("fileName", fileName);
             return this;
         }
         /**
@@ -3862,6 +4718,93 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
+         * Configures the interval in seconds to use when logging the progress
+         * of upload and download operations that are in-flight. This is used
+         * for logging progress when operations takes longer time.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Default: 5
+         * Group: common
+         */
+        default FtpsEndpointBuilder transferLoggingIntervalSeconds(
+                int transferLoggingIntervalSeconds) {
+            doSetProperty("transferLoggingIntervalSeconds", transferLoggingIntervalSeconds);
+            return this;
+        }
+        /**
+         * Configures the interval in seconds to use when logging the progress
+         * of upload and download operations that are in-flight. This is used
+         * for logging progress when operations takes longer time.
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Default: 5
+         * Group: common
+         */
+        default FtpsEndpointBuilder transferLoggingIntervalSeconds(
+                String transferLoggingIntervalSeconds) {
+            doSetProperty("transferLoggingIntervalSeconds", transferLoggingIntervalSeconds);
+            return this;
+        }
+        /**
+         * Configure the logging level to use when logging the progress of
+         * upload and download operations.
+         * 
+         * The option is a: <code>org.apache.camel.LoggingLevel</code> type.
+         * 
+         * Default: DEBUG
+         * Group: common
+         */
+        default FtpsEndpointBuilder transferLoggingLevel(
+                LoggingLevel transferLoggingLevel) {
+            doSetProperty("transferLoggingLevel", transferLoggingLevel);
+            return this;
+        }
+        /**
+         * Configure the logging level to use when logging the progress of
+         * upload and download operations.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.LoggingLevel</code> type.
+         * 
+         * Default: DEBUG
+         * Group: common
+         */
+        default FtpsEndpointBuilder transferLoggingLevel(
+                String transferLoggingLevel) {
+            doSetProperty("transferLoggingLevel", transferLoggingLevel);
+            return this;
+        }
+        /**
+         * Configures whether the perform verbose (fine grained) logging of the
+         * progress of upload and download operations.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointBuilder transferLoggingVerbose(
+                boolean transferLoggingVerbose) {
+            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
+            return this;
+        }
+        /**
+         * Configures whether the perform verbose (fine grained) logging of the
+         * progress of upload and download operations.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common
+         */
+        default FtpsEndpointBuilder transferLoggingVerbose(
+                String transferLoggingVerbose) {
+            doSetProperty("transferLoggingVerbose", transferLoggingVerbose);
+            return this;
+        }
+        /**
          * Account to use for login.
          * 
          * The option is a: <code>java.lang.String</code> type.
@@ -4084,149 +5027,340 @@ public interface FtpsEndpointBuilderFactory {
             doSetProperty("username", username);
             return this;
         }
+    }
+
+    /**
+     * Advanced builder for endpoint for the FTPS component.
+     */
+    public interface AdvancedFtpsEndpointBuilder
+            extends
+                AdvancedFtpsEndpointConsumerBuilder,
+                AdvancedFtpsEndpointProducerBuilder {
+        default FtpsEndpointBuilder basic() {
+            return (FtpsEndpointBuilder) this;
+        }
+        /**
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpsEndpointBuilder fastExistsCheck(
+                boolean fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * If set this option to be true, camel-ftp will use the list file
+         * directly to check if the file exists. Since some FTP server may not
+         * support to list the file directly, if the option is false, camel-ftp
+         * will use the old way to list the directory and check if the file
+         * exists. This option also influences readLock=changed to control
+         * whether it performs a fast check to update file information or not.
+         * This can be used to speed up the process if the FTP server has a lot
+         * of files.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: common (advanced)
+         */
+        default AdvancedFtpsEndpointBuilder fastExistsCheck(
+                String fastExistsCheck) {
+            doSetProperty("fastExistsCheck", fastExistsCheck);
+            return this;
+        }
+        /**
+         * Set the client side port range in active mode. The syntax is:
+         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
+         * include all 1xxxx ports.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder activePortRange(
+                String activePortRange) {
+            doSetProperty("activePortRange", activePortRange);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder autoCreate(boolean autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
+            return this;
+        }
+        /**
+         * 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.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: true
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder autoCreate(String autoCreate) {
+            doSetProperty("autoCreate", autoCreate);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Default: 131072
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder bufferSize(int bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
+            return this;
+        }
+        /**
+         * Buffer size in bytes used for writing files (or in case of FTP for
+         * downloading and uploading files).
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Default: 131072
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder bufferSize(String bufferSize) {
+            doSetProperty("bufferSize", bufferSize);
+            return this;
+        }
+        /**
+         * Sets the connect timeout for waiting for a connection to be
+         * established Used by both FTPClient and JSCH.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Default: 10000
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder connectTimeout(int connectTimeout) {
+            doSetProperty("connectTimeout", connectTimeout);
+            return this;
+        }
+        /**
+         * Sets the connect timeout for waiting for a connection to be
+         * established Used by both FTPClient and JSCH.
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Default: 10000
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder connectTimeout(String connectTimeout) {
+            doSetProperty("connectTimeout", connectTimeout);
+            return this;
+        }
+        /**
+         * To use a custom instance of FTPClient.
+         * 
+         * The option is a: <code>org.apache.commons.net.ftp.FTPClient</code>
+         * type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder ftpClient(Object ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
+            return this;
+        }
+        /**
+         * To use a custom instance of FTPClient.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClient</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder ftpClient(String ftpClient) {
+            doSetProperty("ftpClient", ftpClient);
+            return this;
+        }
+        /**
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
+         * 
+         * The option is a:
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder ftpClientConfig(
+                Object ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
+            return this;
+        }
+        /**
+         * To use a custom instance of FTPClientConfig to configure the FTP
+         * client the endpoint should use.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.commons.net.ftp.FTPClientConfig</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder ftpClientConfig(
+                String ftpClientConfig) {
+            doSetProperty("ftpClientConfig", ftpClientConfig);
+            return this;
+        }
         /**
-         * This option is used to specify the encoding of the file. You can use
-         * this on the consumer, to specify the encodings of the files, which
-         * allow Camel to know the charset it should load the file content in
-         * case the file content is being accessed. Likewise when writing a
-         * file, you can use this option to specify which charset to write the
-         * file as well. Do mind that when writing the file Camel may have to
-         * read the message content into memory to be able to convert the data
-         * into the configured charset, so do not use this if you have big
-         * messages.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointBuilder charset(String charset) {
-            doSetProperty("charset", charset);
+        default AdvancedFtpsEndpointBuilder ftpClientConfigParameters(
+                Map<String, Object> ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             return this;
         }
         /**
-         * Producer: If provided, then Camel will write a 2nd done file when the
-         * original file has been written. The done file will be empty. This
-         * option configures what file name to use. Either you can specify a
-         * fixed name. Or you can use dynamic placeholders. The done file will
-         * always be written in the same folder as the original file. Consumer:
-         * If provided, Camel will only consume files if a done file exists.
-         * This option configures what file name to use. Either you can specify
-         * a fixed name. Or you can use dynamic placeholders.The done file is
-         * always expected in the same folder as the original file. Only
-         * ${file.name} and ${file.name.noext} is supported as dynamic
-         * placeholders.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClientConfig.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointBuilder doneFileName(String doneFileName) {
-            doSetProperty("doneFileName", doneFileName);
+        default AdvancedFtpsEndpointBuilder ftpClientConfigParameters(
+                String ftpClientConfigParameters) {
+            doSetProperty("ftpClientConfigParameters", ftpClientConfigParameters);
             return this;
         }
         /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
+         * The option is a: <code>java.util.Map&lt;java.lang.String,
+         * java.lang.Object&gt;</code> type.
          * 
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointBuilder fileName(Expression fileName) {
-            doSetProperty("fileName", fileName);
+        default AdvancedFtpsEndpointBuilder ftpClientParameters(
+                Map<String, Object> ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
         /**
-         * Use Expression such as File Language to dynamically set the filename.
-         * For consumers, it's used as a filename filter. For producers, it's
-         * used to evaluate the filename to write. If an expression is set, it
-         * take precedence over the CamelFileName header. (Note: The header
-         * itself can also be an Expression). The expression options support
-         * both String and Expression types. If the expression is a String type,
-         * it is always evaluated using the File Language. If the expression is
-         * an Expression type, the specified Expression type is used - this
-         * allows you, for instance, to use OGNL expressions. For the consumer,
-         * you can use it to filter filenames, so you can for instance consume
-         * today's file using the File Language syntax:
-         * mydata-${date:now:yyyyMMdd}.txt. The producers support the
-         * CamelOverruleFileName header which takes precedence over any existing
-         * CamelFileName header; the CamelOverruleFileName is a header that is
-         * used only once, and makes it easier as this avoids to temporary store
-         * CamelFileName and have to restore it afterwards.
+         * Used by FtpComponent to provide additional parameters for the
+         * FTPClient.
          * 
          * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
+         * <code>java.util.Map&lt;java.lang.String, java.lang.Object&gt;</code>
+         * type.
          * 
-         * Group: common
+         * Group: advanced
          */
-        default FtpsEndpointBuilder fileName(String fileName) {
-            doSetProperty("fileName", fileName);
+        default AdvancedFtpsEndpointBuilder ftpClientParameters(
+                String ftpClientParameters) {
+            doSetProperty("ftpClientParameters", ftpClientParameters);
             return this;
         }
-    }
-
-    /**
-     * Advanced builder for endpoint for the FTPS component.
-     */
-    public interface AdvancedFtpsEndpointBuilder
-            extends
-                AdvancedFtpsEndpointConsumerBuilder,
-                AdvancedFtpsEndpointProducerBuilder {
-        default FtpsEndpointBuilder basic() {
-            return (FtpsEndpointBuilder) this;
+        /**
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder maximumReconnectAttempts(
+                int maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
+            return this;
         }
         /**
-         * Set the client side port range in active mode. The syntax is:
-         * minPort-maxPort Both port numbers are inclusive, eg 10000-19999 to
-         * include all 1xxxx ports.
+         * Specifies the maximum reconnect attempts Camel performs when it tries
+         * to connect to the remote FTP server. Use 0 to disable this behavior.
          * 
-         * The option is a: <code>java.lang.String</code> type.
+         * The option will be converted to a <code>int</code> type.
          * 
          * Group: advanced
          */
-        default AdvancedFtpsEndpointBuilder activePortRange(
-                String activePortRange) {
-            doSetProperty("activePortRange", activePortRange);
+        default AdvancedFtpsEndpointBuilder maximumReconnectAttempts(
+                String maximumReconnectAttempts) {
+            doSetProperty("maximumReconnectAttempts", maximumReconnectAttempts);
             return this;
         }
         /**
-         * Sets the connect timeout for waiting for a connection to be
-         * established Used by both FTPClient and JSCH.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option is a: <code>int</code> type.
+         * The option is a: <code>long</code> type.
          * 
-         * Default: 10000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointBuilder connectTimeout(int connectTimeout) {
-            doSetProperty("connectTimeout", connectTimeout);
+        default AdvancedFtpsEndpointBuilder reconnectDelay(long reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
         /**
-         * Sets the connect timeout for waiting for a connection to be
-         * established Used by both FTPClient and JSCH.
+         * Delay in millis Camel will wait before performing a reconnect
+         * attempt.
          * 
-         * The option will be converted to a <code>int</code> type.
+         * The option will be converted to a <code>long</code> type.
          * 
-         * Default: 10000
          * Group: advanced
          */
-        default AdvancedFtpsEndpointBuilder connectTimeout(String connectTimeout) {
-            doSetProperty("connectTimeout", connectTimeout);
+        default AdvancedFtpsEndpointBuilder reconnectDelay(String reconnectDelay) {
+            doSetProperty("reconnectDelay", reconnectDelay);
             return this;
         }
         /**
@@ -4306,6 +5440,32 @@ public interface FtpsEndpointBuilderFactory {
             return this;
         }
         /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder synchronous(boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedFtpsEndpointBuilder synchronous(String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            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
@@ -4363,116 +5523,6 @@ public interface FtpsEndpointBuilderFactory {
             doSetProperty("timeout", timeout);
             return this;
         }
-        /**
-         * 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.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: advanced
-         */
-        default AdvancedFtpsEndpointBuilder autoCreate(boolean autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: advanced
-         */
-        default AdvancedFtpsEndpointBuilder autoCreate(String autoCreate) {
-            doSetProperty("autoCreate", autoCreate);
-            return this;
-        }
-        /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         */
-        default AdvancedFtpsEndpointBuilder basicPropertyBinding(
-                boolean basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
-            return this;
-        }
-        /**
-         * Whether the endpoint should use basic property binding (Camel 2.x) or
-         * the newer property binding with additional capabilities.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         */
-        default AdvancedFtpsEndpointBuilder basicPropertyBinding(
-                String basicPropertyBinding) {
-            doSetProperty("basicPropertyBinding", basicPropertyBinding);
-            return this;
-        }
-        /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
-         * 
-         * The option is a: <code>int</code> type.
-         * 
-         * Default: 131072
-         * Group: advanced
-         */
-        default AdvancedFtpsEndpointBuilder bufferSize(int bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
-            return this;
-        }
-        /**
-         * Buffer size in bytes used for writing files (or in case of FTP for
-         * downloading and uploading files).
-         * 
-         * The option will be converted to a <code>int</code> type.
-         * 
-         * Default: 131072
-         * Group: advanced
-         */
-        default AdvancedFtpsEndpointBuilder bufferSize(String bufferSize) {
-            doSetProperty("bufferSize", bufferSize);
-            return this;
-        }
-        /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         */
-        default AdvancedFtpsEndpointBuilder synchronous(boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
-            return this;
-        }
-        /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: advanced
-         */
-        default AdvancedFtpsEndpointBuilder synchronous(String synchronous) {
-            doSetProperty("synchronous", synchronous);
-            return this;
-        }
     }
 
     /**
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/ScpEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/ScpEndpointBuilderFactory.java
index 5686a80..a473320 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/ScpEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/ScpEndpointBuilderFactory.java
@@ -16,22 +16,11 @@
  */
 package org.apache.camel.builder.endpoint.dsl;
 
-import java.util.Comparator;
-import java.util.Map;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 import javax.annotation.Generated;
-import org.apache.camel.Exchange;
-import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
-import org.apache.camel.LoggingLevel;
-import org.apache.camel.Predicate;
 import org.apache.camel.builder.EndpointConsumerBuilder;
 import org.apache.camel.builder.EndpointProducerBuilder;
 import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
-import org.apache.camel.spi.ExceptionHandler;
-import org.apache.camel.spi.IdempotentRepository;
-import org.apache.camel.spi.PollingConsumerPollStrategy;
 
 /**
  * To copy files using the secure copy protocol (SCP).
@@ -50,190 +39,45 @@ public interface ScpEndpointBuilderFactory {
             return (AdvancedScpEndpointBuilder) this;
         }
         /**
-         * Allows you to set chmod on the stored file. For example chmod=664.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Default: 664
-         * Group: producer
-         */
-        default ScpEndpointBuilder chmod(String chmod) {
-            doSetProperty("chmod", chmod);
-            return this;
-        }
-        /**
-         * Sets whether to use strict host key checking. Possible values are:
-         * no, yes.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Default: no
-         * Group: producer
-         */
-        default ScpEndpointBuilder strictHostKeyChecking(
-                String strictHostKeyChecking) {
-            doSetProperty("strictHostKeyChecking", strictHostKeyChecking);
-            return this;
-        }
-        /**
-         * Sets the known_hosts file, so that the jsch endpoint can do host key
-         * verification. You can prefix with classpath: to load the file from
-         * classpath instead of file system.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default ScpEndpointBuilder knownHostsFile(String knownHostsFile) {
-            doSetProperty("knownHostsFile", knownHostsFile);
-            return this;
-        }
-        /**
-         * Password to use for login.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default ScpEndpointBuilder password(String password) {
-            doSetProperty("password", password);
-            return this;
-        }
-        /**
-         * Set a comma separated list of authentications that will be used in
-         * order of preference. Possible authentication methods are defined by
-         * JCraft JSCH. Some examples include:
-         * gssapi-with-mic,publickey,keyboard-interactive,password If not
-         * specified the JSCH and/or system defaults will be used.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default ScpEndpointBuilder preferredAuthentications(
-                String preferredAuthentications) {
-            doSetProperty("preferredAuthentications", preferredAuthentications);
-            return this;
-        }
-        /**
-         * Set the private key bytes to that the endpoint can do private key
-         * verification. This must be used only if privateKeyFile wasn't set.
-         * Otherwise the file will have the priority.
-         * 
-         * The option is a: <code>byte[]</code> type.
-         * 
-         * Group: security
-         */
-        default ScpEndpointBuilder privateKeyBytes(Byte[] privateKeyBytes) {
-            doSetProperty("privateKeyBytes", privateKeyBytes);
-            return this;
-        }
-        /**
-         * Set the private key bytes to that the endpoint can do private key
-         * verification. This must be used only if privateKeyFile wasn't set.
-         * Otherwise the file will have the priority.
-         * 
-         * The option will be converted to a <code>byte[]</code> type.
-         * 
-         * Group: security
-         */
-        default ScpEndpointBuilder privateKeyBytes(String privateKeyBytes) {
-            doSetProperty("privateKeyBytes", privateKeyBytes);
-            return this;
-        }
-        /**
-         * Set the private key file to that the endpoint can do private key
-         * verification. You can prefix with classpath: to load the file from
-         * classpath instead of file system.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default ScpEndpointBuilder privateKeyFile(String privateKeyFile) {
-            doSetProperty("privateKeyFile", privateKeyFile);
-            return this;
-        }
-        /**
-         * Set the private key file passphrase to that the endpoint can do
-         * private key verification.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default ScpEndpointBuilder privateKeyFilePassphrase(
-                String privateKeyFilePassphrase) {
-            doSetProperty("privateKeyFilePassphrase", privateKeyFilePassphrase);
-            return this;
-        }
-        /**
-         * Username to use for login.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: security
-         */
-        default ScpEndpointBuilder username(String username) {
-            doSetProperty("username", username);
-            return this;
-        }
-        /**
-         * If knownHostFile has not been explicit configured, then use the host
-         * file from System.getProperty(user.home) /.ssh/known_hosts.
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
          * 
          * The option is a: <code>boolean</code> type.
          * 
-         * Default: true
-         * Group: security
+         * Default: false
+         * Group: common
          */
-        default ScpEndpointBuilder useUserKnownHostsFile(
-                boolean useUserKnownHostsFile) {
-            doSetProperty("useUserKnownHostsFile", useUserKnownHostsFile);
+        default ScpEndpointBuilder disconnect(boolean disconnect) {
+            doSetProperty("disconnect", disconnect);
             return this;
         }
         /**
-         * If knownHostFile has not been explicit configured, then use the host
-         * file from System.getProperty(user.home) /.ssh/known_hosts.
+         * Whether or not to disconnect from remote FTP server right after use.
+         * Disconnect will only disconnect the current connection to the FTP
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer/route instead.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
-         * Default: true
-         * Group: security
-         */
-        default ScpEndpointBuilder useUserKnownHostsFile(
-                String useUserKnownHostsFile) {
-            doSetProperty("useUserKnownHostsFile", useUserKnownHostsFile);
-            return this;
-        }
-        /**
-         * Sets the download method to use when not using a local working
-         * directory. If set to true, the remote files are streamed to the route
-         * as they are read. When set to false, the remote files are loaded into
-         * memory before being sent into the route.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
          * Default: false
-         * Group: consumer
+         * Group: common
          */
-        default ScpEndpointBuilder streamDownload(boolean streamDownload) {
-            doSetProperty("streamDownload", streamDownload);
+        default ScpEndpointBuilder disconnect(String disconnect) {
+            doSetProperty("disconnect", disconnect);
             return this;
         }
         /**
-         * Sets the download method to use when not using a local working
-         * directory. If set to true, the remote files are streamed to the route
-         * as they are read. When set to false, the remote files are loaded into
-         * memory before being sent into the route.
+         * Allows you to set chmod on the stored file. For example chmod=664.
          * 
-         * The option will be converted to a <code>boolean</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
-         * Default: false
-         * Group: consumer
+         * Default: 664
+         * Group: producer
          */
-        default ScpEndpointBuilder streamDownload(String streamDownload) {
-            doSetProperty("streamDownload", streamDownload);
+        default ScpEndpointBuilder chmod(String chmod) {
+            doSetProperty("chmod", chmod);
             return this;
         }
         /**
@@ -256,7 +100,7 @@ public interface ScpEndpointBuilderFactory {
          * 
          * The option is a: <code>org.apache.camel.Expression</code> type.
          * 
-         * Group: common
+         * Group: producer
          */
         default ScpEndpointBuilder fileName(Expression fileName) {
             doSetProperty("fileName", fileName);
@@ -283,296 +127,44 @@ public interface ScpEndpointBuilderFactory {
          * The option will be converted to a
          * <code>org.apache.camel.Expression</code> type.
          * 
-         * Group: common
+         * Group: producer
          */
         default ScpEndpointBuilder fileName(String fileName) {
             doSetProperty("fileName", fileName);
             return this;
         }
         /**
-         * Allows for bridging the consumer to the Camel routing Error Handler,
-         * which mean any exceptions occurred while the consumer is trying to
-         * pickup incoming messages, or the likes, will now be processed as a
-         * message and handled by the routing Error Handler. By default the
-         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
-         * with exceptions, that will be logged at WARN or ERROR level and
-         * ignored.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder bridgeErrorHandler(boolean bridgeErrorHandler) {
-            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
-            return this;
-        }
-        /**
-         * Allows for bridging the consumer to the Camel routing Error Handler,
-         * which mean any exceptions occurred while the consumer is trying to
-         * pickup incoming messages, or the likes, will now be processed as a
-         * message and handled by the routing Error Handler. By default the
-         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
-         * with exceptions, that will be logged at WARN or ERROR level and
-         * ignored.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder bridgeErrorHandler(String bridgeErrorHandler) {
-            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
-            return this;
-        }
-        /**
-         * If true, the file will be deleted after it is processed successfully.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder delete(boolean delete) {
-            doSetProperty("delete", delete);
-            return this;
-        }
-        /**
-         * If true, the file will be deleted after it is processed successfully.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder delete(String delete) {
-            doSetProperty("delete", delete);
-            return this;
-        }
-        /**
-         * Sets the move failure expression based on Simple language. For
-         * example, to move files into a .error subdirectory use: .error. Note:
-         * When moving the files to the fail location Camel will handle the
-         * error and will not pick up the file again.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default ScpEndpointBuilder moveFailed(Expression moveFailed) {
-            doSetProperty("moveFailed", moveFailed);
-            return this;
-        }
-        /**
-         * Sets the move failure expression based on Simple language. For
-         * example, to move files into a .error subdirectory use: .error. Note:
-         * When moving the files to the fail location Camel will handle the
-         * error and will not pick up the file again.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default ScpEndpointBuilder moveFailed(String moveFailed) {
-            doSetProperty("moveFailed", moveFailed);
-            return this;
-        }
-        /**
-         * If true, the file is not moved or deleted in any way. This option is
-         * good for readonly data, or for ETL type requirements. If noop=true,
-         * Camel will set idempotent=true as well, to avoid consuming the same
-         * files over and over again.
+         * 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 they will be written in a single directory. Setting
+         * this to true on the producer enforces that any file name in
+         * CamelFileName header will be stripped for any leading paths.
          * 
          * The option is a: <code>boolean</code> type.
          * 
          * Default: false
-         * Group: consumer
+         * Group: producer
          */
-        default ScpEndpointBuilder noop(boolean noop) {
-            doSetProperty("noop", noop);
+        default ScpEndpointBuilder flatten(boolean flatten) {
+            doSetProperty("flatten", flatten);
             return this;
         }
         /**
-         * If true, the file is not moved or deleted in any way. This option is
-         * good for readonly data, or for ETL type requirements. If noop=true,
-         * Camel will set idempotent=true as well, to avoid consuming the same
-         * files over and over again.
+         * 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 they will be written in a single directory. Setting
+         * this to true on the producer enforces that any file name in
+         * CamelFileName header will be stripped for any leading paths.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
          * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder noop(String noop) {
-            doSetProperty("noop", noop);
-            return this;
-        }
-        /**
-         * Expression (such as File Language) used to dynamically set the
-         * filename when moving it before processing. For example to move
-         * in-progress files into the order directory set this value to order.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default ScpEndpointBuilder preMove(Expression preMove) {
-            doSetProperty("preMove", preMove);
-            return this;
-        }
-        /**
-         * Expression (such as File Language) used to dynamically set the
-         * filename when moving it before processing. For example to move
-         * in-progress files into the order directory set this value to order.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: consumer
-         */
-        default ScpEndpointBuilder preMove(String preMove) {
-            doSetProperty("preMove", preMove);
-            return this;
-        }
-        /**
-         * When pre-sort is enabled then the consumer will sort the file and
-         * directory names during polling, that was retrieved from the file
-         * system. You may want to do this in case you need to operate on the
-         * files in a sorted order. The pre-sort is executed before the consumer
-         * starts to filter, and accept files to process by Camel. This option
-         * is default=false meaning disabled.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
+         * Group: producer
          */
-        default ScpEndpointBuilder preSort(boolean preSort) {
-            doSetProperty("preSort", preSort);
-            return this;
-        }
-        /**
-         * When pre-sort is enabled then the consumer will sort the file and
-         * directory names during polling, that was retrieved from the file
-         * system. You may want to do this in case you need to operate on the
-         * files in a sorted order. The pre-sort is executed before the consumer
-         * starts to filter, and accept files to process by Camel. This option
-         * is default=false meaning disabled.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder preSort(String preSort) {
-            doSetProperty("preSort", preSort);
-            return this;
-        }
-        /**
-         * If a directory, will look for files in all the sub-directories as
-         * well.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder recursive(boolean recursive) {
-            doSetProperty("recursive", recursive);
-            return this;
-        }
-        /**
-         * If a directory, will look for files in all the sub-directories as
-         * well.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder recursive(String recursive) {
-            doSetProperty("recursive", recursive);
-            return this;
-        }
-        /**
-         * If the polling consumer did not poll any files, you can enable this
-         * option to send an empty message (no body) instead.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder sendEmptyMessageWhenIdle(
-                boolean sendEmptyMessageWhenIdle) {
-            doSetProperty("sendEmptyMessageWhenIdle", sendEmptyMessageWhenIdle);
-            return this;
-        }
-        /**
-         * If the polling consumer did not poll any files, you can enable this
-         * option to send an empty message (no body) instead.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: consumer
-         */
-        default ScpEndpointBuilder sendEmptyMessageWhenIdle(
-                String sendEmptyMessageWhenIdle) {
-            doSetProperty("sendEmptyMessageWhenIdle", sendEmptyMessageWhenIdle);
-            return this;
-        }
-        /**
-         * 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 they will be written in a single directory. Setting
-         * this to true on the producer enforces that any file name in
-         * CamelFileName header will be stripped for any leading paths.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: producer
-         */
-        default ScpEndpointBuilder flatten(boolean flatten) {
-            doSetProperty("flatten", flatten);
-            return this;
-        }
-        /**
-         * 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 they will be written in a single directory. Setting
-         * this to true on the producer enforces that any file name in
-         * CamelFileName header will be stripped for any leading paths.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: producer
-         */
-        default ScpEndpointBuilder flatten(String flatten) {
-            doSetProperty("flatten", flatten);
-            return this;
-        }
-        /**
-         * 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 secured out
-         * of the box). You can turn this off to allow writing files to
-         * directories outside the starting directory, such as parent or root
-         * folders.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: producer
-         */
-        default ScpEndpointBuilder jailStartingDirectory(
-                boolean jailStartingDirectory) {
-            doSetProperty("jailStartingDirectory", jailStartingDirectory);
+        default ScpEndpointBuilder flatten(String flatten) {
+            doSetProperty("flatten", flatten);
             return this;
         }
         /**
@@ -583,1703 +175,230 @@ public interface ScpEndpointBuilderFactory {
          * directories outside the starting directory, such as parent or root
          * folders.
          * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: producer
-         */
-        default ScpEndpointBuilder jailStartingDirectory(
-                String jailStartingDirectory) {
-            doSetProperty("jailStartingDirectory", jailStartingDirectory);
-            return this;
-        }
-        /**
-         * 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 otherwise fail during
-         * starting and cause the route to fail being started. By deferring this
-         * startup to be lazy then the startup failure can be handled during
-         * routing messages via Camel's routing error handlers. Beware that when
-         * the first message is processed then creating and starting the
-         * producer may take a little time and prolong the total processing time
-         * of the processing.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: producer
-         */
-        default ScpEndpointBuilder lazyStartProducer(boolean lazyStartProducer) {
-            doSetProperty("lazyStartProducer", lazyStartProducer);
-            return this;
-        }
-        /**
-         * 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 otherwise fail during
-         * starting and cause the route to fail being started. By deferring this
-         * startup to be lazy then the startup failure can be handled during
-         * routing messages via Camel's routing error handlers. Beware that when
-         * the first message is processed then creating and starting the
-         * producer may take a little time and prolong the total processing time
-         * of the processing.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: false
-         * Group: producer
-         */
-        default ScpEndpointBuilder lazyStartProducer(String lazyStartProducer) {
-            doSetProperty("lazyStartProducer", lazyStartProducer);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder antExclude(String antExclude) {
-            doSetProperty("antExclude", antExclude);
-            return this;
-        }
-        /**
-         * Sets case sensitive flag on ant filter.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: filter
-         */
-        default ScpEndpointBuilder antFilterCaseSensitive(
-                boolean antFilterCaseSensitive) {
-            doSetProperty("antFilterCaseSensitive", antFilterCaseSensitive);
-            return this;
-        }
-        /**
-         * Sets case sensitive flag on ant filter.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: filter
-         */
-        default ScpEndpointBuilder antFilterCaseSensitive(
-                String antFilterCaseSensitive) {
-            doSetProperty("antFilterCaseSensitive", antFilterCaseSensitive);
-            return this;
-        }
-        /**
-         * Ant style filter inclusion. Multiple inclusions may be specified in
-         * comma-delimited format.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder antInclude(String antInclude) {
-            doSetProperty("antInclude", antInclude);
-            return this;
-        }
-        /**
-         * Allows for controlling whether the limit from maxMessagesPerPoll is
-         * eager or not. If eager then the limit is during the scanning of
-         * files. Where as false would scan all files, and then perform sorting.
-         * Setting this option to false allows for sorting all files first, and
-         * then limit the poll. Mind that this requires a higher memory usage as
-         * all file details are in memory to perform the sorting.
-         * 
-         * The option is a: <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: filter
-         */
-        default ScpEndpointBuilder eagerMaxMessagesPerPoll(
-                boolean eagerMaxMessagesPerPoll) {
-            doSetProperty("eagerMaxMessagesPerPoll", eagerMaxMessagesPerPoll);
-            return this;
-        }
-        /**
-         * Allows for controlling whether the limit from maxMessagesPerPoll is
-         * eager or not. If eager then the limit is during the scanning of
-         * files. Where as false would scan all files, and then perform sorting.
-         * Setting this option to false allows for sorting all files first, and
-         * then limit the poll. Mind that this requires a higher memory usage as
-         * all file details are in memory to perform the sorting.
-         * 
-         * The option will be converted to a <code>boolean</code> type.
-         * 
-         * Default: true
-         * Group: filter
-         */
-        default ScpEndpointBuilder eagerMaxMessagesPerPoll(
-                String eagerMaxMessagesPerPoll) {
-            doSetProperty("eagerMaxMessagesPerPoll", eagerMaxMessagesPerPoll);
-            return this;
-        }
-        /**
-         * Is used to exclude files, if filename matches the regex pattern
-         * (matching is case in-senstive). Notice if you use symbols such as
-         * plus sign and others you would need to configure this using the RAW()
-         * syntax if configuring this as an endpoint uri. See more details at
-         * configuring endpoint uris.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder exclude(String exclude) {
-            doSetProperty("exclude", exclude);
-            return this;
-        }
-        /**
-         * Pluggable filter as a
-         * org.apache.camel.component.file.GenericFileFilter class. Will skip
-         * files if filter returns false in its accept() method.
-         * 
-         * The option is a:
-         * <code>org.apache.camel.component.file.GenericFileFilter&lt;org.apache.camel.component.scp.ScpFile&gt;</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder filter(Object filter) {
-            doSetProperty("filter", filter);
-            return this;
-        }
-        /**
-         * Pluggable filter as a
-         * org.apache.camel.component.file.GenericFileFilter class. Will skip
-         * files if filter returns false in its accept() method.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.component.file.GenericFileFilter&lt;org.apache.camel.component.scp.ScpFile&gt;</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder filter(String filter) {
-            doSetProperty("filter", filter);
-            return this;
-        }
-        /**
-         * Filters the directory based on Simple language. For example to filter
-         * on current date, you can use a simple date pattern such as
-         * ${date:now:yyyMMdd}.
-         * 
-         * The option is a: <code>org.apache.camel.Predicate</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder filterDirectory(Predicate filterDirectory) {
-            doSetProperty("filterDirectory", filterDirectory);
-            return this;
-        }
-        /**
-         * Filters the directory based on Simple language. For example to filter
-         * on current date, you can use a simple date pattern such as
-         * ${date:now:yyyMMdd}.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Predicate</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder filterDirectory(String filterDirectory) {
-            doSetProperty("filterDirectory", filterDirectory);
-            return this;
-        }
-        /**
-         * Filters the file based on Simple language. For example to filter on
-         * file size, you can use ${file:size} 5000.
-         * 
-         * The option is a: <code>org.apache.camel.Predicate</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder filterFile(Predicate filterFile) {
-            doSetProperty("filterFile", filterFile);
-            return this;
-        }
-        /**
-         * Filters the file based on Simple language. For example to filter on
-         * file size, you can use ${file:size} 5000.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Predicate</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder filterFile(String filterFile) {
-            doSetProperty("filterFile", filterFile);
-            return this;
-        }
-        /**
-         * Option to use the Idempotent Consumer EIP pattern to let Camel skip
-         * already processed files. Will by default use a memory based LRUCache
-         * that holds 1000 entries. If noop=true then idempotent will be enabled
-         * as well to avoid consuming the same files over and over again.
-         * 
-         * The option is a: <code>java.lang.Boolean</code> type.
-         * 
-         * Default: false
-         * Group: filter
-         */
-        default ScpEndpointBuilder idempotent(Boolean idempotent) {
-            doSetProperty("idempotent", idempotent);
-            return this;
-        }
-        /**
-         * Option to use the Idempotent Consumer EIP pattern to let Camel skip
-         * already processed files. Will by default use a memory based LRUCache
-         * that holds 1000 entries. If noop=true then idempotent will be enabled
-         * as well to avoid consuming the same files over and over again.
-         * 
-         * The option will be converted to a <code>java.lang.Boolean</code>
-         * type.
-         * 
-         * Default: false
-         * Group: filter
-         */
-        default ScpEndpointBuilder idempotent(String idempotent) {
-            doSetProperty("idempotent", idempotent);
-            return this;
-        }
-        /**
-         * To use a custom idempotent key. By default the absolute path of the
-         * file is used. You can use the File Language, for example to use the
-         * file name and file size, you can do:
-         * idempotentKey=${file:name}-${file:size}.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder idempotentKey(Expression idempotentKey) {
-            doSetProperty("idempotentKey", idempotentKey);
-            return this;
-        }
-        /**
-         * To use a custom idempotent key. By default the absolute path of the
-         * file is used. You can use the File Language, for example to use the
-         * file name and file size, you can do:
-         * idempotentKey=${file:name}-${file:size}.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder idempotentKey(String idempotentKey) {
-            doSetProperty("idempotentKey", idempotentKey);
-            return this;
-        }
-        /**
-         * A pluggable repository org.apache.camel.spi.IdempotentRepository
-         * which by default use MemoryMessageIdRepository if none is specified
-         * and idempotent is true.
-         * 
-         * The option is a:
-         * <code>org.apache.camel.spi.IdempotentRepository</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder idempotentRepository(
-                IdempotentRepository idempotentRepository) {
-            doSetProperty("idempotentRepository", idempotentRepository);
-            return this;
-        }
-        /**
-         * A pluggable repository org.apache.camel.spi.IdempotentRepository
-         * which by default use MemoryMessageIdRepository if none is specified
-         * and idempotent is true.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.spi.IdempotentRepository</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder idempotentRepository(
-                String idempotentRepository) {
-            doSetProperty("idempotentRepository", idempotentRepository);
-            return this;
-        }
-        /**
-         * Is used to include files, if filename matches the regex pattern
-         * (matching is case in-sensitive). Notice if you use symbols such as
-         * plus sign and others you would need to configure this using the RAW()
-         * syntax if configuring this as an endpoint uri. See more details at
-         * configuring endpoint uris.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder include(String include) {
-            doSetProperty("include", include);
-            return this;
-        }
-        /**
-         * The maximum depth to traverse when recursively processing a
-         * directory.
-         * 
-         * The option is a: <code>int</code> type.
-         * 
-         * Default: 2147483647
-         * Group: filter
-         */
-        default ScpEndpointBuilder maxDepth(int maxDepth) {
-            doSetProperty("maxDepth", maxDepth);
-            return this;
-        }
-        /**
-         * The maximum depth to traverse when recursively processing a
-         * directory.
-         * 
-         * The option will be converted to a <code>int</code> type.
-         * 
-         * Default: 2147483647
-         * Group: filter
-         */
-        default ScpEndpointBuilder maxDepth(String maxDepth) {
-            doSetProperty("maxDepth", maxDepth);
-            return this;
-        }
-        /**
-         * To define a maximum messages to gather per poll. By default no
-         * maximum is set. Can be used to set a limit of e.g. 1000 to avoid when
-         * starting up the server that there are thousands of files. Set a value
-         * of 0 or negative to disabled it. Notice: If this option is in use
-         * then the File and FTP components will limit before any sorting. For
-         * example if you have 100000 files and use maxMessagesPerPoll=500, then
-         * only the first 500 files will be picked up, and then sorted. You can
-         * use the eagerMaxMessagesPerPoll option and set this to false to allow
-         * to scan all files first and then sort afterwards.
-         * 
-         * The option is a: <code>int</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder maxMessagesPerPoll(int maxMessagesPerPoll) {
-            doSetProperty("maxMessagesPerPoll", maxMessagesPerPoll);
-            return this;
-        }
-        /**
-         * To define a maximum messages to gather per poll. By default no
-         * maximum is set. Can be used to set a limit of e.g. 1000 to avoid when
-         * starting up the server that there are thousands of files. Set a value
-         * of 0 or negative to disabled it. Notice: If this option is in use
-         * then the File and FTP components will limit before any sorting. For
-         * example if you have 100000 files and use maxMessagesPerPoll=500, then
-         * only the first 500 files will be picked up, and then sorted. You can
-         * use the eagerMaxMessagesPerPoll option and set this to false to allow
-         * to scan all files first and then sort afterwards.
-         * 
-         * The option will be converted to a <code>int</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder maxMessagesPerPoll(String maxMessagesPerPoll) {
-            doSetProperty("maxMessagesPerPoll", maxMessagesPerPoll);
-            return this;
-        }
-        /**
-         * The minimum depth to start processing when recursively processing a
-         * directory. Using minDepth=1 means the base directory. Using
-         * minDepth=2 means the first sub directory.
-         * 
-         * The option is a: <code>int</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder minDepth(int minDepth) {
-            doSetProperty("minDepth", minDepth);
-            return this;
-        }
-        /**
-         * The minimum depth to start processing when recursively processing a
-         * directory. Using minDepth=1 means the base directory. Using
-         * minDepth=2 means the first sub directory.
-         * 
-         * The option will be converted to a <code>int</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder minDepth(String minDepth) {
-            doSetProperty("minDepth", minDepth);
-            return this;
-        }
-        /**
-         * Expression (such as Simple Language) used to dynamically set the
-         * filename when moving it after processing. To move files into a .done
-         * subdirectory just enter .done.
-         * 
-         * The option is a: <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder move(Expression move) {
-            doSetProperty("move", move);
-            return this;
-        }
-        /**
-         * Expression (such as Simple Language) used to dynamically set the
-         * filename when moving it after processing. To move files into a .done
-         * subdirectory just enter .done.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.Expression</code> type.
-         * 
-         * Group: filter
-         */
-        default ScpEndpointBuilder move(String move) {
-            doSetProperty("move", move);
-            return this;
-        }
-        /**
-         * Pluggable read-lock as a
-         * org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy
-         * implementation.
-         * 
-         * The option is a:
-         * <code>org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy&lt;org.apache.camel.component.scp.ScpFile&gt;</code> type.
-         * 
-         * Group: lock
-         */
-        default ScpEndpointBuilder exclusiveReadLockStrategy(
-                Object exclusiveReadLockStrategy) {
-            doSetProperty("exclusiveReadLockStrategy", exclusiveReadLockStrategy);
-            return this;
-        }
-        /**
-         * Pluggable read-lock as a
-         * org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy
-         * implementation.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy&lt;org.apache.camel.component.scp.ScpFile&gt;</code> type.
-         * 
-         * Group: lock
-         */
-        default ScpEndpointBuilder exclusiveReadLockStrategy(
-                String exclusiveReadLockStrategy) {
-            doSetProperty("exclusiveReadLockStrategy", exclusiveReadLockStrategy);
-            return this;
-        }
-        /**
-         * Used by consumer, to only poll the files if it has exclusive
-         * read-lock on the file (i.e. the file is not in-progress or being
-         * written). Camel will wait until the file lock is granted. This option
-         * provides the build in strategies:\n\n - none - No read lock is in
-         * use\n - markerFile - Camel creates a marker file (fileName.camelLock)
-         * and then holds a lock on it. This option is not available for the FTP
-         * component\n - changed - Changed is using file length/modification
-         * timestamp to detect whether the file is currently being copied or
-         * not. Will at least use 1 sec to determine this, so this option cannot
-         * consume files as fast as the others, but can be more reliable as the
-         * JDK IO API cannot always determine whether a file is currently being
-         * used by another process. The option readLockCheckInterval can be used
-         * to set the check frequency.\n - fileLock - is for using
-         * java.nio.channels.FileLock. This option is not avail for Windows OS
-         * and the FTP component. This approach should be avoided when accessing
-         * a remote file system via a mount/share unless that file system
-         * supports distributed file locks.\n - rename - rename is for using a
-         * try to rename the file as a test if we can get exclusive read-lock.\n
-         * - idempotent - (only for file component) idempotent is for using a
-         * idempotentRepository as the read-lock. This allows to use read locks
-         * that supports clustering if the idempotent repository implementation
-         * supports that.\n - idempotent-changed - (only for file component)
-         * idempotent-changed is for using a idempotentRepository and changed as
-         * the combined read-lock. This allows to use read locks that supports
-         * clustering if the idempotent repository implementation supports
-         * that.\n - idempotent-rename - (only for file component)
-         * idempotent-rename is for using a idempotentRepository and rename as
-         * the combined read-lock. This allows to use read locks that supports
-         * clustering if the idempotent repository implementation supports
-         * that.\n \nNotice: The various read locks is not all suited to work in
-         * clustered mode, where concurrent consumers on different nodes is
-         * competing for the same files on a shared file system. The markerFile
-         * using a close to atomic operation to create the empty marker file,
-         * but its not guaranteed to work in a cluster. The fileLock may work
-         * better but then the file system need to support distributed file
-         * locks, and so on. Using the idempotent read lock can support
-         * clustering if the idempotent repository supports clustering, such as
-         * Hazelcast Component or Infinispan.
-         * 
-         * The option is a: <code>java.lang.String</code> type.
-         * 
-         * Default: none
-         * Group: lock
-         */
-        default ScpEndpointBuilder readLock(String readLock) {
-            doSetProperty("readLock", readLock);
-            return this;
-        }
-        /**
-         * Interval in millis for the read-lock, if supported by the read lock.
-         * This interval is used for sleeping between attempts to acquire the
-         * read lock. For example when using the changed read lock, you can set
-         * a higher interval period to cater for slow writes. The default of 1
-         * sec. may be too fast if the producer is very slow writing the file.
-         * Notice: For FTP the default readLockCheckInterval is 5000. The
-         * readLockTimeout value must be higher than readLockCheckInterval, but
-         * a rule of thumb is to have a timeout that is at least 2 or more times
-         * higher than the readLockCheckInterval. This is needed to ensure that
-         * amble time is allowed for the read lock process to try to grab the
-         * lock before the timeout was hit.
-         * 
... 7840 lines suppressed ...