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

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

commit 80f1e21f44048b45d284429df1ae95475291f1a9
Author: Croway <federico.mariani.1...@gmail.com>
AuthorDate: Thu Apr 4 16:20:31 2024 +0200

    Add Smb client configuration
---
 .../org/apache/camel/catalog/components/smb.json   | 37 +++++++++++-----------
 .../camel/component/smb/SmbEndpointConfigurer.java | 11 +++++++
 .../camel/component/smb/SmbEndpointUriFactory.java |  3 +-
 .../org/apache/camel/component/smb/smb.json        | 37 +++++++++++-----------
 .../camel/component/smb/SmbConfiguration.java      | 15 +++++++++
 .../apache/camel/component/smb/SmbConsumer.java    |  8 ++++-
 .../apache/camel/component/smb/SmbComponentIT.java | 10 +++++-
 .../endpoint/dsl/SmbEndpointBuilderFactory.java    | 33 +++++++++++++++++++
 .../apache/camel/kotlin/components/SmbUriDsl.kt    |  8 +++++
 9 files changed, 123 insertions(+), 39 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 4991d5fe38f..28089712668 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
@@ -38,23 +38,24 @@
     "exceptionHandler": { "index": 8, "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 def [...]
     "exchangePattern": { "index": 9, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
     "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 
[...]
-    "smbIoBean": { "index": 11, "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": 12, "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": 13, "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": 14, "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": 15, "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": 16, "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": 17, "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": 18, "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": 19, "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": 20, "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": 21, "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": 22, "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": 23, "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": 24, "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": 25, "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": 26, "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": 27, "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": 28, "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" }
+    "smbConfig": { "index": 11, "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": 12, "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": 13, "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": 14, "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": 15, "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": 16, "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": 17, "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": 18, "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": 19, "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": 20, "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": 21, "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": 22, "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": 23, "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": 24, "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": 25, "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": 26, "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": 27, "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": 28, "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": 29, "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/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
index 5dee425eea5..03718603042 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
@@ -57,6 +57,8 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "searchPattern": 
target.getConfiguration().setSearchPattern(property(camelContext, 
java.lang.String.class, value)); return true;
         case "sendemptymessagewhenidle":
         case "sendEmptyMessageWhenIdle": 
target.setSendEmptyMessageWhenIdle(property(camelContext, boolean.class, 
value)); return true;
+        case "smbconfig":
+        case "smbConfig": 
target.getConfiguration().setSmbConfig(property(camelContext, 
com.hierynomus.smbj.SmbConfig.class, value)); return true;
         case "smbiobean":
         case "smbIoBean": 
target.getConfiguration().setSmbIoBean(property(camelContext, 
org.apache.camel.component.smb.SmbIOBean.class, value)); return true;
         case "startscheduler":
@@ -70,6 +72,11 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         }
     }
 
+    @Override
+    public String[] getAutowiredNames() {
+        return new String[]{"smbConfig"};
+    }
+
     @Override
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
@@ -109,6 +116,8 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "searchPattern": return java.lang.String.class;
         case "sendemptymessagewhenidle":
         case "sendEmptyMessageWhenIdle": return boolean.class;
+        case "smbconfig":
+        case "smbConfig": return com.hierynomus.smbj.SmbConfig.class;
         case "smbiobean":
         case "smbIoBean": return 
org.apache.camel.component.smb.SmbIOBean.class;
         case "startscheduler":
@@ -162,6 +171,8 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "searchPattern": return 
target.getConfiguration().getSearchPattern();
         case "sendemptymessagewhenidle":
         case "sendEmptyMessageWhenIdle": return 
target.isSendEmptyMessageWhenIdle();
+        case "smbconfig":
+        case "smbConfig": return target.getConfiguration().getSmbConfig();
         case "smbiobean":
         case "smbIoBean": return target.getConfiguration().getSmbIoBean();
         case "startscheduler":
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 09413729f60..579c569a29f 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
@@ -21,7 +21,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<>(29);
+        Set<String> props = new HashSet<>(30);
         props.add("backoffErrorThreshold");
         props.add("backoffIdleThreshold");
         props.add("backoffMultiplier");
@@ -46,6 +46,7 @@ public class SmbEndpointUriFactory extends 
org.apache.camel.support.component.En
         props.add("searchPattern");
         props.add("sendEmptyMessageWhenIdle");
         props.add("shareName");
+        props.add("smbConfig");
         props.add("smbIoBean");
         props.add("startScheduler");
         props.add("timeUnit");
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 4991d5fe38f..28089712668 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
@@ -38,23 +38,24 @@
     "exceptionHandler": { "index": 8, "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 def [...]
     "exchangePattern": { "index": 9, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
     "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 
[...]
-    "smbIoBean": { "index": 11, "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": 12, "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": 13, "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": 14, "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": 15, "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": 16, "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": 17, "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": 18, "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": 19, "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": 20, "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": 21, "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": 22, "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": 23, "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": 24, "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": 25, "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": 26, "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": 27, "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": 28, "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" }
+    "smbConfig": { "index": 11, "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": 12, "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": 13, "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": 14, "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": 15, "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": 16, "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": 17, "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": 18, "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": 19, "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": 20, "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": 21, "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": 22, "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": 23, "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": 24, "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": 25, "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": 26, "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": 27, "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": 28, "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": 29, "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 6247cf10772..08d283ad186 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
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.smb;
 
+import com.hierynomus.smbj.SmbConfig;
 import org.apache.camel.spi.IdempotentRepository;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
@@ -52,6 +53,12 @@ public class SmbConfiguration {
     protected IdempotentRepository idempotentRepository
             = 
MemoryIdempotentRepository.memoryIdempotentRepository(DEFAULT_IDEMPOTENT_CACHE_SIZE);
 
+    @Metadata(autowired = true)
+    @UriParam(label = "advanced",
+              description = "An optional SMB client configuration, can be used 
to configure client specific "
+                            + " configurations, like timeouts")
+    private SmbConfig smbConfig;
+
     public String getUsername() {
         return username;
     }
@@ -107,4 +114,12 @@ public class SmbConfiguration {
     public void setIdempotentRepository(IdempotentRepository 
idempotentRepository) {
         this.idempotentRepository = idempotentRepository;
     }
+
+    public SmbConfig getSmbConfig() {
+        return smbConfig;
+    }
+
+    public void setSmbConfig(SmbConfig smbConfig) {
+        this.smbConfig = smbConfig;
+    }
 }
diff --git 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConsumer.java
 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConsumer.java
index d9bb35aba00..130dd88de3c 100644
--- 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConsumer.java
+++ 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConsumer.java
@@ -32,12 +32,18 @@ public class SmbConsumer extends ScheduledPollConsumer {
     private final SmbEndpoint endpoint;
     private final SmbConfiguration configuration;
 
-    private final SMBClient smbClient = new SMBClient();
+    private final SMBClient smbClient;
 
     public SmbConsumer(SmbEndpoint endpoint, Processor processor) {
         super(endpoint, processor);
         this.endpoint = endpoint;
         this.configuration = endpoint.getConfiguration();
+
+        if (this.configuration.getSmbConfig() != null) {
+            smbClient = new SMBClient(this.configuration.getSmbConfig());
+        } else {
+            smbClient = new SMBClient();
+        }
     }
 
     @Override
diff --git 
a/components/camel-smb/src/test/java/org/apache/camel/component/smb/SmbComponentIT.java
 
b/components/camel-smb/src/test/java/org/apache/camel/component/smb/SmbComponentIT.java
index e90aceca8a5..ed39e0a24f6 100644
--- 
a/components/camel-smb/src/test/java/org/apache/camel/component/smb/SmbComponentIT.java
+++ 
b/components/camel-smb/src/test/java/org/apache/camel/component/smb/SmbComponentIT.java
@@ -18,7 +18,9 @@ package org.apache.camel.component.smb;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.concurrent.TimeUnit;
 
+import com.hierynomus.smbj.SmbConfig;
 import com.hierynomus.smbj.share.File;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
@@ -58,7 +60,13 @@ public class SmbComponentIT extends CamelTestSupport {
             }
 
             public void configure() {
-                fromF("smb:%s/%s?username=%s&password=%s&path=/", 
service.address(), service.shareName(),
+                SmbConfig config = SmbConfig.builder()
+                        .withTimeout(120, TimeUnit.SECONDS) // Timeout sets 
Read, Write, and Transact timeouts (default is 60 seconds)
+                        .withSoTimeout(180, TimeUnit.SECONDS) // Socket 
Timeout (default is 0 seconds, blocks forever)
+                        .build();
+                context.getRegistry().bind("smbConfig", config);
+
+                
fromF("smb:%s/%s?username=%s&password=%s&path=/&smbConfig=#smbConfig", 
service.address(), service.shareName(),
                         service.userName(), service.password())
                         .process(this::process)
                         .to("mock:result");
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 c350e586ed1..51fc374f974 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
@@ -825,6 +825,39 @@ public interface SmbEndpointBuilderFactory {
             doSetProperty("pollStrategy", pollStrategy);
             return this;
         }
+        /**
+         * An optional SMB client configuration, can be used to configure 
client
+         * specific configurations, like timeouts.
+         * 
+         * The option is a:
+         * &lt;code&gt;com.hierynomus.smbj.SmbConfig&lt;/code&gt; type.
+         * 
+         * Group: advanced
+         * 
+         * @param smbConfig the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSmbEndpointBuilder smbConfig(
+                com.hierynomus.smbj.SmbConfig smbConfig) {
+            doSetProperty("smbConfig", smbConfig);
+            return this;
+        }
+        /**
+         * An optional SMB client configuration, can be used to configure 
client
+         * specific configurations, like timeouts.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;com.hierynomus.smbj.SmbConfig&lt;/code&gt; type.
+         * 
+         * Group: advanced
+         * 
+         * @param smbConfig the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSmbEndpointBuilder smbConfig(String smbConfig) {
+            doSetProperty("smbConfig", smbConfig);
+            return this;
+        }
         /**
          * An optional SMB I/O bean to use to setup the file access attributes
          * when reading/writing a file.
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 b65823b805a..95ccc197484 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
@@ -172,6 +172,14 @@ public class SmbUriDsl(
     it.property("pollStrategy", pollStrategy)
   }
 
+  /**
+   * An optional SMB client configuration, can be used to configure client 
specific configurations,
+   * like timeouts
+   */
+  public fun smbConfig(smbConfig: String) {
+    it.property("smbConfig", smbConfig)
+  }
+
   /**
    * An optional SMB I/O bean to use to setup the file access attributes when 
reading/writing a file
    */


Reply via email to