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 a8329f1927724b55021a3f7e60a2c18edab1d6ca
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Dec 18 10:34:56 2025 +0100

    CAMEL-22431: camel-once - A component for development to trigger only once
---
 components/camel-once/pom.xml                      |  5 ++
 .../component/once/OnceComponentConfigurer.java    |  3 +
 .../org/apache/camel/component/once/once.json      |  3 +-
 .../camel-once/src/main/docs/once-component.adoc   | 41 ++++++++++++++
 .../apache/camel/component/once/OnceComponent.java | 13 ++++-
 .../apache/camel/component/once/OnceConsumer.java  | 66 ++++++++++++++++------
 .../component/once/OnceBodyAndHeaderFileTest.java  |  2 +-
 .../component/once/OnceBodyAndHeaderTest.java      |  5 +-
 .../once/OnceBodyAndVariableFileTest.java          |  2 +-
 .../component/once/OnceBodyAndVariableTest.java    |  2 +-
 ...yAndHeaderTest.java => OnceGroovyFileTest.java} |  9 ++-
 ...HeaderTest.java => OnceSimpleDisabledTest.java} | 10 ++--
 ...yAndHeaderTest.java => OnceSimpleFileTest.java} |  9 ++-
 ...eBodyAndHeaderTest.java => OnceSimpleTest.java} |  8 +--
 .../camel-once/src/test/resources/calc.groovy      | 17 ++++++
 .../camel-once/src/test/resources/letter.txt       |  1 +
 16 files changed, 153 insertions(+), 43 deletions(-)

diff --git a/components/camel-once/pom.xml b/components/camel-once/pom.xml
index 0a5449df1e9f..33b4bd67568b 100644
--- a/components/camel-once/pom.xml
+++ b/components/camel-once/pom.xml
@@ -45,5 +45,10 @@
             <artifactId>camel-test-junit5</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-groovy</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git 
a/components/camel-once/src/generated/java/org/apache/camel/component/once/OnceComponentConfigurer.java
 
b/components/camel-once/src/generated/java/org/apache/camel/component/once/OnceComponentConfigurer.java
index 9ac516e44da7..50efcb4bbcbf 100644
--- 
a/components/camel-once/src/generated/java/org/apache/camel/component/once/OnceComponentConfigurer.java
+++ 
b/components/camel-once/src/generated/java/org/apache/camel/component/once/OnceComponentConfigurer.java
@@ -28,6 +28,7 @@ public class OnceComponentConfigurer extends 
PropertyConfigurerSupport implement
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": 
target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); 
return true;
         case "delay": target.setDelay(property(camelContext, long.class, 
value)); return true;
+        case "languages": target.setLanguages(property(camelContext, 
boolean.class, value)); return true;
         default: return false;
         }
     }
@@ -40,6 +41,7 @@ public class OnceComponentConfigurer extends 
PropertyConfigurerSupport implement
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
         case "delay": return long.class;
+        case "languages": return boolean.class;
         default: return null;
         }
     }
@@ -53,6 +55,7 @@ public class OnceComponentConfigurer extends 
PropertyConfigurerSupport implement
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return target.isBridgeErrorHandler();
         case "delay": return target.getDelay();
+        case "languages": return target.isLanguages();
         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 3dbbeeaae5fa..881706bc8d62 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
