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

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

commit eed3b8da4a9327584d106700513ce95c3969ccb5
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Dec 18 11:07:11 2025 +0100

    CAMEL-22431: camel-once - A component for development to trigger only once
---
 .../component/once/OnceEndpointConfigurer.java     |  4 +--
 .../org/apache/camel/component/once/once.json      |  4 +--
 .../apache/camel/component/once/OnceComponent.java | 30 ++++++++++++++++++++--
 .../apache/camel/component/once/OnceEndpoint.java  | 12 ++++-----
 .../camel-yaml-dsl/src/main/docs/yaml-dsl.adoc     |  8 +++---
 5 files changed, 42 insertions(+), 16 deletions(-)

diff --git 
a/components/camel-once/src/generated/java/org/apache/camel/component/once/OnceEndpointConfigurer.java
 
b/components/camel-once/src/generated/java/org/apache/camel/component/once/OnceEndpointConfigurer.java
index ab494fa200b2..429f04d53e20 100644
--- 
a/components/camel-once/src/generated/java/org/apache/camel/component/once/OnceEndpointConfigurer.java
+++ 
b/components/camel-once/src/generated/java/org/apache/camel/component/once/OnceEndpointConfigurer.java
@@ -75,8 +75,8 @@ public class OnceEndpointConfigurer extends 
PropertyConfigurerSupport implements
     @Override
     public Object getCollectionValueType(Object target, String name, boolean 
ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
-        case "headers": return java.lang.Object.class;
-        case "variables": return java.lang.Object.class;
+        case "headers": return java.lang.String.class;
+        case "variables": return java.lang.String.class;
         default: return null;
         }
     }
diff --git 
a/components/camel-once/src/generated/resources/META-INF/org/apache/camel/component/once/once.json
 
