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

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


The following commit(s) were added to refs/heads/camel-3.x by this push:
     new 99c3f36734e CAMEL-19211: camel-sql - Make it possible to configure 
custom RowMapper
99c3f36734e is described below

commit 99c3f36734e2117d231b8ab27285ff53f286191b
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Mar 28 14:13:06 2023 +0200

    CAMEL-19211: camel-sql - Make it possible to configure custom RowMapper
---
 .../org/apache/camel/catalog/components/sql.json       |  1 +
 .../camel/component/sql/SqlComponentConfigurer.java    |  8 +++++++-
 .../resources/org/apache/camel/component/sql/sql.json  |  1 +
 .../apache/camel/component/sql/DefaultSqlEndpoint.java | 11 +++++++++--
 .../org/apache/camel/component/sql/SqlComponent.java   | 18 ++++++++++++++++++
 .../component/dsl/SqlComponentBuilderFactory.java      | 17 +++++++++++++++++
 6 files changed, 53 insertions(+), 3 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql.json
index 1dfc5b71ff3..8488a6886eb 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql.json
@@ -26,6 +26,7 @@
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error 
Handler", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Allows for bridging the 
consumer to the Camel routing Error Handler, which mean any exceptions occurred 
while the consumer is trying to pickup incoming messages, or the likes, will 
now be processed as a me [...]
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during star [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired 
Enabled", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether autowiring is 
enabled. This is used for automatic autowiring options (the option must be 
marked as autowired) by looking up in the registry to find if there is a single 
instance of matching type, which t [...]
+    "rowMapperFactory": { "kind": "property", "displayName": "Row Mapper 
Factory", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.sql.RowMapperFactory", 
"deprecated": false, "autowired": true, "secret": false, "description": 
"Factory for creating RowMapper" },
     "usePlaceholder": { "kind": "property", "displayName": "Use Placeholder", 
"group": "advanced", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": true, "description": "Sets whether to use placeholder 
and replace all placeholder characters with sign in the SQL queries. This 
option is default true" }
   },
   "headers": {
diff --git 
a/components/camel-sql/src/generated/java/org/apache/camel/component/sql/SqlComponentConfigurer.java
 
b/components/camel-sql/src/generated/java/org/apache/camel/component/sql/SqlComponentConfigurer.java
index d9c7487cf00..9e8a5437d9d 100644
--- 
a/components/camel-sql/src/generated/java/org/apache/camel/component/sql/SqlComponentConfigurer.java
+++ 
b/components/camel-sql/src/generated/java/org/apache/camel/component/sql/SqlComponentConfigurer.java
@@ -29,6 +29,8 @@ public class SqlComponentConfigurer extends 
PropertyConfigurerSupport implements
         case "dataSource": target.setDataSource(property(camelContext, 
javax.sql.DataSource.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
+        case "rowmapperfactory":
+        case "rowMapperFactory": 
target.setRowMapperFactory(property(camelContext, 
org.apache.camel.component.sql.RowMapperFactory.class, value)); return true;
         case "useplaceholder":
         case "usePlaceholder": target.setUsePlaceholder(property(camelContext, 
boolean.class, value)); return true;
         default: return false;
@@ -37,7 +39,7 @@ public class SqlComponentConfigurer extends 
PropertyConfigurerSupport implements
 
     @Override
     public String[] getAutowiredNames() {
-        return new String[]{"dataSource"};
+        return new String[]{"dataSource","rowMapperFactory"};
     }
 
     @Override
@@ -51,6 +53,8 @@ public class SqlComponentConfigurer extends 
PropertyConfigurerSupport implements
         case "dataSource": return javax.sql.DataSource.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
+        case "rowmapperfactory":
+        case "rowMapperFactory": return 
org.apache.camel.component.sql.RowMapperFactory.class;
         case "useplaceholder":
         case "usePlaceholder": return boolean.class;
         default: return null;
@@ -69,6 +73,8 @@ public class SqlComponentConfigurer extends 
PropertyConfigurerSupport implements
         case "dataSource": return target.getDataSource();
         case "lazystartproducer":
         case "lazyStartProducer": return target.isLazyStartProducer();
+        case "rowmapperfactory":
+        case "rowMapperFactory": return target.getRowMapperFactory();
         case "useplaceholder":
         case "usePlaceholder": return target.isUsePlaceholder();
         default: return null;
diff --git 
a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
 
b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
index 1dfc5b71ff3..8488a6886eb 100644
--- 
a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
+++ 
b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
@@ -26,6 +26,7 @@
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error 
Handler", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Allows for bridging the 
consumer to the Camel routing Error Handler, which mean any exceptions occurred 
while the consumer is trying to pickup incoming messages, or the likes, will 
now be processed as a me [...]
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during star [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired 
Enabled", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether autowiring is 
enabled. This is used for automatic autowiring options (the option must be 
marked as autowired) by looking up in the registry to find if there is a single 
instance of matching type, which t [...]
+    "rowMapperFactory": { "kind": "property", "displayName": "Row Mapper 
Factory", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.sql.RowMapperFactory", 
"deprecated": false, "autowired": true, "secret": false, "description": 
"Factory for creating RowMapper" },
     "usePlaceholder": { "kind": "property", "displayName": "Use Placeholder", 
"group": "advanced", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": true, "description": "Sets whether to use placeholder 
and replace all placeholder characters with sign in the SQL queries. This 
option is default true" }
   },
   "headers": {
diff --git 
a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
 
b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
index b5d47c7770b..527eaaea68c 100644
--- 
a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
+++ 
b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
@@ -125,10 +125,9 @@ public abstract class DefaultSqlEndpoint extends 
DefaultPollingEndpoint {
     @UriParam(label = "advanced", prefix = "template.", multiValue = true,
               description = "Configures the Spring JdbcTemplate with the 
key/values from the Map")
     private Map<String, Object> templateOptions;
-
     @UriParam(label = "advanced",
               description = "Factory for creating RowMapper")
-    private RowMapperFactory rowMapperFactory = new DefaultRowMapperFactory();
+    private RowMapperFactory rowMapperFactory;
 
     public DefaultSqlEndpoint() {
     }
@@ -527,4 +526,12 @@ public abstract class DefaultSqlEndpoint extends 
DefaultPollingEndpoint {
         }
     }
 
+    @Override
+    protected void doInit() throws Exception {
+        super.doInit();
+
+        if (rowMapperFactory == null) {
+            rowMapperFactory = new DefaultRowMapperFactory();
+        }
+    }
 }
diff --git 
a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java
 
b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java
index 2cd861415ce..0b6f50443e5 100644
--- 
a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java
+++ 
b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java
@@ -40,6 +40,8 @@ public class SqlComponent extends DefaultComponent {
     private DataSource dataSource;
     @Metadata(label = "advanced", defaultValue = "true")
     private boolean usePlaceholder = true;
+    @Metadata(label = "advanced", autowired = true)
+    private RowMapperFactory rowMapperFactory;
 
     public SqlComponent() {
     }
@@ -85,6 +87,10 @@ public class SqlComponent extends DefaultComponent {
         if (onConsumeBatchComplete != null && usePlaceholder) {
             onConsumeBatchComplete = 
onConsumeBatchComplete.replaceAll(parameterPlaceholderSubstitute, "?");
         }
+        RowMapperFactory factory = getAndRemoveParameter(parameters, 
"rowMapperFactory", RowMapperFactory.class);
+        if (factory == null) {
+            factory = rowMapperFactory;
+        }
 
         // create endpoint
         SqlEndpoint endpoint = new SqlEndpoint(uri, this);
@@ -94,6 +100,7 @@ public class SqlComponent extends DefaultComponent {
         endpoint.setOnConsume(onConsume);
         endpoint.setOnConsumeFailed(onConsumeFailed);
         endpoint.setOnConsumeBatchComplete(onConsumeBatchComplete);
+        endpoint.setRowMapperFactory(factory);
         setProperties(endpoint, parameters);
 
         // endpoint configured data source takes precedence
@@ -141,4 +148,15 @@ public class SqlComponent extends DefaultComponent {
     public boolean isUsePlaceholder() {
         return usePlaceholder;
     }
+
+    public RowMapperFactory getRowMapperFactory() {
+        return rowMapperFactory;
+    }
+
+    /**
+     * Factory for creating RowMapper
+     */
+    public void setRowMapperFactory(RowMapperFactory rowMapperFactory) {
+        this.rowMapperFactory = rowMapperFactory;
+    }
 }
diff --git 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SqlComponentBuilderFactory.java
 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SqlComponentBuilderFactory.java
index e6ee1e9d7a1..99db35c31b8 100644
--- 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SqlComponentBuilderFactory.java
+++ 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SqlComponentBuilderFactory.java
@@ -127,6 +127,22 @@ public interface SqlComponentBuilderFactory {
             doSetProperty("autowiredEnabled", autowiredEnabled);
             return this;
         }
+        /**
+         * Factory for creating RowMapper.
+         * 
+         * The option is a:
+         * 
&lt;code&gt;org.apache.camel.component.sql.RowMapperFactory&lt;/code&gt; type.
+         * 
+         * Group: advanced
+         * 
+         * @param rowMapperFactory the value to set
+         * @return the dsl builder
+         */
+        default SqlComponentBuilder rowMapperFactory(
+                org.apache.camel.component.sql.RowMapperFactory 
rowMapperFactory) {
+            doSetProperty("rowMapperFactory", rowMapperFactory);
+            return this;
+        }
         /**
          * Sets whether to use placeholder and replace all placeholder
          * characters with sign in the SQL queries. This option is default 
true.
@@ -164,6 +180,7 @@ public interface SqlComponentBuilderFactory {
             case "bridgeErrorHandler": ((SqlComponent) 
component).setBridgeErrorHandler((boolean) value); return true;
             case "lazyStartProducer": ((SqlComponent) 
component).setLazyStartProducer((boolean) value); return true;
             case "autowiredEnabled": ((SqlComponent) 
component).setAutowiredEnabled((boolean) value); return true;
+            case "rowMapperFactory": ((SqlComponent) 
component).setRowMapperFactory((org.apache.camel.component.sql.RowMapperFactory)
 value); return true;
             case "usePlaceholder": ((SqlComponent) 
component).setUsePlaceholder((boolean) value); return true;
             default: return false;
             }

Reply via email to