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
commit 4ef0dc7bfdc02eaf546e7172835c38896e16c5b4 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Dec 7 11:33:09 2021 +0100 CAMEL-17288: camel-core - Route template parameters dash vs camel case keys and required --- .../main/java/org/apache/camel/impl/DefaultModel.java | 15 +++++++++++++-- .../test/resources/kamelets/error-handler.kamelet.yaml | 18 +++++++++--------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java index 83465a8..86d12af 100644 --- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java +++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java @@ -334,6 +334,7 @@ public class DefaultModel implements Model { throw new IllegalArgumentException("Cannot find RouteTemplate with id " + routeTemplateId); } + // support both camelCase and kebab-case keys final Map<String, Object> prop = new HashMap<>(); // include default values first from the template (and validate that we have inputs for all required parameters) if (target.getTemplateParameters() != null) { @@ -341,7 +342,7 @@ public class DefaultModel implements Model { for (RouteTemplateParameterDefinition temp : target.getTemplateParameters()) { if (temp.getDefaultValue() != null) { - prop.put(temp.getName(), temp.getDefaultValue()); + addProperty(prop, temp.getName(), temp.getDefaultValue()); } else { if (temp.isRequired() && !routeTemplateContext.hasParameter(temp.getName())) { // this is a required parameter which is missing @@ -358,7 +359,7 @@ public class DefaultModel implements Model { // then override with user parameters part 1 if (routeTemplateContext.getParameters() != null) { - prop.putAll(routeTemplateContext.getParameters()); + routeTemplateContext.getParameters().forEach((k, v) -> addProperty(prop, k, v)); } // route template context should include default template parameters from the target route template // so it has all parameters available @@ -415,6 +416,16 @@ public class DefaultModel implements Model { return def.getId(); } + private static void addProperty(Map<String, Object> prop, String key, Object value) { + prop.put(key, value); + // support also camelCase and kebab-case because route templates (kamelets) + // can be defined using different key styles + key = StringHelper.dashToCamelCase(key); + prop.put(key, value); + key = StringHelper.camelCaseToDash(key); + prop.put(key, value); + } + private void addTemplateBeans(RouteTemplateContext routeTemplateContext, RouteTemplateDefinition target) throws Exception { for (RouteTemplateBeanDefinition b : target.getTemplateBeans()) { final Map<String, Object> props = new HashMap<>(); diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/kamelets/error-handler.kamelet.yaml b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/kamelets/error-handler.kamelet.yaml index f088fb2..7fcd6bd 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/kamelets/error-handler.kamelet.yaml +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/kamelets/error-handler.kamelet.yaml @@ -30,27 +30,27 @@ spec: - kafka-service-account-secret - log-message properties: - kafkaBrokers: + kafka-brokers: title: Kafka Brokers description: the bootstrap server type: string example: "xyz-ins--rplssqfz-yyyyyyy-crojg.bf2.kafka.my-clud-service.com:443" - kafkaTopic: + kafka-topic: title: Kafka Topic description: the DLC topic type: string example: "my-dlc" - kafkaServiceAccountId: + kafka-service-account-id: title: Service Account ID description: the SA to use type: string example: "srvc-acct-xxxxxx-519b-453f-9f68-yyyyyyyyy" - kafkaServiceAccountSecret: + kafka-service-account-secret: title: Service Account Secret description: the SA secrete to use type: string example: "xxxxxxxxx-46c7-4c6c-a753-yyyyyyyyyyyyyyy" - logMessage: + log-message: title: Message description: A message warning to log type: string @@ -61,13 +61,13 @@ spec: steps: # First step: send to the DLC for future processing - to: - uri: kafka:{{kafkaTopic}} + uri: kafka:{{kafka-topic}} parameters: - brokers: "{{kafkaBrokers}}" + brokers: "{{kafka-brokers}}" security-protocol: SASL_SSL sasl-mechanism: PLAIN - sasl-jaas-config: "org.apache.kafka.common.security.plain.PlainLoginModule required username={{kafkaServiceAccountId}} password={{kafkaServiceAccountSecret}};" + sasl-jaas-config: "org.apache.kafka.common.security.plain.PlainLoginModule required username={{kafka-service-account-id}} password={{kafka-service-account-secret}};" # Log an error message to notify about the failure - set-body: - constant: "{{logMessage}} - worry not, the event is stored in the DLC" + constant: "{{log-message}} - worry not, the event is stored in the DLC" - to: "log:error-sink"