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

acosentino pushed a commit to branch camel-spring-boot-3.x
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git


The following commit(s) were added to refs/heads/camel-spring-boot-3.x by this 
push:
     new 171fbe5bf7a CAMEL-19565 - Create Azure Files SB starter
171fbe5bf7a is described below

commit 171fbe5bf7a501b52797a1d8dcd1587e9bd4cfa3
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Fri Jun 30 12:53:20 2023 +0200

    CAMEL-19565 - Create Azure Files SB starter
    
    Signed-off-by: Andrea Cosentino <anco...@gmail.com>
---
 .../camel/springboot/catalog/components.properties |   1 +
 .../springboot/catalog/components/azure-files.json | 142 ++++++++++++++
 .../camel-azure-files-starter/pom.xml              |  48 +++++
 .../src/main/docs/azure-files.json                 |  50 +++++
 .../FilesComponentAutoConfiguration.java           |  79 ++++++++
 .../springboot/FilesComponentConfiguration.java    |  92 ++++++++++
 .../src/main/resources/META-INF/LICENSE.txt        | 203 +++++++++++++++++++++
 .../src/main/resources/META-INF/NOTICE.txt         |  11 ++
 .../src/main/resources/META-INF/spring.factories   |  19 ++
 .../src/main/resources/META-INF/spring.provides    |  17 ++
 components-starter/pom.xml                         |   1 +
 .../itest/springboot/CamelAzureFilesTest.java      |  50 +++++
 tooling/camel-spring-boot-bom/pom.xml              |   5 +
 tooling/camel-spring-boot-dependencies/pom.xml     |   5 +
 14 files changed, 723 insertions(+)

diff --git 
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components.properties
 
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components.properties
index ea1b6e7f6d5..e37758f56d0 100644
--- 
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components.properties
+++ 
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components.properties
@@ -36,6 +36,7 @@ aws2-sts
 aws2-translate
 azure-cosmosdb
 azure-eventhubs
+azure-files
 azure-key-vault
 azure-servicebus
 azure-storage-blob
