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

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

commit 520541a019672fcc21e395654fe2b55c4a851b58
Author: Tom Cunningham <tcunn...@redhat.com>
AuthorDate: Fri Jun 14 20:47:24 2024 -0400

    CAMEL-20679 Make buffer size configurable, file creation HashSets out of 
process
---
 .../org/apache/camel/catalog/components/smb.json   | 43 +++++++--------
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 50 ++++++++++++++++--
 .../camel/component/smb/SmbEndpointConfigurer.java |  6 +++
 .../camel/component/smb/SmbEndpointUriFactory.java |  3 +-
 .../org/apache/camel/component/smb/smb.json        | 43 +++++++--------
 .../camel/component/smb/SmbConfiguration.java      | 12 +++++
 .../apache/camel/component/smb/SmbProducer.java    | 61 ++++++++++++----------
 .../endpoint/dsl/SmbEndpointBuilderFactory.java    | 30 +++++++++++
 .../apache/camel/kotlin/components/SmbUriDsl.kt    | 14 +++++
 9 files changed, 187 insertions(+), 75 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/smb.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/smb.json
index f51cf35fb33..9985bff7376 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/smb.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/smb.json
@@ -41,26 +41,27 @@
     "pollStrategy": { "index": 10, "kind": "parameter", "displayName": "Poll 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the po 
[...]
     "autoCreate": { "index": 11, "kind": "parameter", "displayName": "Auto 
Create", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Whether to create parent 
directory if it does not exist" },
     "fileExist": { "index": 12, "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, "deprecationNote": "", "autowired": false, "secret": 
false, "defaultValue": "Ignore", "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configuration [...]
-    "lazyStartProducer": { "index": 13, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
-    "idempotentRepository": { "index": 14, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository w [...]
-    "smbConfig": { "index": 15, "kind": "parameter", "displayName": "Smb 
Config", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "com.hierynomus.smbj.SmbConfig", "deprecated": false, 
"deprecationNote": "", "autowired": true, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "An optional SMB client 
configuration, can be used to configure client specific [...]
-    "smbIoBean": { "index": 16, "kind": "parameter", "displayName": "Smb Io 
Bean", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.smb.SmbIOBean", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "An optional SMB I\/O bean to use to setup the 
file access attributes when reading\/writi [...]
-    "backoffErrorThreshold": { "index": 17, "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": { "index": 18, "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": { "index": 19, "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 h [...]
-    "delay": { "index": 20, "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": { "index": 21, "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": { "index": 22, "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": { "index": 23, "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": { "index": 24, "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 l [...]
-    "scheduledExecutorService": { "index": 25, "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": { "index": 26, "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": { "index": 27, "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": { "index": 28, "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": { "index": 29, "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": { "index": 30, "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." },
-    "domain": { "index": 31, "kind": "parameter", "displayName": "Domain", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The user domain" },
-    "password": { "index": 32, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The password to access the share" },
-    "username": { "index": 33, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The username required to access the share" }
+    "readBufferSize": { "index": 13, "kind": "parameter", "displayName": "Read 
Buffer Size", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "defaultValue": 2048, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Read buffer size when 
for file being produced" },
+    "lazyStartProducer": { "index": 14, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
+    "idempotentRepository": { "index": 15, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository w [...]
+    "smbConfig": { "index": 16, "kind": "parameter", "displayName": "Smb 
Config", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "com.hierynomus.smbj.SmbConfig", "deprecated": false, 
"deprecationNote": "", "autowired": true, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "An optional SMB client 
configuration, can be used to configure client specific [...]
+    "smbIoBean": { "index": 17, "kind": "parameter", "displayName": "Smb Io 
Bean", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.smb.SmbIOBean", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "An optional SMB I\/O bean to use to setup the 
file access attributes when reading\/writi [...]
+    "backoffErrorThreshold": { "index": 18, "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": { "index": 19, "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": { "index": 20, "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 h [...]
+    "delay": { "index": 21, "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": { "index": 22, "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": { "index": 23, "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": { "index": 24, "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": { "index": 25, "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 l [...]
+    "scheduledExecutorService": { "index": 26, "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": { "index": 27, "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": { "index": 28, "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": { "index": 29, "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": { "index": 30, "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": { "index": 31, "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." },
+    "domain": { "index": 32, "kind": "parameter", "displayName": "Domain", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The user domain" },
+    "password": { "index": 33, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The password to access the share" },
+    "username": { "index": 34, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The username required to access the share" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
index ece74309fe5..e92a71aeca2 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
@@ -75,7 +75,7 @@ Configures batch-processing resequence eip.
     <xs:annotation>
       <xs:documentation xml:lang="en">
 <![CDATA[
-Define custom beans that can be used in your Camel routes and in general.
+Calls a Java bean
 ]]>
       </xs:documentation>
     </xs:annotation>
@@ -3973,10 +3973,50 @@ Enables random backoff. Default value: false
     <xs:complexContent>
       <xs:extension base="tns:noOutputDefinition">
         <xs:sequence/>
-        <xs:attribute name="ref" type="xs:string"/>
-        <xs:attribute name="method" type="xs:string"/>
-        <xs:attribute name="beanType" type="xs:string"/>
-        <xs:attribute name="scope" type="xs:string"/>
+        <xs:attribute name="ref" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets a reference to an existing bean to use, which is looked up from the 
registry.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="method" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the method name on the bean to use.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="beanType" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the class name (fully qualified) of the bean to use.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="scope" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Scope of bean. When using singleton scope (default) the bean is created or 
looked up only once and reused for the
+lifetime of the endpoint. The bean should be thread-safe in case concurrent 
threads is calling the bean at the same
+time. When using request scope the bean is created or looked up once per 
request (exchange). This can be used if you
+want to store state on a bean while processing a request and you want to call 
the same bean instance multiple times
+while processing the request. The bean does not have to be thread-safe as the 
instance is only called from the same
+request. When using prototype scope, then the bean will be looked up or 
created per call. However in case of lookup then
+this is delegated to the bean registry such as Spring or CDI (if in use), 
which depends on their configuration can act
+as either singleton or prototype scope. So when using prototype scope then 
this depends on the bean registry
+implementation. Default value: Singleton
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
diff --git 
a/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
index fcdafb1a741..d8efbcdb041 100644
--- 
a/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
+++ 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
@@ -52,6 +52,8 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "path": target.getConfiguration().setPath(property(camelContext, 
java.lang.String.class, value)); return true;
         case "pollstrategy":
         case "pollStrategy": target.setPollStrategy(property(camelContext, 
org.apache.camel.spi.PollingConsumerPollStrategy.class, value)); return true;
+        case "readbuffersize":
+        case "readBufferSize": 
target.getConfiguration().setReadBufferSize(property(camelContext, int.class, 
value)); return true;
         case "recursive": 
target.getConfiguration().setRecursive(property(camelContext, boolean.class, 
value)); return true;
         case "repeatcount":
         case "repeatCount": target.setRepeatCount(property(camelContext, 
long.class, value)); return true;
@@ -118,6 +120,8 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "path": return java.lang.String.class;
         case "pollstrategy":
         case "pollStrategy": return 
org.apache.camel.spi.PollingConsumerPollStrategy.class;
+        case "readbuffersize":
+        case "readBufferSize": return int.class;
         case "recursive": return boolean.class;
         case "repeatcount":
         case "repeatCount": return long.class;
@@ -180,6 +184,8 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "path": return target.getConfiguration().getPath();
         case "pollstrategy":
         case "pollStrategy": return target.getPollStrategy();
+        case "readbuffersize":
+        case "readBufferSize": return 
target.getConfiguration().getReadBufferSize();
         case "recursive": return target.getConfiguration().isRecursive();
         case "repeatcount":
         case "repeatCount": return target.getRepeatCount();
diff --git 
a/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointUriFactory.java
 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointUriFactory.java
index d7987a8c2a2..fd2922cc47d 100644
--- 
a/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointUriFactory.java
+++ 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointUriFactory.java
@@ -23,7 +23,7 @@ public class SmbEndpointUriFactory extends 
org.apache.camel.support.component.En
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(34);
+        Set<String> props = new HashSet<>(35);
         props.add("autoCreate");
         props.add("backoffErrorThreshold");
         props.add("backoffIdleThreshold");
@@ -43,6 +43,7 @@ public class SmbEndpointUriFactory extends 
org.apache.camel.support.component.En
         props.add("path");
         props.add("pollStrategy");
         props.add("port");
+        props.add("readBufferSize");
         props.add("recursive");
         props.add("repeatCount");
         props.add("runLoggingLevel");
diff --git 
a/components/camel-smb/src/generated/resources/META-INF/org/apache/camel/component/smb/smb.json
 
b/components/camel-smb/src/generated/resources/META-INF/org/apache/camel/component/smb/smb.json
index f51cf35fb33..9985bff7376 100644
--- 
a/components/camel-smb/src/generated/resources/META-INF/org/apache/camel/component/smb/smb.json
+++ 
b/components/camel-smb/src/generated/resources/META-INF/org/apache/camel/component/smb/smb.json
@@ -41,26 +41,27 @@
     "pollStrategy": { "index": 10, "kind": "parameter", "displayName": "Poll 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the po 
[...]
     "autoCreate": { "index": 11, "kind": "parameter", "displayName": "Auto 
Create", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Whether to create parent 
directory if it does not exist" },
     "fileExist": { "index": 12, "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, "deprecationNote": "", "autowired": false, "secret": 
false, "defaultValue": "Ignore", "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configuration [...]
-    "lazyStartProducer": { "index": 13, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
-    "idempotentRepository": { "index": 14, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository w [...]
-    "smbConfig": { "index": 15, "kind": "parameter", "displayName": "Smb 
Config", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "com.hierynomus.smbj.SmbConfig", "deprecated": false, 
"deprecationNote": "", "autowired": true, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "An optional SMB client 
configuration, can be used to configure client specific [...]
-    "smbIoBean": { "index": 16, "kind": "parameter", "displayName": "Smb Io 
Bean", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.smb.SmbIOBean", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "An optional SMB I\/O bean to use to setup the 
file access attributes when reading\/writi [...]
-    "backoffErrorThreshold": { "index": 17, "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": { "index": 18, "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": { "index": 19, "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 h [...]
-    "delay": { "index": 20, "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": { "index": 21, "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": { "index": 22, "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": { "index": 23, "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": { "index": 24, "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 l [...]
-    "scheduledExecutorService": { "index": 25, "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": { "index": 26, "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": { "index": 27, "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": { "index": 28, "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": { "index": 29, "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": { "index": 30, "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." },
-    "domain": { "index": 31, "kind": "parameter", "displayName": "Domain", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The user domain" },
-    "password": { "index": 32, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The password to access the share" },
-    "username": { "index": 33, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The username required to access the share" }
+    "readBufferSize": { "index": 13, "kind": "parameter", "displayName": "Read 
Buffer Size", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "defaultValue": 2048, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Read buffer size when 
for file being produced" },
+    "lazyStartProducer": { "index": 14, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
+    "idempotentRepository": { "index": 15, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository w [...]
+    "smbConfig": { "index": 16, "kind": "parameter", "displayName": "Smb 
Config", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "com.hierynomus.smbj.SmbConfig", "deprecated": false, 
"deprecationNote": "", "autowired": true, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "An optional SMB client 
configuration, can be used to configure client specific [...]
+    "smbIoBean": { "index": 17, "kind": "parameter", "displayName": "Smb Io 
Bean", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.smb.SmbIOBean", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "An optional SMB I\/O bean to use to setup the 
file access attributes when reading\/writi [...]
+    "backoffErrorThreshold": { "index": 18, "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": { "index": 19, "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": { "index": 20, "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 h [...]
+    "delay": { "index": 21, "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": { "index": 22, "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": { "index": 23, "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": { "index": 24, "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": { "index": 25, "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 l [...]
+    "scheduledExecutorService": { "index": 26, "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": { "index": 27, "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": { "index": 28, "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": { "index": 29, "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": { "index": 30, "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": { "index": 31, "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." },
+    "domain": { "index": 32, "kind": "parameter", "displayName": "Domain", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The user domain" },
+    "password": { "index": 33, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The password to access the share" },
+    "username": { "index": 34, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The username required to access the share" }
   }
 }
diff --git 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConfiguration.java
 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConfiguration.java
index 9c0725ba97d..40845490c1b 100644
--- 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConfiguration.java
+++ 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConfiguration.java
@@ -39,6 +39,10 @@ public class SmbConfiguration {
               defaultValue = "false")
     private boolean autoCreate;
 
+    @Metadata(required = false, defaultValue = "2048")
+    @UriParam(label = "producer", description = "Read buffer size when for 
file being produced", defaultValue = "2048")
+    private int readBufferSize;
+
     @Metadata(required = true)
     @UriParam(description = "The path, within the share, to consume the files 
from")
     private String path;
@@ -161,4 +165,12 @@ public class SmbConfiguration {
     public void setAutoCreate(boolean autoCreate) {
         this.autoCreate = autoCreate;
     }
+
+    public void setReadBufferSize(int readBufferSize) {
+        this.readBufferSize = readBufferSize;
+    }
+
+    public int getReadBufferSize() {
+        return readBufferSize;
+    }
 }
diff --git 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbProducer.java
 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbProducer.java
index 0762698a77f..8661001da8a 100644
--- 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbProducer.java
+++ 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbProducer.java
@@ -53,6 +53,13 @@ public class SmbProducer extends DefaultProducer {
     private Session session;
     private final SMBClient smbClient;
 
+    HashSet<AccessMask> GENERIC_ALL_ACCESSMASK = new 
HashSet<AccessMask>(Arrays.asList(AccessMask.GENERIC_ALL));
+    HashSet<AccessMask> FILE_WRITE_DATA_ACCESSMASK = new 
HashSet<AccessMask>(Arrays.asList(AccessMask.FILE_WRITE_DATA));
+    HashSet<SMB2CreateOptions> FILE_DIRECTORY_CREATE_OPTIONS
+            = new 
HashSet<>(Arrays.asList(SMB2CreateOptions.FILE_DIRECTORY_FILE));
+    HashSet<FileAttributes> FILE_ATTRIBUTES_NORMAL
+            = new 
HashSet<FileAttributes>(Arrays.asList(FileAttributes.FILE_ATTRIBUTE_NORMAL));
+
     protected SmbProducer(final SmbEndpoint endpoint) {
         super(endpoint);
 
@@ -72,7 +79,6 @@ public class SmbProducer extends DefaultProducer {
     @Override
     protected void doStart() throws Exception {
         LOGGER.debug("Producer SMB client started");
-
         super.doStart();
     }
 
@@ -85,6 +91,13 @@ public class SmbProducer extends DefaultProducer {
         return result;
     }
 
+    private int getReadBufferSize() {
+        int readBufferSize = 
getEndpoint().getConfiguration().getReadBufferSize();
+        readBufferSize = (readBufferSize <= 0) ? 2048 : readBufferSize;
+
+        return readBufferSize;
+    }
+
     protected void connectIfNecessary(Exchange exchange) throws IOException {
         Connection connection = smbClient.connect(getEndpoint().getHostname(), 
getEndpoint().getPort());
 
@@ -157,38 +170,34 @@ public class SmbProducer extends DefaultProducer {
         SmbConfiguration configuration = getEndpoint().getConfiguration();
         String path = (configuration.getPath() == null) ? "" : 
configuration.getPath();
 
-        LOGGER.debug("storeFile() fileName [" + fileName + "]");
-
         try {
             connectIfNecessary(exchange);
 
-            java.io.File file = new java.io.File(path + java.io.File.separator 
+ fileName);
+            java.io.File file = new java.io.File(path, fileName);
 
             DiskShare share = (DiskShare) 
session.connectShare(getEndpoint().getShareName());
             createDirectory(share, file);
 
             GenericFileExist gfe = determineFileExist(exchange);
-
-            SMB2CreateDisposition scd = SMB2CreateDisposition.FILE_OPEN;
-            HashSet<AccessMask> accessMask = new 
HashSet<AccessMask>(Arrays.asList(AccessMask.GENERIC_ALL));
-            HashSet<SMB2CreateOptions> createOptions = new 
HashSet<>(Arrays.asList(SMB2CreateOptions.FILE_DIRECTORY_FILE));
-            HashSet<FileAttributes> fileAttributes
-                    = new 
HashSet<FileAttributes>(Arrays.asList(FileAttributes.FILE_ATTRIBUTE_NORMAL));
+            File shareFile = null;
 
             // File existence modes
             switch (gfe) {
                 case Override:
-                    scd = SMB2CreateDisposition.FILE_OVERWRITE_IF;
-                    break;
-                case Fail:
-                    scd = SMB2CreateDisposition.FILE_CREATE;
-                    if (share.fileExists(file.getPath())) {
-                        doFail(file.getPath());
-                    }
+                    shareFile = share.openFile(file.getPath(),
+                            FILE_WRITE_DATA_ACCESSMASK,
+                            FILE_ATTRIBUTES_NORMAL,
+                            SMB2ShareAccess.ALL,
+                            SMB2CreateDisposition.FILE_OVERWRITE_IF,
+                            FILE_DIRECTORY_CREATE_OPTIONS);
                     break;
                 case Append:
-                    scd = SMB2CreateDisposition.FILE_OPEN_IF;
-                    accessMask = new 
HashSet<AccessMask>(Arrays.asList(AccessMask.FILE_WRITE_DATA));
+                    shareFile = share.openFile(file.getPath(),
+                            FILE_WRITE_DATA_ACCESSMASK,
+                            FILE_ATTRIBUTES_NORMAL,
+                            SMB2ShareAccess.ALL,
+                            SMB2CreateDisposition.FILE_OPEN_IF,
+                            FILE_DIRECTORY_CREATE_OPTIONS);
                     break;
                 case Ignore:
                     if (share.fileExists(file.getPath())) {
@@ -196,25 +205,23 @@ public class SmbProducer extends DefaultProducer {
                         return;
                     }
                     break;
+                case Fail:
+                    if (share.fileExists(file.getPath())) {
+                        doFail(file.getPath());
+                    }
+                    break;
                 case Move:
                     throw new UnsupportedOperationException("Move is not 
implemented for this producer at the moment");
                 case TryRename:
                     throw new UnsupportedOperationException("TryRename is not 
implemented for this producer at the moment");
             }
 
-            File shareFile = share.openFile(file.getPath(),
-                    accessMask,
-                    fileAttributes,
-                    SMB2ShareAccess.ALL,
-                    scd,
-                    createOptions);
-
             InputStream is = (exchange.getMessage(InputStream.class) == null)
                     ? exchange.getMessage().getBody(InputStream.class) : 
exchange.getMessage(InputStream.class);
 
             // In order to provide append option, we need to use offset / 
write with shareFile rather
             // than with outputstream
-            int buffer = 2048;
+            int buffer = getReadBufferSize();
             long fileOffset = 0;
 
             byte[] byteBuffer = new byte[buffer];
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SmbEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SmbEndpointBuilderFactory.java
index 5d303e5539b..8d28700b7ad 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SmbEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SmbEndpointBuilderFactory.java
@@ -997,6 +997,36 @@ public interface SmbEndpointBuilderFactory {
             doSetProperty("fileExist", fileExist);
             return this;
         }
+        /**
+         * Read buffer size when for file being produced.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Default: 2048
+         * Group: producer
+         * 
+         * @param readBufferSize the value to set
+         * @return the dsl builder
+         */
+        default SmbEndpointProducerBuilder readBufferSize(int readBufferSize) {
+            doSetProperty("readBufferSize", readBufferSize);
+            return this;
+        }
+        /**
+         * Read buffer size when for file being produced.
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Default: 2048
+         * Group: producer
+         * 
+         * @param readBufferSize the value to set
+         * @return the dsl builder
+         */
+        default SmbEndpointProducerBuilder readBufferSize(String 
readBufferSize) {
+            doSetProperty("readBufferSize", readBufferSize);
+            return this;
+        }
         /**
          * The user domain.
          * 
diff --git 
a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/SmbUriDsl.kt
 
b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/SmbUriDsl.kt
index ae59ba7eb67..9790d93f92d 100644
--- 
a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/SmbUriDsl.kt
+++ 
b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/SmbUriDsl.kt
@@ -199,6 +199,20 @@ public class SmbUriDsl(
     it.property("fileExist", fileExist)
   }
 
+  /**
+   * Read buffer size when for file being produced
+   */
+  public fun readBufferSize(readBufferSize: String) {
+    it.property("readBufferSize", readBufferSize)
+  }
+
+  /**
+   * Read buffer size when for file being produced
+   */
+  public fun readBufferSize(readBufferSize: Int) {
+    it.property("readBufferSize", readBufferSize.toString())
+  }
+
   /**
    * 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

Reply via email to