@@ -26,7 +26,8 @@
   "componentProperties": {
     "bridgeErrorHandler": { "index": 0, "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 (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
     "autowiredEnabled": { "index": 1, "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 t [...]
-    "delay": { "index": 2, "kind": "property", "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." }
+    "delay": { "index": 2, "kind": "property", "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." },
+    "languages": { "index": 3, "kind": "property", "displayName": "Languages", 
"group": "advanced", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": true, "description": "Whether Camel languages are 
supported such as simple,groovy." }
   },
   "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" },
diff --git a/components/camel-once/src/main/docs/once-component.adoc 
b/components/camel-once/src/main/docs/once-component.adoc
index 7ef15a74ad86..0d78e2662f70 100644
--- a/components/camel-once/src/main/docs/once-component.adoc
+++ b/components/camel-once/src/main/docs/once-component.adoc
@@ -75,6 +75,47 @@ from("once:tick?body=world&header.foo=abc&header.bar=123")
 
 You can do the same for variables with `variable.<key>`.
 
+=== Using custom languages
+
+You can use the Camel languages such as simple, or groovy when specifying 
body, headers, and variables.
+
+The once component will set the data in the following order:
+
+- variables
+- headers
+- body
+
+This makes it possible to use groovy or simple language for setting the 
message body, based
+on data from the variables and headers.
+
+For example:
+
+[source,java]
+----
+from("once:tick?body=language:groovy:file:src/test/resources/calc.groovy&variable.amount=123")
+        .to("mock:result");
+----
+
+You must use `language:groovy:` as prefix when using languages. And you can 
combine this with loading from file.
+The `calc.groovy` file is as follows:
+
+[source,groovy]
+----
+variable.amount * 3
+----
+
+As you can see this just tells groovy to multiply the amount variable with 3.
+
+=== Automatic type conversion
+
+The body, header, and variables will automatically be converted to the best 
suitable type for boolean and integers:
+
+- boolean
+- int
+- long
+
+And for any other its `String` or the output from executing a language.
+
 === Firing as soon as possible
 
 By default, the component is fired after 1 seconds when Camel has been fully 
started.
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 f050fec0eebf..8b2849f07c3e 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
@@ -30,7 +30,8 @@ public class OnceComponent extends DefaultComponent {
     @Metadata(label = "advanced", defaultValue = "1000")
     private long delay = 1000;
 
-    // TOOD: option to support groovy/simple language etc
+    @Metadata(label = "advanced", defaultValue = "true")
+    private boolean languages = true;
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
@@ -55,4 +56,14 @@ public class OnceComponent extends DefaultComponent {
         this.delay = delay;
     }
 
+    public boolean isLanguages() {
+        return languages;
+    }
+
+    /**
+     * Whether Camel languages are supported such as simple,groovy.
+     */
+    public void setLanguages(boolean languages) {
+        this.languages = languages;
+    }
 }
diff --git 
a/components/camel-once/src/main/java/org/apache/camel/component/once/OnceConsumer.java
 
b/components/camel-once/src/main/java/org/apache/camel/component/once/OnceConsumer.java
index be57bce140f9..5ac3e8c5e1b8 100644
--- 
a/components/camel-once/src/main/java/org/apache/camel/component/once/OnceConsumer.java
+++ 
b/components/camel-once/src/main/java/org/apache/camel/component/once/OnceConsumer.java
@@ -22,8 +22,10 @@ import java.util.TimerTask;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
+import org.apache.camel.NoSuchLanguageException;
 import org.apache.camel.Processor;
 import org.apache.camel.StartupListener;
+import org.apache.camel.spi.Language;
 import org.apache.camel.support.DefaultConsumer;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.util.StringHelper;
@@ -85,24 +87,25 @@ public class OnceConsumer extends DefaultConsumer 
implements StartupListener {
         public void run() {
             Exchange exchange = createExchange(false);
             try {
-                Object body = resolveData(endpoint.getBody());
-                exchange.getMessage().setBody(body);
-                if (endpoint.getHeaders() != null) {
-                    for (var e : endpoint.getHeaders().entrySet()) {
-                        Object v = resolveData(e.getValue());
+                // variables,headers,and body last
+                if (endpoint.getVariables() != null) {
+                    for (var e : endpoint.getVariables().entrySet()) {
+                        Object v = resolveData(exchange, e.getValue());
                         if (v != null) {
-                            exchange.getMessage().setHeader(e.getKey(), v);
+                            exchange.setVariable(e.getKey(), v);
                         }
                     }
                 }
-                if (endpoint.getVariables() != null) {
-                    for (var e : endpoint.getVariables().entrySet()) {
-                        Object v = resolveData(e.getValue());
+                if (endpoint.getHeaders() != null) {
+                    for (var e : endpoint.getHeaders().entrySet()) {
+                        Object v = resolveData(exchange, e.getValue());
                         if (v != null) {
-                            exchange.setVariable(e.getKey(), v);
+                            exchange.getMessage().setHeader(e.getKey(), v);
                         }
                     }
                 }
+                Object body = resolveData(exchange, endpoint.getBody());
+                exchange.getMessage().setBody(body);
                 getProcessor().process(exchange);
             } catch (Exception e) {
                 exchange.setException(e);
@@ -119,20 +122,51 @@ public class OnceConsumer extends DefaultConsumer 
implements StartupListener {
         }
     }
 
-    private Object resolveData(Object data) throws Exception {
+    private Object resolveData(Exchange exchange, Object data) throws 
Exception {
         String answer = data instanceof String ? data.toString() : null;
+
+        // if languages is supported then you can prefix with simple:xxx or 
groovy:xxx to let Camel know
+        Language lan = null;
+        if (answer != null && endpoint.getComponent().isLanguages() && 
answer.startsWith("language:")) {
+            String text = answer.substring(9);
+            String prefix = StringHelper.before(text, ":");
+            if (prefix != null) {
+                try {
+                    lan = camelContext.resolveLanguage(prefix);
+                    answer = StringHelper.after(text, ":");
+                } catch (NoSuchLanguageException e) {
+                    // ignore it's not a language
+                }
+            }
+        }
+
         if (ResourceHelper.hasScheme(answer)) {
             try (InputStream is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, answer)) {
                 answer = 
camelContext.getTypeConverter().mandatoryConvertTo(String.class, is);
             }
         }
-        if (answer != null) {
-            answer = camelContext.resolvePropertyPlaceholders(answer);
+
+        if (answer != null && lan != null) {
+            return lan.createExpression(answer).evaluate(exchange, 
Object.class);
         }
+
+        // data may be boolean, integer, or literal
+        if ("true".equalsIgnoreCase(answer)) {
+            return true;
+        } else if ("false".equalsIgnoreCase(answer)) {
+            return false;
+        } else {
+            Object val = 
camelContext.getTypeConverter().tryConvertTo(Integer.class, exchange, data);
+            if (val != null) {
+                return val;
+            }
+            val = camelContext.getTypeConverter().tryConvertTo(Long.class, 
exchange, data);
+            if (val != null) {
+                return val;
+            }
+        }
+
         return answer;
     }
 
-    private static boolean isSimpleLanguage(String pattern) {
-        return StringHelper.hasStartToken(pattern, "simple");
-    }
 }
diff --git 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderFileTest.java
 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderFileTest.java
index 6490ef1ea6f8..c666487a0f1c 100644
--- 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderFileTest.java
+++ 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderFileTest.java
@@ -28,7 +28,7 @@ public class OnceBodyAndHeaderFileTest extends 
CamelTestSupport {
     public void testOnce() throws Exception {
         getMockEndpoint("mock:result").expectedBodiesReceived("1,jack", 
"2,moe");
         getMockEndpoint("mock:result").expectedHeaderReceived("foo", "abc");
-        getMockEndpoint("mock:result").expectedHeaderReceived("bar", "456");
+        getMockEndpoint("mock:result").expectedHeaderReceived("bar", 456);
 
         MockEndpoint.assertIsSatisfied(context);
     }
diff --git 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
index a3c8683715df..a2f02681dc9d 100644
--- 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
+++ 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
@@ -28,7 +28,8 @@ public class OnceBodyAndHeaderTest extends CamelTestSupport {
     public void testOnce() throws Exception {
         getMockEndpoint("mock:result").expectedBodiesReceived("world");
         getMockEndpoint("mock:result").expectedHeaderReceived("foo", "abc");
-        getMockEndpoint("mock:result").expectedHeaderReceived("bar", "123");
+        getMockEndpoint("mock:result").expectedHeaderReceived("bar", 123);
+        getMockEndpoint("mock:result").expectedHeaderReceived("priority", 
true);
 
         MockEndpoint.assertIsSatisfied(context);
     }
@@ -38,7 +39,7 @@ public class OnceBodyAndHeaderTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                
from("once:tick?delay=-1&body=world&header.foo=abc&header.bar=123").to("mock:result");
+                
from("once:tick?delay=-1&body=world&header.foo=abc&header.bar=123&header.priority=true").to("mock:result");
             }
         };
     }
diff --git 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndVariableFileTest.java
 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndVariableFileTest.java
index 7c1354a3e3b8..7f244cf122fd 100644
--- 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndVariableFileTest.java
+++ 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndVariableFileTest.java
@@ -28,7 +28,7 @@ public class OnceBodyAndVariableFileTest extends 
CamelTestSupport {
     public void testOnce() throws Exception {
         getMockEndpoint("mock:result").expectedBodiesReceived("1,jack", 
"2,moe");
         getMockEndpoint("mock:result").expectedHeaderReceived("foo", "abc");
-        getMockEndpoint("mock:result").expectedVariableReceived("bar", "456");
+        getMockEndpoint("mock:result").expectedVariableReceived("bar", 456);
 
         MockEndpoint.assertIsSatisfied(context);
     }
diff --git 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndVariableTest.java
 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndVariableTest.java
index 366d5e2b40fe..18eb26f7ff78 100644
--- 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndVariableTest.java
+++ 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndVariableTest.java
@@ -28,7 +28,7 @@ public class OnceBodyAndVariableTest extends CamelTestSupport 
{
     public void testOnce() throws Exception {
         getMockEndpoint("mock:result").expectedBodiesReceived("world");
         getMockEndpoint("mock:result").expectedHeaderReceived("foo", "abc");
-        getMockEndpoint("mock:result").expectedVariableReceived("bar", "123");
+        getMockEndpoint("mock:result").expectedVariableReceived("bar", 123);
 
         MockEndpoint.assertIsSatisfied(context);
     }
diff --git 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceGroovyFileTest.java
similarity index 78%
copy from 
components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
copy to 
components/camel-once/src/test/java/org/apache/camel/component/once/OnceGroovyFileTest.java
index a3c8683715df..5af24e45eaf7 100644
--- 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
+++ 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceGroovyFileTest.java
@@ -22,13 +22,11 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-public class OnceBodyAndHeaderTest extends CamelTestSupport {
+public class OnceGroovyFileTest extends CamelTestSupport {
 
     @Test
     public void testOnce() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("world");
-        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "abc");
-        getMockEndpoint("mock:result").expectedHeaderReceived("bar", "123");
+        getMockEndpoint("mock:result").expectedBodiesReceived(369);
 
         MockEndpoint.assertIsSatisfied(context);
     }
@@ -38,7 +36,8 @@ public class OnceBodyAndHeaderTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                
from("once:tick?delay=-1&body=world&header.foo=abc&header.bar=123").to("mock:result");
+                
from("once:tick?delay=-1&body=language:groovy:file:src/test/resources/calc.groovy&variable.amount=123")
+                        .to("mock:result");
             }
         };
     }
diff --git 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleDisabledTest.java
similarity index 78%
copy from 
components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
copy to 
components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleDisabledTest.java
index a3c8683715df..4a41355d0527 100644
--- 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
+++ 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleDisabledTest.java
@@ -22,13 +22,11 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-public class OnceBodyAndHeaderTest extends CamelTestSupport {
+public class OnceSimpleDisabledTest extends CamelTestSupport {
 
     @Test
     public void testOnce() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("world");
-        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "abc");
-        getMockEndpoint("mock:result").expectedHeaderReceived("bar", "123");
+        
getMockEndpoint("mock:result").expectedBodiesReceived("language:simple:${camelId}");
 
         MockEndpoint.assertIsSatisfied(context);
     }
@@ -38,7 +36,9 @@ public class OnceBodyAndHeaderTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                
from("once:tick?delay=-1&body=world&header.foo=abc&header.bar=123").to("mock:result");
+                context.getComponent("once", 
OnceComponent.class).setLanguages(false);
+
+                
from("once:tick?delay=-1&body=language:simple:${camelId}").to("mock:result");
             }
         };
     }
diff --git 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleFileTest.java
similarity index 78%
copy from 
components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
copy to 
components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleFileTest.java
index a3c8683715df..6765d899f450 100644
--- 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
+++ 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleFileTest.java
@@ -22,13 +22,12 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-public class OnceBodyAndHeaderTest extends CamelTestSupport {
+public class OnceSimpleFileTest extends CamelTestSupport {
 
     @Test
     public void testOnce() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("world");
-        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "abc");
-        getMockEndpoint("mock:result").expectedHeaderReceived("bar", "123");
+        getMockEndpoint("mock:result")
+                .expectedBodiesReceived("Hello this is " + context.getName() + 
" from " + context.getRoutes().get(0).getId());
 
         MockEndpoint.assertIsSatisfied(context);
     }
@@ -38,7 +37,7 @@ public class OnceBodyAndHeaderTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                
from("once:tick?delay=-1&body=world&header.foo=abc&header.bar=123").to("mock:result");
+                
from("once:tick?delay=-1&body=language:simple:file:src/test/resources/letter.txt").to("mock:result");
             }
         };
     }