diff --git 
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/azure-files.json
 
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/azure-files.json
new file mode 100644
index 00000000000..8c9b306a979
--- /dev/null
+++ 
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/azure-files.json
@@ -0,0 +1,142 @@
+{
+  "component": {
+    "kind": "component",
+    "name": "azure-files",
+    "title": "Azure Files",
+    "description": "Camel Azure Files Component",
+    "deprecated": false,
+    "deprecationNote": "",
+    "firstVersion": "3.21.0",
+    "label": "cloud,file",
+    "javaType": "org.apache.camel.component.file.azure.FilesComponent",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel.springboot",
+    "artifactId": "camel-azure-files-starter",
+    "version": "3.21.0-SNAPSHOT",
+    "scheme": "azure-files",
+    "extendsScheme": "file",
+    "syntax": "azure-files:\/\/account[.host]\/share[\/dir]",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": false,
+    "lenientProperties": false
+  },
+  "componentProperties": {
+    "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error 
Handler", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "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 me [...]
+    "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during star [...]
+    "autowiredEnabled": { "kind": "property", "displayName": "Autowired 
Enabled", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether autowiring is 
enabled. This is used for automatic autowiring options (the option must be 
marked as autowired) by looking up in the registry to find if there is a single 
instance of matching type, which t [...]
+  },
+  "headers": {
+    "CamelFileLength": { "kind": "header", "displayName": "", "group": "both", 
"label": "both", "required": false, "javaType": "long", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "A 
long value containing the file size. For producer, known length helps if the 
body converts to InputStream more efficiently than to bytes array.", 
"constantName": 
"org.apache.camel.component.file.azure.FilesHeaders#FILE_LENGTH" },
+    "CamelFileLastModified": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "long", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "A Long value containing the last modified timestamp of 
the file.", "constantName": 
"org.apache.camel.component.file.azure.FilesHeaders#FILE_LAST_MODIFIED" },
+    "CamelFileName": { "kind": "header", "displayName": "", "group": "common", 
"label": "", "required": false, "javaType": "String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Specifies the output file name (relative to the endpoint directory) to be used 
for the output message when sending to the endpoint. If this is not present and 
no expression either, then a generated message ID is used as the filename 
instead.", "constantName": "o [...]
+    "CamelFileNameOnly": { "kind": "header", "displayName": "", "group": 
"common", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "Only the file name (the name with no leading paths).", 
"constantName": 
"org.apache.camel.component.file.azure.FilesHeaders#FILE_NAME_ONLY" },
+    "CamelFileParent": { "kind": "header", "displayName": "", "group": 
"common", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The parent path.", "constantName": 
"org.apache.camel.component.file.azure.FilesHeaders#FILE_PARENT" },
+    "CamelRemoteFileInputStream": { "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": 
"java.io.InputStream", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The remote file input stream.", 
"constantName": 
"org.apache.camel.component.file.azure.FilesHeaders#REMOTE_FILE_INPUT_STREAM" },
+    "CamelFileLocalWorkPath": { "kind": "header", "displayName": "", "group": 
"common", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "Path to the local work file, if local work directory is used.", 
"constantName": 
"org.apache.camel.component.file.azure.FilesHeaders#FILE_LOCAL_WORK_PATH" },
+    "CamelFileHost": { "kind": "header", "displayName": "", "group": "common", 
"label": "", "required": false, "javaType": "String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
remote hostname.", "constantName": 
"org.apache.camel.component.file.azure.FilesHeaders#FILE_HOST" }
+  },
+  "properties": {
+    "host": { "kind": "path", "displayName": "Host", "group": "common", 
"label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Hostname of the FTP 
server" },
+    "port": { "kind": "path", "displayName": "Port", "group": "common", 
"label": "", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Port of the FTP server" 
},
+    "directoryName": { "kind": "path", "displayName": "Directory Name", 
"group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "The starting directory" 
},
+    "disconnect": { "kind": "parameter", "displayName": "Disconnect", "group": 
"common", "label": "common", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether or not to disconnect from remote 
FTP server right after 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\/ [...]
+    "doneFileName": { "kind": "parameter", "displayName": "Done File Name", 
"group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "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 plac [...]
+    "fileName": { "kind": "parameter", "displayName": "File Name", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"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 [...]
+    "delete": { "kind": "parameter", "displayName": "Delete", "group": 
"consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "If true, the file will be deleted 
after it is processed successfully." },
+    "moveFailed": { "kind": "parameter", "displayName": "Move Failed", 
"group": "consumer", "label": "consumer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "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." },
+    "noop": { "kind": "parameter", "displayName": "Noop", "group": "consumer", 
"label": "consumer", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "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." },
+    "preMove": { "kind": "parameter", "displayName": "Pre Move", "group": 
"consumer", "label": "consumer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "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." },
+    "preSort": { "kind": "parameter", "displayName": "Pre Sort", "group": 
"consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "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  [...]
+    "recursive": { "kind": "parameter", "displayName": "Recursive", "group": 
"consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "If a directory, will look for 
files in all the sub-directories as well." },
+    "resumeDownload": { "kind": "parameter", "displayName": "Resume Download", 
"group": "consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Configures whether resume 
download is enabled. In addition the options localWorkDirectory must be 
configured so downloaded files are stored in a local directory, which is 
required to support resuming of downloads." },
+    "sendEmptyMessageWhenIdle": { "kind": "parameter", "displayName": "Send 
Empty Message When Idle", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": "If 
the polling consumer did not poll any files, you can enable this option to send 
an empty message (no body) instead." },
+    "streamDownload": { "kind": "parameter", "displayName": "Stream Download", 
"group": "consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the download method 
to use when not using a local working directory. If set to true, th [...]
+    "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error 
Handler", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "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 [...]
+    "download": { "kind": "parameter", "displayName": "Download", "group": 
"consumer (advanced)", "label": "consumer,advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "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 su [...]
+    "exceptionHandler": { "kind": "parameter", "displayName": "Exception 
Handler", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", 
"deprecated": false, "autowired": false, "secret": false, "description": "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 
con [...]
+    "exchangePattern": { "kind": "parameter", "displayName": "Exchange 
Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut", 
"InOptionalOut" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the exchange pattern when the consumer creates an 
exchange." },
+    "inProgressRepository": { "kind": "parameter", "displayName": "In Progress 
Repository", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "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.  [...]
+    "localWorkDirectory": { "kind": "parameter", "displayName": "Local Work 
Directory", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "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 re [...]
+    "onCompletionExceptionHandler": { "kind": "parameter", "displayName": "On 
Completion Exception Handler", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.spi.ExceptionHandler", "deprecated": false, "autowired": 
false, "secret": false, "description": "To use a custom 
org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that 
happens during the file on completion process where the consumer d [...]
+    "pollStrategy": { "kind": "parameter", "displayName": "Poll Strategy", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the 
poll operation  [...]
+    "processStrategy": { "kind": "parameter", "displayName": "Process 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.GenericFileProcessStrategy<com.azure.storage.file.share.models.ShareFileItem>",
 "deprecated": false, "autowired": false, "secret": false, "description": "A 
pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing 
you to implement your own readLoc [...]
+    "fileExist": { "kind": "parameter", "displayName": "File Exist", "group": 
"producer", "label": "producer", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.file.GenericFileExist", "enum": [ 
"Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": "Override", 
"description": "What to do if a file already exists with the same name. 
Override, which is the default, replaces the exis [...]
+    "flatten": { "kind": "parameter", "displayName": "Flatten", "group": 
"producer", "label": "producer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Flatten is used to flatten the 
file name path to strip any leading paths, so it's just the file name. This 
allows you to consume recursively into sub-directories, but when you eg write 
the files to another directory they will be [...]
+    "jailStartingDirectory": { "kind": "parameter", "displayName": "Jail 
Starting Directory", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": "Used 
for jailing (restricting) writing files to the starting directory (and sub) 
only. This is enabled by default to not allow Camel to write files to outside 
directories (to be more secured out of t [...]
+    "tempFileName": { "kind": "parameter", "displayName": "Temp File Name", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The same as tempPrefix option but offering a 
more fine grained control on the naming of the temporary filename as it uses 
the File Language. The location for tempFilename is relative to the final file 
location in the option 'fileNa [...]
+    "tempPrefix": { "kind": "parameter", "displayName": "Temp Prefix", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "This option is used to write the file using a 
temporary name and then, after the write is complete, rename it to the real 
name. Can be used to identify files being written and also avoid consumers (not 
using exclusive read locks) readin [...]
+    "allowNullBody": { "kind": "parameter", "displayName": "Allow Null Body", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Used to specify if a null body is allowed during file writing. If set to true 
then an empty file will be created, when set to false, and attempting to send a 
null body to the file component, a G [...]
+    "disconnectOnBatchComplete": { "kind": "parameter", "displayName": 
"Disconnect On Batch Complete", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether or not to disconnect from remote 
FTP server right after a Batch upload is complete. disconnectOnBatchComplete 
will only disconnect the current connection to the  [...]
+    "eagerDeleteTargetFile": { "kind": "parameter", "displayName": "Eager 
Delete Target File", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Whether or not to eagerly delete any 
existing target file. This option only applies when you use fileExists=Override 
and the tempFileName option as well. You can use this to disa [...]
+    "keepLastModified": { "kind": "parameter", "displayName": "Keep Last 
Modified", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Will keep the last modified timestamp from the source file (if 
any). Will use the FileConstants.FILE_LAST_MODIFIED header to located the 
timestamp. This header can contain either a java.ut [...]
+    "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start 
Producer", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Whether the producer should be started lazy (on the first 
message). By starting lazy you can use this to allow CamelContext and routes to 
startup in situations where a producer may other [...]
+    "moveExistingFileStrategy": { "kind": "parameter", "displayName": "Move 
Existing File Strategy", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.strategy.FileMoveExistingStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Strategy (Custom Strategy) used to move file with special naming token to use 
when fileExist=Move is configured. By default, there is an  [...]
+    "autoCreate": { "kind": "parameter", "displayName": "Auto Create", 
"group": "advanced", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": true, "description": "Automatically create missing 
directories in the file's pathname. For the file consumer, that means creating 
the starting directory. For the file producer, it means the directory the files 
should be written to." },
+    "connectTimeout": { "kind": "parameter", "displayName": "Connect Timeout", 
"group": "advanced", "label": "advanced", "required": false, "type": 
"duration", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "10000", "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the connect timeout 
for waiting for a connection to be established Used by both FTPClien [...]
+    "maximumReconnectAttempts": { "kind": "parameter", "displayName": "Maximum 
Reconnect Attempts", "group": "advanced", "label": "advanced", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "description": "Specifies the maximum reconnect 
attempts Camel performs when it tries to connect to the remote FTP server. Use 
0 to disable this behavior." },
+    "reconnectDelay": { "kind": "parameter", "displayName": "Reconnect Delay", 
"group": "advanced", "label": "advanced", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "1000", "description": "Delay in millis Camel 
will wait before performing a reconnect attempt." },
+    "throwExceptionOnConnectFailed": { "kind": "parameter", "displayName": 
"Throw Exception On Connect Failed", "group": "advanced", "label": "advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Should an exception be 
thrown if connection failed (exhaust [...]
+    "timeout": { "kind": "parameter", "displayName": "Timeout", "group": 
"advanced", "label": "advanced", "required": false, "type": "duration", 
"javaType": "int", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "30000", "configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Sets the data timeout 
for waiting for reply Used only by FTPClient" },
+    "sdd": { "kind": "parameter", "displayName": "Sdd", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of service SAS token" },
+    "se": { "kind": "parameter", "displayName": "Se", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of SAS token" },
+    "sharedKey": { "kind": "parameter", "displayName": "Shared Key", "group": 
"both", "label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": 
"org.apache.camel.component.file.azure.FilesConfiguration", 
"configurationField": "configuration", "description": "Shared key (storage 
account key)" },
+    "si": { "kind": "parameter", "displayName": "Si", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of service SAS token" },
+    "sig": { "kind": "parameter", "displayName": "Sig", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of SAS token" },
+    "sip": { "kind": "parameter", "displayName": "Sip", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of SAS token" },
+    "sp": { "kind": "parameter", "displayName": "Sp", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of SAS token" },
+    "spr": { "kind": "parameter", "displayName": "Spr", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of SAS token" },
+    "sr": { "kind": "parameter", "displayName": "Sr", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of service SAS token" },
+    "srt": { "kind": "parameter", "displayName": "Srt", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of SAS token" },
+    "ss": { "kind": "parameter", "displayName": "Ss", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of account SAS token" },
+    "st": { "kind": "parameter", "displayName": "St", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of SAS token" },
+    "sv": { "kind": "parameter", "displayName": "Sv", "group": "both", 
"label": "both", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": "org.apache.camel.component.file.azure.FilesToken", 
"configurationField": "token", "description": "part of SAS token" },
+    "antExclude": { "kind": "parameter", "displayName": "Ant Exclude", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Ant style filter exclusion. If both 
antInclude and antExclude are used, antExclude takes precedence over 
antInclude. Multiple exclusions may be specified in comma-delimited format." },
+    "antFilterCaseSensitive": { "kind": "parameter", "displayName": "Ant 
Filter Case Sensitive", "group": "filter", "label": "consumer,filter", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Sets case sensitive flag on ant filter." },
+    "antInclude": { "kind": "parameter", "displayName": "Ant Include", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Ant style filter inclusion. Multiple 
inclusions may be specified in comma-delimited format." },
+    "eagerMaxMessagesPerPoll": { "kind": "parameter", "displayName": "Eager 
Max Messages Per Poll", "group": "filter", "label": "consumer,filter", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "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 per [...]
+    "exclude": { "kind": "parameter", "displayName": "Exclude", "group": 
"filter", "label": "consumer,filter", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Is used to exclude 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 endp [...]
+    "excludeExt": { "kind": "parameter", "displayName": "Exclude Ext", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Is used to exclude files matching file 
extension name (case insensitive). For example to exclude bak files, then use 
excludeExt=bak. Multiple extensions can be separated by comma, for example to 
exclude bak and dat files, use exclu [...]
+    "filter": { "kind": "parameter", "displayName": "Filter", "group": 
"filter", "label": "consumer,filter", "required": false, "type": "object", 
"javaType": 
"org.apache.camel.component.file.GenericFileFilter<com.azure.storage.file.share.models.ShareFileItem>",
 "deprecated": false, "autowired": false, "secret": false, "description": 
"Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. 
Will skip files if filter returns false in its accept() method." },
+    "filterDirectory": { "kind": "parameter", "displayName": "Filter 
Directory", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "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}" },
+    "filterFile": { "kind": "parameter", "displayName": "Filter File", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Filters the file based on Simple 
language. For example to filter on file size, you can use ${file:size} 5000" },
+    "idempotent": { "kind": "parameter", "displayName": "Idempotent", "group": 
"filter", "label": "consumer,filter", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "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 enable [...]
+    "idempotentKey": { "kind": "parameter", "displayName": "Idempotent Key", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "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}" },
+    "idempotentRepository": { "kind": "parameter", "displayName": "Idempotent 
Repository", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "object", "javaType": "org.apache.camel.spi.IdempotentRepository", 
"deprecated": false, "autowired": false, "secret": false, "description": "A 
pluggable repository org.apache.camel.spi.IdempotentRepository which by default 
use MemoryIdempotentRepository if none is specified and idempotent is true." },
+    "include": { "kind": "parameter", "displayName": "Include", "group": 
"filter", "label": "consumer,filter", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "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 endp [...]
+    "includeExt": { "kind": "parameter", "displayName": "Include Ext", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Is used to include files matching file 
extension name (case insensitive). For example to include txt files, then use 
includeExt=txt. Multiple extensions can be separated by comma, for example to 
include txt and xml files, use inclu [...]
+    "maxDepth": { "kind": "parameter", "displayName": "Max Depth", "group": 
"filter", "label": "consumer,filter", "required": false, "type": "integer", 
"javaType": "int", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": 2147483647, "description": "The maximum depth to traverse when 
recursively processing a directory." },
+    "maxMessagesPerPoll": { "kind": "parameter", "displayName": "Max Messages 
Per Poll", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "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 di [...]
+    "minDepth": { "kind": "parameter", "displayName": "Min Depth", "group": 
"filter", "label": "consumer,filter", "required": false, "type": "integer", 
"javaType": "int", "deprecated": false, "autowired": false, "secret": false, 
"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." },
+    "move": { "kind": "parameter", "displayName": "Move", "group": "filter", 
"label": "consumer,filter", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"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." },
+    "exclusiveReadLockStrategy": { "kind": "parameter", "displayName": 
"Exclusive Read Lock Strategy", "group": "lock", "label": "consumer,lock", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy<com.azure.storage.file.share.models.ShareFileItem>",
 "deprecated": false, "autowired": false, "secret": false, "description": 
"Pluggable read-lock as a 
org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implem 
[...]
+    "readLock": { "kind": "parameter", "displayName": "Read Lock", "group": 
"lock", "label": "consumer,lock", "required": false, "type": "string", 
"javaType": "java.lang.String", "enum": [ "none", "markerFile", "fileLock", 
"rename", "changed", "idempotent", "idempotent-changed", "idempotent-rename" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"none", "description": "Used by consumer, to only poll the files if it has 
exclusive read-lock on the file (i.e. th [...]
+    "readLockCheckInterval": { "kind": "parameter", "displayName": "Read Lock 
Check Interval", "group": "lock", "label": "consumer,lock", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "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 [...]
+    "readLockDeleteOrphanLockFiles": { "kind": "parameter", "displayName": 
"Read Lock Delete Orphan Lock Files", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "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 ( [...]
+    "readLockLoggingLevel": { "kind": "parameter", "displayName": "Read Lock 
Logging Level", "group": "lock", "label": "consumer,lock", "required": false, 
"type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ 
"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "DEBUG", "description": 
"Logging level used when a read lock could not be acquired. By default a DEBUG 
is logged. You can change this leve [...]
+    "readLockMarkerFile": { "kind": "parameter", "displayName": "Read Lock 
Marker File", "group": "lock", "label": "consumer,lock", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "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 b [...]
+    "readLockMinAge": { "kind": "parameter", "displayName": "Read Lock Min 
Age", "group": "lock", "label": "consumer,lock", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "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 mi [...]
+    "readLockMinLength": { "kind": "parameter", "displayName": "Read Lock Min 
Length", "group": "lock", "label": "consumer,lock", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "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  [...]
+    "readLockRemoveOnCommit": { "kind": "parameter", "displayName": "Read Lock 
Remove On Commit", "group": "lock", "label": "consumer,lock", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "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 [...]
+    "readLockRemoveOnRollback": { "kind": "parameter", "displayName": "Read 
Lock Remove On Rollback", "group": "lock", "label": "consumer,lock", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "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  [...]
+    "readLockTimeout": { "kind": "parameter", "displayName": "Read Lock 
Timeout", "group": "lock", "label": "consumer,lock", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "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 a [...]
+    "backoffErrorThreshold": { "kind": "parameter", "displayName": "Backoff 
Error Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
error polls (failed due some error) that should happen before the 
backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "kind": "parameter", "displayName": "Backoff 
Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "kind": "parameter", "displayName": "Backoff 
Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "description": "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 agai [...]
+    "delay": { "kind": "parameter", "displayName": "Delay", "group": 
"scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
+    "greedy": { "kind": "parameter", "displayName": "Greedy", "group": 
"scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
+    "initialDelay": { "kind": "parameter", "displayName": "Initial Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 1000, "description": "Milliseconds before the 
first poll starts." },
+    "repeatCount": { "kind": "parameter", "displayName": "Repeat Count", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "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." },
+    "runLoggingLevel": { "kind": "parameter", "displayName": "Run Logging 
Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ 
"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "TRACE", "description": 
"The consumer logs a start\/complete log line when it polls. This option allows 
you to configure the logging level  [...]
+    "scheduledExecutorService": { "kind": "parameter", "displayName": 
"Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
+    "scheduler": { "kind": "parameter", "displayName": "Scheduler", "group": 
"scheduler", "label": "consumer,scheduler", "required": false, "type": 
"object", "javaType": "java.lang.Object", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "none", "description": "To use a cron 
scheduler from either camel-spring or camel-quartz component. Use value spring 
or quartz for built in scheduler" },
+    "schedulerProperties": { "kind": "parameter", "displayName": "Scheduler 
Properties", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.util.Map<java.lang.String, 
java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": 
false, "autowired": false, "secret": false, "description": "To configure 
additional properties when using a custom scheduler or any of the Quartz, 
Spring based scheduler." },
+    "startScheduler": { "kind": "parameter", "displayName": "Start Scheduler", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether the scheduler 
should be auto started." },
+    "timeUnit": { "kind": "parameter", "displayName": "Time Unit", "group": 
"scheduler", "label": "consumer,scheduler", "required": false, "type": 
"object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", 
"MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"MILLISECONDS", "description": "Time unit for initialDelay and delay options." 
},
+    "useFixedDelay": { "kind": "parameter", "displayName": "Use Fixed Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Controls if fixed delay 
or fixed rate is used. See ScheduledExecutorService in JDK for details." },
+    "shuffle": { "kind": "parameter", "displayName": "Shuffle", "group": 
"sort", "label": "consumer,sort", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "To shuffle the list of files 
(sort in random order)" },
+    "sortBy": { "kind": "parameter", "displayName": "Sort By", "group": 
"sort", "label": "consumer,sort", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "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." },
+    "sorter": { "kind": "parameter", "displayName": "Sorter", "group": "sort", 
"label": "consumer,sort", "required": false, "type": "object", "javaType": 
"java.util.Comparator<org.apache.camel.component.file.GenericFile<com.azure.storage.file.share.models.ShareFileItem>>",
 "deprecated": false, "autowired": false, "secret": false, "description": 
"Pluggable sorter as a java.util.Comparator class." }
+  }
+}
diff --git a/components-starter/camel-azure-files-starter/pom.xml 
b/components-starter/camel-azure-files-starter/pom.xml
new file mode 100644
index 00000000000..ce9e59de54f
--- /dev/null
+++ b/components-starter/camel-azure-files-starter/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.camel.springboot</groupId>
+    <artifactId>components-starter</artifactId>
+    <version>3.21.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>camel-azure-files-starter</artifactId>
+  <packaging>jar</packaging>
+  <!--    <name>Camel SB Starters :: Name Here</name>-->
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-azure-files</artifactId>
+      <version>${camel-version}</version>
+    </dependency>
+    <!--START OF GENERATED CODE-->
+    <dependency>
+      <groupId>org.apache.camel.springboot</groupId>
+      <artifactId>camel-core-starter</artifactId>
+    </dependency>
+    <!--END OF GENERATED CODE-->
+  </dependencies>
+</project>
diff --git 
a/components-starter/camel-azure-files-starter/src/main/docs/azure-files.json 
b/components-starter/camel-azure-files-starter/src/main/docs/azure-files.json
new file mode 100644
index 00000000000..5317dddd849
--- /dev/null
+++ 
b/components-starter/camel-azure-files-starter/src/main/docs/azure-files.json
@@ -0,0 +1,50 @@
+{
+  "groups": [
+    {
+      "name": "camel.component.azure-files",
+      "type": 
"org.apache.camel.component.file.azure.springboot.FilesComponentConfiguration",
+      "sourceType": 
"org.apache.camel.component.file.azure.springboot.FilesComponentConfiguration"
+    },
+    {
+      "name": "camel.component.azure-files.customizer",
+      "type": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties",
+      "sourceType": 
"org.apache.camel.component.file.azure.springboot.FilesComponentConfiguration",
+      "sourceMethod": "getCustomizer()"
+    }
+  ],
+  "properties": [
+    {
+      "name": "camel.component.azure-files.autowired-enabled",
+      "type": "java.lang.Boolean",
+      "description": "Whether autowiring is enabled. This is used for 
automatic autowiring options (the option must be marked as autowired) by 
looking up in the registry to find if there is a single instance of matching 
type, which then gets configured on the component. This can be used for 
automatic configuring JDBC data sources, JMS connection factories, AWS Clients, 
etc.",
+      "sourceType": 
"org.apache.camel.component.file.azure.springboot.FilesComponentConfiguration",
+      "defaultValue": true
+    },
+    {
+      "name": "camel.component.azure-files.bridge-error-handler",
+      "type": "java.lang.Boolean",
+      "description": "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.",
+      "sourceType": 
"org.apache.camel.component.file.azure.springboot.FilesComponentConfiguration",
+      "defaultValue": false
+    },
+    {
+      "name": "camel.component.azure-files.customizer.enabled",
+      "type": "java.lang.Boolean",
+      "sourceType": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties"
+    },
+    {
+      "name": "camel.component.azure-files.enabled",
+      "type": "java.lang.Boolean",
+      "description": "Whether to enable auto configuration of the azure-files 
component. This is enabled by default.",
+      "sourceType": 
"org.apache.camel.component.file.azure.springboot.FilesComponentConfiguration"
+    },
+    {
+      "name": "camel.component.azure-files.lazy-start-producer",
+      "type": "java.lang.Boolean",
+      "description": "Whether the producer should be started lazy (on the 
first message). By starting lazy you can use this to allow CamelContext and 
routes to startup in situations where a producer may 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 [...]
+      "sourceType": 
"org.apache.camel.component.file.azure.springboot.FilesComponentConfiguration",
+      "defaultValue": false
+    }
+  ],
+  "hints": []
+}
\ No newline at end of file
diff --git 
a/components-starter/camel-azure-files-starter/src/main/java/org/apache/camel/component/file/azure/springboot/FilesComponentAutoConfiguration.java
 
b/components-starter/camel-azure-files-starter/src/main/java/org/apache/camel/component/file/azure/springboot/FilesComponentAutoConfiguration.java
new file mode 100644
index 00000000000..0b305318faa
--- /dev/null
+++ 
b/components-starter/camel-azure-files-starter/src/main/java/org/apache/camel/component/file/azure/springboot/FilesComponentAutoConfiguration.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.file.azure.springboot;
+
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
+import org.apache.camel.component.file.azure.FilesComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import 
org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.ConditionalOnHierarchicalProperties;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.springboot.maven.SpringBootAutoConfigurationMojo")
+@Configuration(proxyBeanMethods = false)
+@Conditional(ConditionalOnCamelContextAndAutoConfigurationBeans.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,FilesComponentConfiguration.class})
+@ConditionalOnHierarchicalProperties({"camel.component", 
"camel.component.azure-files"})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+public class FilesComponentAutoConfiguration {
+
+    @Autowired
+    private ApplicationContext applicationContext;
+    private final CamelContext camelContext;
+    @Autowired
+    private FilesComponentConfiguration configuration;
+
+    public FilesComponentAutoConfiguration(
+            org.apache.camel.CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
+    @Lazy
+    @Bean
+    public ComponentCustomizer configureFilesComponent() {
+        return new ComponentCustomizer() {
+            @Override
+            public void configure(String name, Component target) {
+                CamelPropertiesHelper.copyProperties(camelContext, 
configuration, target);
+            }
+            @Override
+            public boolean isEnabled(String name, Component target) {
+                return HierarchicalPropertiesEvaluator.evaluate(
+                        applicationContext,
+                        "camel.component.customizer",
+                        "camel.component.azure-files.customizer")
+                    && target instanceof FilesComponent;
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git 
a/components-starter/camel-azure-files-starter/src/main/java/org/apache/camel/component/file/azure/springboot/FilesComponentConfiguration.java
 
b/components-starter/camel-azure-files-starter/src/main/java/org/apache/camel/component/file/azure/springboot/FilesComponentConfiguration.java
new file mode 100644
index 00000000000..1da7ff915b8
--- /dev/null
+++ 
b/components-starter/camel-azure-files-starter/src/main/java/org/apache/camel/component/file/azure/springboot/FilesComponentConfiguration.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.file.azure.springboot;
+
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * Camel Azure Files Component
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.springboot.maven.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.component.azure-files")
+public class FilesComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
+
+    /**
+     * Whether to enable auto configuration of the azure-files component. This
+     * is enabled by default.
+     */
+    private Boolean enabled;
+    /**
+     * 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.
+     */
+    private Boolean bridgeErrorHandler = false;
+    /**
+     * 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.
+     */
+    private Boolean lazyStartProducer = false;
+    /**
+     * Whether autowiring is enabled. This is used for automatic autowiring
+     * options (the option must be marked as autowired) by looking up in the
+     * registry to find if there is a single instance of matching type, which
+     * then gets configured on the component. This can be used for automatic
+     * configuring JDBC data sources, JMS connection factories, AWS Clients,
+     * etc.
+     */
+    private Boolean autowiredEnabled = true;
+
+    public Boolean getBridgeErrorHandler() {
+        return bridgeErrorHandler;
+    }
+
+    public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
+        this.bridgeErrorHandler = bridgeErrorHandler;
+    }
+
+    public Boolean getLazyStartProducer() {
+        return lazyStartProducer;
+    }
+
+    public void setLazyStartProducer(Boolean lazyStartProducer) {
+        this.lazyStartProducer = lazyStartProducer;
+    }
+
+    public Boolean getAutowiredEnabled() {
+        return autowiredEnabled;
+    }
+
+    public void setAutowiredEnabled(Boolean autowiredEnabled) {
+        this.autowiredEnabled = autowiredEnabled;
+    }
+}
\ No newline at end of file
diff --git 
a/components-starter/camel-azure-files-starter/src/main/resources/META-INF/LICENSE.txt
 
b/components-starter/camel-azure-files-starter/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 00000000000..6b0b1270ff0
--- /dev/null
+++ 
b/components-starter/camel-azure-files-starter/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git 
a/components-starter/camel-azure-files-starter/src/main/resources/META-INF/NOTICE.txt
 
b/components-starter/camel-azure-files-starter/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 00000000000..2e215bf2e6b
--- /dev/null
+++ 
b/components-starter/camel-azure-files-starter/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Camel distribution.                    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Please read the different LICENSE files present in the licenses directory of
+   this distribution.
diff --git 
a/components-starter/camel-azure-files-starter/src/main/resources/META-INF/spring.factories
 
b/components-starter/camel-azure-files-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 00000000000..4e8f36c789b
--- /dev/null
+++ 
b/components-starter/camel-azure-files-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,19 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.camel.component.file.azure.springboot.FilesComponentAutoConfiguration
diff --git 
a/components-starter/camel-azure-files-starter/src/main/resources/META-INF/spring.provides
 
b/components-starter/camel-azure-files-starter/src/main/resources/META-INF/spring.provides
new file mode 100644
index 00000000000..2c616312bc6
--- /dev/null
+++ 
b/components-starter/camel-azure-files-starter/src/main/resources/META-INF/spring.provides
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+provides: camel-azure-files
diff --git a/components-starter/pom.xml b/components-starter/pom.xml
index a5eedea1b66..2927d7c2960 100644
--- a/components-starter/pom.xml
+++ b/components-starter/pom.xml
@@ -146,6 +146,7 @@
     <module>camel-aws2-translate-starter</module>
     <module>camel-azure-cosmosdb-starter</module>
     <module>camel-azure-eventhubs-starter</module>
+    <module>camel-azure-files-starter</module>
     <module>camel-azure-key-vault-starter</module>
     <module>camel-azure-servicebus-starter</module>
     <module>camel-azure-storage-blob-starter</module>
diff --git 
a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelAzureFilesTest.java
 
b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelAzureFilesTest.java
new file mode 100644
index 00000000000..a7bdbffd2ab
--- /dev/null
+++ 
b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelAzureFilesTest.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.itest.springboot;
+
+import org.apache.camel.itest.springboot.util.ArquillianPackager;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit5.ArquillianExtension;
+import org.jboss.shrinkwrap.api.Archive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+
+@ExtendWith(ArquillianExtension.class)
+public class CamelAzureFilesTest extends AbstractSpringBootTestSupport {
+
+    @Deployment
+    public static Archive<?> createSpringBootPackage() throws Exception {
+        return ArquillianPackager.springBootPackage(createTestConfig());
+    }
+
+    public static ITestConfig createTestConfig() {
+        return new ITestConfigBuilder()
+                .module(inferModuleName(CamelAzureFilesTest.class))
+                // arquillian fails, but the tests are ok
+                .build();
+    }
+
+    @Test
+    public void componentTests() throws Exception {
+        this.runComponentTest(config, "azure-files");
+
+        this.runModuleUnitTestsIfEnabled(config);
+    }
+
+
+}
diff --git a/tooling/camel-spring-boot-bom/pom.xml 
b/tooling/camel-spring-boot-bom/pom.xml
index eda660547f5..17dcda5c01a 100644
--- a/tooling/camel-spring-boot-bom/pom.xml
+++ b/tooling/camel-spring-boot-bom/pom.xml
@@ -218,6 +218,11 @@
         <artifactId>camel-azure-eventhubs-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.camel.springboot</groupId>
+        <artifactId>camel-azure-files-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.apache.camel.springboot</groupId>
         <artifactId>camel-azure-key-vault-starter</artifactId>
diff --git a/tooling/camel-spring-boot-dependencies/pom.xml 
b/tooling/camel-spring-boot-dependencies/pom.xml
index 425c4323c83..c5c87baeae5 100644
--- a/tooling/camel-spring-boot-dependencies/pom.xml
+++ b/tooling/camel-spring-boot-dependencies/pom.xml
@@ -426,6 +426,11 @@
         <artifactId>camel-azure-eventhubs-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.camel.springboot</groupId>
+        <artifactId>camel-azure-files-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.apache.camel.springboot</groupId>
         <artifactId>camel-azure-key-vault-starter</artifactId>

Reply via email to