b/components/camel-once/src/generated/resources/META-INF/org/apache/camel/component/once/once.json
index 881706bc8d62..ad5cb5270114 100644
--- 
a/components/camel-once/src/generated/resources/META-INF/org/apache/camel/component/once/once.json
+++ 
b/components/camel-once/src/generated/resources/META-INF/org/apache/camel/component/once/once.json
@@ -32,11 +32,11 @@
   "properties": {
     "name": { "index": 0, "kind": "path", "displayName": "Name", "group": 
"consumer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The logical name" },
     "body": { "index": 1, "kind": "parameter", "displayName": "Body", "group": 
"consumer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "supportFileReference": true, "description": "The data 
to use as message body. You can externalize the data by using file: or 
classpath: as prefix and specify the location of the file." },
-    "headers": { "index": 2, "kind": "parameter", "displayName": "Headers", 
"group": "consumer", "label": "", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": 
"header.", "multiValue": true, "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "supportFileReference": true, 
"description": "The data to use as message headers as key=value pairs. You can 
externalize the data by using file: or classpath: [...]
+    "headers": { "index": 2, "kind": "parameter", "displayName": "Headers", 
"group": "consumer", "label": "", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": 
"header.", "multiValue": true, "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "supportFileReference": true, 
"description": "The data to use as message headers as key=value pairs. You can 
externalize the data by using file: or classpath: [...]
     "bridgeErrorHandler": { "index": 3, "kind": "parameter", "displayName": 
"Bridge Error Handler", "group": "consumer (advanced)", "label": 
"consumer,advanced", "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 (if possible) occurred 
while the Camel consumer is trying to pickup incoming  [...]
     "exceptionHandler": { "index": 4, "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": 5, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "enum", "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." },
     "delay": { "index": 6, "kind": "parameter", "displayName": "Delay", 
"group": "advanced", "label": "advanced", "required": false, "type": "integer", 
"javaType": "long", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": 1000, "description": "The number of milliseconds to wait before 
triggering. The default value is 1000." },
-    "variables": { "index": 7, "kind": "parameter", "displayName": 
"Variables", "group": "advanced", "label": "advanced", "required": false, 
"type": "object", "javaType": "java.util.Map<java.lang.String, 
java.lang.Object>", "prefix": "variable.", "multiValue": true, "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"supportFileReference": true, "description": "The data to use as exchange 
variables as key=value pairs. You can externalize the data by using fi [...]
+    "variables": { "index": 7, "kind": "parameter", "displayName": 
"Variables", "group": "advanced", "label": "advanced", "required": false, 
"type": "object", "javaType": "java.util.Map<java.lang.String, 
java.lang.String>", "prefix": "variable.", "multiValue": true, "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"supportFileReference": true, "description": "The data to use as exchange 
variables as key=value pairs. You can externalize the data by using fi [...]
   }
 }
diff --git 
a/components/camel-once/src/main/java/org/apache/camel/component/once/OnceComponent.java
 
b/components/camel-once/src/main/java/org/apache/camel/component/once/OnceComponent.java
index 8b2849f07c3e..fd4a9f2df334 100644
--- 
a/components/camel-once/src/main/java/org/apache/camel/component/once/OnceComponent.java
+++ 
b/components/camel-once/src/main/java/org/apache/camel/component/once/OnceComponent.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.once;
 
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.apache.camel.Endpoint;
@@ -37,8 +38,33 @@ public class OnceComponent extends DefaultComponent {
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
         OnceEndpoint answer = new OnceEndpoint(uri, this, remaining);
         answer.setDelay(delay);
-        answer.setHeaders(PropertiesHelper.extractProperties(parameters, 
"header."));
-        answer.setVariables(PropertiesHelper.extractProperties(parameters, 
"variable."));
+
+        Map<String, String> headers = 
getAndRemoveOrResolveReferenceParameter(parameters, "headers", Map.class);
+        Map<String, Object> map = 
PropertiesHelper.extractProperties(parameters, "header.");
+        if (map != null && !map.isEmpty()) {
+            if (headers == null) {
+                headers = new LinkedHashMap<>();
+            }
+            for (Map.Entry<String, Object> me : map.entrySet()) {
+                headers.put(me.getKey(), me.getValue().toString());
+            }
+        }
+        if (headers != null && !headers.isEmpty()) {
+            answer.setHeaders(headers);
+        }
+        Map<String, String> variables = 
getAndRemoveOrResolveReferenceParameter(parameters, "variables", Map.class);
+        map = PropertiesHelper.extractProperties(parameters, "variable.");
+        if (map != null && !map.isEmpty()) {
+            if (variables == null) {
+                variables = new LinkedHashMap<>();
+            }
+            for (Map.Entry<String, Object> me : map.entrySet()) {
+                variables.put(me.getKey(), me.getValue().toString());
+            }
+        }
+        if (variables != null && !variables.isEmpty()) {
+            answer.setVariables(variables);
+        }
         setProperties(answer, parameters);
         return answer;
     }
diff --git 
a/components/camel-once/src/main/java/org/apache/camel/component/once/OnceEndpoint.java
 
b/components/camel-once/src/main/java/org/apache/camel/component/once/OnceEndpoint.java
index 997a22ef5a40..0960eb47b74b 100644
--- 
a/components/camel-once/src/main/java/org/apache/camel/component/once/OnceEndpoint.java
+++ 
b/components/camel-once/src/main/java/org/apache/camel/component/once/OnceEndpoint.java
@@ -44,10 +44,10 @@ public class OnceEndpoint extends DefaultEndpoint {
     private String body;
     @UriParam(multiValue = true, prefix = "header.")
     @Metadata(supportFileReference = true)
-    private Map<String, Object> headers;
+    private Map<String, String> headers;
     @UriParam(label = "advanced", multiValue = true, prefix = "variable.")
     @Metadata(supportFileReference = true)
-    private Map<String, Object> variables;
+    private Map<String, String> variables;
 
     public OnceEndpoint() {
     }
@@ -119,15 +119,15 @@ public class OnceEndpoint extends DefaultEndpoint {
      * The data to use as message headers as key=value pairs. You can 
externalize the data by using file: or classpath:
      * as prefix and specify the location of the file.
      */
-    public Map<String, Object> getHeaders() {
+    public Map<String, String> getHeaders() {
         return headers;
     }
 
-    public void setHeaders(Map<String, Object> headers) {
+    public void setHeaders(Map<String, String> headers) {
         this.headers = headers;
     }
 
-    public Map<String, Object> getVariables() {
+    public Map<String, String> getVariables() {
         return variables;
     }
 
@@ -135,7 +135,7 @@ public class OnceEndpoint extends DefaultEndpoint {
      * The data to use as exchange variables as key=value pairs. You can 
externalize the data by using file: or
      * classpath: as prefix and specify the location of the file.
      */
-    public void setVariables(Map<String, Object> variables) {
+    public void setVariables(Map<String, String> variables) {
         this.variables = variables;
     }
 }
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/docs/yaml-dsl.adoc 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/docs/yaml-dsl.adoc
index 39613b850240..ce35c681d64c 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/docs/yaml-dsl.adoc
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/docs/yaml-dsl.adoc
@@ -139,18 +139,18 @@ To define an endpoint with the YAML dsl you have two 
options:
 *Available as of Camel 4.15*
 
 It is now possible to inline Maps in the `parameters` section. However Camel 
components rarely have options
-that are Map based, but when they do this makes it easier to use. For example 
the plc4j component allow to
+that are Map based, but when they do this makes it easier to use. For example 
the plc4x component allow to
 configure _tags_ as a Map:
 
 [source,yaml]
 ----
 - from:
-    uri: "timer://tick"
+    uri: "timer:tick"
     parameters:
-      period: "1s"
+      period: "1000"
     steps:
       - to:
-          uri: "plc4j"
+          uri: "plc4x"
           parameters:
             driver: "some driver url here"
             tags:

Reply via email to