diff --git 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleTest.java
similarity index 78%
copy from 
components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
copy to 
components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleTest.java
index a3c8683715df..d0748db259e2 100644
--- 
a/components/camel-once/src/test/java/org/apache/camel/component/once/OnceBodyAndHeaderTest.java
+++ 
b/components/camel-once/src/test/java/org/apache/camel/component/once/OnceSimpleTest.java
@@ -22,13 +22,11 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-public class OnceBodyAndHeaderTest extends CamelTestSupport {
+public class OnceSimpleTest extends CamelTestSupport {
 
     @Test
     public void testOnce() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("world");
-        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "abc");
-        getMockEndpoint("mock:result").expectedHeaderReceived("bar", "123");
+        
getMockEndpoint("mock:result").expectedBodiesReceived(context.getName());
 
         MockEndpoint.assertIsSatisfied(context);
     }
@@ -38,7 +36,7 @@ public class OnceBodyAndHeaderTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                
from("once:tick?delay=-1&body=world&header.foo=abc&header.bar=123").to("mock:result");
+                
from("once:tick?delay=-1&body=language:simple:${camelId}").to("mock:result");
             }
         };
     }
diff --git a/components/camel-once/src/test/resources/calc.groovy 
b/components/camel-once/src/test/resources/calc.groovy
new file mode 100644
index 000000000000..3490ed55237a
--- /dev/null
+++ b/components/camel-once/src/test/resources/calc.groovy
@@ -0,0 +1,17 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+variable.amount * 3
\ No newline at end of file
diff --git a/components/camel-once/src/test/resources/letter.txt 
b/components/camel-once/src/test/resources/letter.txt
new file mode 100644
index 000000000000..daf706dfdacf
--- /dev/null
+++ b/components/camel-once/src/test/resources/letter.txt
@@ -0,0 +1 @@
+Hello this is ${camelId} from ${routeId}
\ No newline at end of file

Reply via email to