This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 461f474ea39 CAMEL-19211: camel-sql - Make it possible to configure
custom RowMapper
461f474ea39 is described below
commit 461f474ea39857cf4c4cb024bc2bcd56aea4748f
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 24c8d8e53e9..f519613ac39 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 24c8d8e53e9..f519613ac39 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 cb1173e9910..b72bb052666 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:
+ *
<code>org.apache.camel.component.sql.RowMapperFactory</code> 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;
}