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

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

commit 7f5f592c812474dd483154410f6d8cbc236310f3
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Sep 13 09:00:26 2024 +0200

    CAMEL-21213: camel-groovy - Align variables to use same naming as simple
---
 .../src/main/docs/groovy-language.adoc             | 19 +++++++------
 .../language/groovy/GroovyExpressionTest.java      | 33 ++++++++++++++++++++++
 .../camel/language/groovy/GroovyLanguageTest.java  |  3 ++
 .../camel/language/groovy/GroovyListMapTest.java   |  2 +-
 .../camel/language/groovy/GroovySetHeaderTest.java |  2 +-
 .../language/groovy/LanguageGroovyRouteTest.java   |  2 +-
 .../groovy/GroovySetHeaderConcurrentIssueTest.java |  2 +-
 .../processor/groovy/GroovySetHeaderIssueTest.java |  2 +-
 .../apache/camel/processor/groovy/groovyFilter.xml |  2 +-
 .../org/apache/camel/util/ExchangeHelperTest.java  | 14 ++++++---
 .../org/apache/camel/support/ExchangeHelper.java   | 12 ++++++--
 .../java/org/apache/camel/util/URISupport.java     |  6 ++--
 12 files changed, 75 insertions(+), 24 deletions(-)

diff --git a/components/camel-groovy/src/main/docs/groovy-language.adoc 
b/components/camel-groovy/src/main/docs/groovy-language.adoc
index 72515bdefa0..1c2fe2c8f8b 100644
--- a/components/camel-groovy/src/main/docs/groovy-language.adoc
+++ b/components/camel-groovy/src/main/docs/groovy-language.adoc
@@ -39,21 +39,24 @@ a `Map`). The `Exchange` is transferred as:
 |=======================================================================
 |key |value
 
-|`exchange` |The `Exchange` itself.
+|`body` |The message body.
 
-|`exchangeProperties` |The `Exchange` properties.
+|`header` |The headers of the message.
+|`headers` |The headers of the message.
 
-|`variables` |The variables
+|`variable` |The exchange variables
+|`variables` |The exchange variables
 
-|`headers` |The headers of the In message.
+|`exchangeProperty` |The exchange properties.
+|`exchangeProperties` |The exchange properties.
 
+|`exchange` |The `Exchange` itself.
 |`camelContext` |The Camel Context.
+|`exception` | If the exchange failed then this is the caused exception.
 
-|`request` |The In message.
-
-|`body` |The In message body.
+|`request` |The message.
 
-|`response` |The Out message (only for InOut message exchange pattern).
+|`response` | *Deprecated* The Out message (only for InOut message exchange 
pattern).
 |=======================================================================
 
 
diff --git 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyExpressionTest.java
 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyExpressionTest.java
index 772f431138b..9a01173e65b 100644
--- 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyExpressionTest.java
+++ 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyExpressionTest.java
@@ -40,14 +40,46 @@ public class GroovyExpressionTest {
         
assertExpression(GroovyLanguage.groovy("exchange.in.headers['foo.bar']"), 
exchange, "cheese");
         assertExpression(GroovyLanguage.groovy("exchange.in.headers.name"), 
exchange, "James");
         
assertExpression(GroovyLanguage.groovy("exchange.in.headers['doesNotExist']"), 
exchange, null);
+
+        assertExpression(GroovyLanguage.groovy("header['foo.bar']"), exchange, 
"cheese");
+        assertExpression(GroovyLanguage.groovy("header.name"), exchange, 
"James");
+        assertExpression(GroovyLanguage.groovy("header['doesNotExist']"), 
exchange, null);
+
+        assertExpression(GroovyLanguage.groovy("variable['cheese']"), 
exchange, "gauda");
+        assertExpression(GroovyLanguage.groovy("variable.cheese"), exchange, 
"gauda");
+        assertExpression(GroovyLanguage.groovy("variable['doesNotExist']"), 
exchange, null);
+        assertExpression(GroovyLanguage.groovy("variables['cheese']"), 
exchange, "gauda");
+        assertExpression(GroovyLanguage.groovy("variables.cheese"), exchange, 
"gauda");
+        assertExpression(GroovyLanguage.groovy("variables['doesNotExist']"), 
exchange, null);
     }
 
     @Test
     public void testPredicateEvaluation() {
         assertPredicate(GroovyLanguage.groovy("exchange.in.headers.name == 
'James'"), exchange, true);
+        assertPredicate(GroovyLanguage.groovy("header.name == 'James'"), 
exchange, true);
         assertPredicate(GroovyLanguage.groovy("exchange.in.headers.name == 
'Hiram'"), exchange, false);
+        assertPredicate(GroovyLanguage.groovy("header.name == 'Hiram'"), 
exchange, false);
 
         assertPredicate(GroovyLanguage.groovy("request.headers.name == 
'James'"), exchange, true);
+        assertPredicate(GroovyLanguage.groovy("header.name == 'James'"), 
exchange, true);
+
+        assertPredicate(GroovyLanguage.groovy("variable.cheese == 'gauda'"), 
exchange, true);
+        assertPredicate(GroovyLanguage.groovy("variables.cheese == 'gauda'"), 
exchange, true);
+        assertPredicate(GroovyLanguage.groovy("variables['cheese'] == 
'gauda'"), exchange, true);
+    }
+
+    @Test
+    public void testException() {
+        Exception e = new IllegalArgumentException("Forced");
+
+        exchange.setException(e);
+        assertExpression(GroovyLanguage.groovy("exception"), exchange, e);
+
+        exchange.setException(null);
+        assertExpression(GroovyLanguage.groovy("exception"), exchange, null);
+
+        exchange.setProperty(Exchange.EXCEPTION_CAUGHT, e);
+        assertExpression(GroovyLanguage.groovy("exception"), exchange, e);
     }
 
     @Test
@@ -74,5 +106,6 @@ public class GroovyExpressionTest {
         exchange = new DefaultExchange(new DefaultCamelContext());
         exchange.getIn().setHeader("foo.bar", "cheese");
         exchange.getIn().setHeader("name", "James");
+        exchange.setVariable("cheese", "gauda");
     }
 }
diff --git 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java
 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java
index dbf9968df54..fb0540abe2d 100644
--- 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java
+++ 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java
@@ -26,6 +26,7 @@ public class GroovyLanguageTest extends LanguageTestSupport {
         assertExpression("exchange.in.headers.foo", "abc");
         assertExpression("request.headers.foo", "abc");
         assertExpression("headers.foo", "abc");
+        assertExpression("header.foo", "abc");
     }
 
     @Test
@@ -38,6 +39,8 @@ public class GroovyLanguageTest extends LanguageTestSupport {
 
         assertExpression("exchangeProperties.myProp1", "myValue");
         assertExpression("exchangeProperties.myProp2", 123);
+        assertExpression("exchangeProperty.myProp1", "myValue");
+        assertExpression("exchangeProperty.myProp2", 123);
     }
 
     @Override
diff --git 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyListMapTest.java
 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyListMapTest.java
index 5eee34c4515..7f72114ec9d 100644
--- 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyListMapTest.java
+++ 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyListMapTest.java
@@ -51,7 +51,7 @@ public class GroovyListMapTest extends CamelTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:start")
-                        .filter().groovy("request.body.get(0).get('foo') == 
'bar'")
+                        .filter().groovy("body.get(0).get('foo') == 'bar'")
                         .to("mock:result");
             }
         };
diff --git 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovySetHeaderTest.java
 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovySetHeaderTest.java
index 6560a841cb7..b3ed340b572 100644
--- 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovySetHeaderTest.java
+++ 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovySetHeaderTest.java
@@ -53,7 +53,7 @@ public class GroovySetHeaderTest extends CamelTestSupport {
             @Override
             public void configure() {
                 from("direct:start")
-                        .setHeader("drink").groovy("request.headers.beer")
+                        .setHeader("drink").groovy("header.beer")
                         // shows how to access the camelContext value
                         .setHeader("camelId").groovy("camelContext.name")
                         .to("mock:result");
diff --git 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java
 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java
index 63cc80e85dc..3aad8eec24a 100644
--- 
a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java
+++ 
b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java
@@ -40,7 +40,7 @@ public class LanguageGroovyRouteTest extends CamelTestSupport 
{
             @Override
             public void configure() throws Exception {
                 // START SNIPPET: e1
-                String script = URLEncoder.encode("request.body * 2", "UTF-8");
+                String script = URLEncoder.encode("body * 2", "UTF-8");
                 from("direct:start").to("language:groovy:" + 
script).to("mock:result");
                 // END SNIPPET: e1
             }
diff --git 
a/components/camel-groovy/src/test/java/org/apache/camel/processor/groovy/GroovySetHeaderConcurrentIssueTest.java
 
b/components/camel-groovy/src/test/java/org/apache/camel/processor/groovy/GroovySetHeaderConcurrentIssueTest.java
index cc081da6364..928f730ae48 100644
--- 
a/components/camel-groovy/src/test/java/org/apache/camel/processor/groovy/GroovySetHeaderConcurrentIssueTest.java
+++ 
b/components/camel-groovy/src/test/java/org/apache/camel/processor/groovy/GroovySetHeaderConcurrentIssueTest.java
@@ -79,7 +79,7 @@ public class GroovySetHeaderConcurrentIssueTest extends 
CamelTestSupport {
             @Override
             public void configure() {
                 from("direct:start")
-                        .setHeader("mySlip").groovy("return 
\"${request.body.subOrderName}Endpoint\"")
+                        .setHeader("mySlip").groovy("return 
\"${body.subOrderName}Endpoint\"")
                         .routingSlip(header("mySlip"));
             }
         };
diff --git 
a/components/camel-groovy/src/test/java/org/apache/camel/processor/groovy/GroovySetHeaderIssueTest.java
 
b/components/camel-groovy/src/test/java/org/apache/camel/processor/groovy/GroovySetHeaderIssueTest.java
index 2cfc61ea27f..b91bdee85bb 100644
--- 
a/components/camel-groovy/src/test/java/org/apache/camel/processor/groovy/GroovySetHeaderIssueTest.java
+++ 
b/components/camel-groovy/src/test/java/org/apache/camel/processor/groovy/GroovySetHeaderIssueTest.java
@@ -62,7 +62,7 @@ public class GroovySetHeaderIssueTest extends 
CamelTestSupport {
             @Override
             public void configure() {
                 from("direct:start")
-                        .setHeader("mySlip").groovy("return 
\"${request.body.subOrderName}Endpoint\"")
+                        .setHeader("mySlip").groovy("return 
\"${body.subOrderName}Endpoint\"")
                         .routingSlip(header("mySlip"));
             }
         };
diff --git 
a/components/camel-groovy/src/test/resources/org/apache/camel/processor/groovy/groovyFilter.xml
 
b/components/camel-groovy/src/test/resources/org/apache/camel/processor/groovy/groovyFilter.xml
index ce415d56f86..e7273abc837 100644
--- 
a/components/camel-groovy/src/test/resources/org/apache/camel/processor/groovy/groovyFilter.xml
+++ 
b/components/camel-groovy/src/test/resources/org/apache/camel/processor/groovy/groovyFilter.xml
@@ -29,7 +29,7 @@
     <route>
       <from uri="direct:start"/>
       <filter>
-        <groovy>exchange.in.headers.foo == 123</groovy>
+        <groovy>header.foo == 123</groovy>
         <to uri="mock:result"/>
       </filter>
     </route>
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/util/ExchangeHelperTest.java 
b/core/camel-core/src/test/java/org/apache/camel/util/ExchangeHelperTest.java
index 7eb1b713ae3..ad2ad9de9bb 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/util/ExchangeHelperTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/util/ExchangeHelperTest.java
@@ -127,12 +127,13 @@ public class ExchangeHelperTest extends 
ContextTestSupport {
         Map<String, Object> map = new HashMap<>();
         ExchangeHelper.populateVariableMap(exchange, map, false);
 
-        assertEquals(3, map.size());
+        assertEquals(5, map.size());
         assertNull(map.get("exchange"));
         assertNull(map.get("in"));
         assertNull(map.get("request"));
         assertNull(map.get("out"));
         assertNull(map.get("response"));
+        assertSame(exchange.getIn().getHeaders(), map.get("header"));
         assertSame(exchange.getIn().getHeaders(), map.get("headers"));
         assertSame(exchange.getIn().getBody(), map.get("body"));
         assertSame(exchange.getVariable("cheese"), map.get("cheese"));
@@ -148,13 +149,16 @@ public class ExchangeHelperTest extends 
ContextTestSupport {
         Map<String, Object> map = new HashMap<>();
         ExchangeHelper.populateVariableMap(exchange, map, true);
 
-        assertEquals(10, map.size());
+        assertEquals(13, map.size());
         assertSame(exchange, map.get("exchange"));
         assertSame(exchange.getIn(), map.get("in"));
         assertSame(exchange.getIn(), map.get("request"));
         assertSame(exchange.getMessage(), map.get("out"));
         assertSame(exchange.getMessage(), map.get("response"));
         assertSame(exchange.getIn().getHeaders(), map.get("headers"));
+        assertSame(exchange.getIn().getHeaders(), map.get("header"));
+        assertSame(exchange.getVariables(), map.get("variable"));
+        assertSame(exchange.getVariables(), map.get("variables"));
         assertSame(exchange.getIn().getBody(), map.get("body"));
         assertSame(exchange.getContext(), map.get("camelContext"));
     }
@@ -168,12 +172,13 @@ public class ExchangeHelperTest extends 
ContextTestSupport {
 
         Map<?, ?> map = ExchangeHelper.createVariableMap(exchange, true);
 
-        assertEquals(10, map.size());
+        assertEquals(13, map.size());
         assertSame(exchange, map.get("exchange"));
         assertSame(exchange.getIn(), map.get("in"));
         assertSame(exchange.getIn(), map.get("request"));
         assertSame(exchange.getMessage(), map.get("out"));
         assertSame(exchange.getMessage(), map.get("response"));
+        assertSame(exchange.getIn().getHeaders(), map.get("header"));
         assertSame(exchange.getIn().getHeaders(), map.get("headers"));
         assertSame(exchange.getIn().getBody(), map.get("body"));
         assertSame(exchange.getContext(), map.get("camelContext"));
@@ -189,12 +194,13 @@ public class ExchangeHelperTest extends 
ContextTestSupport {
         Map<?, ?> map = ExchangeHelper.createVariableMap(exchange, true);
 
         // there should still be 10 in the map
-        assertEquals(10, map.size());
+        assertEquals(13, map.size());
         assertSame(exchange, map.get("exchange"));
         assertSame(exchange.getIn(), map.get("in"));
         assertSame(exchange.getIn(), map.get("request"));
         assertSame(exchange.getIn(), map.get("out"));
         assertSame(exchange.getIn(), map.get("response"));
+        assertSame(exchange.getIn().getHeaders(), map.get("header"));
         assertSame(exchange.getIn().getHeaders(), map.get("headers"));
         assertSame(exchange.getIn().getBody(), map.get("body"));
         assertSame(exchange.getVariable("cheese"), map.get("cheese"));
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java 
b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
index a5149f4e247..1d09ab4315c 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
@@ -491,14 +491,20 @@ public final class ExchangeHelper {
      */
     public static void populateVariableMap(Exchange exchange, Map<String, 
Object> map, boolean allowContextMapAll) {
         Message in = exchange.getIn();
-        map.put("headers", in.getHeaders());
         map.put("body", in.getBody());
-        map.put("variables", exchange.getVariables());
+        map.put("header", in.getHeaders());
+        map.put("headers", in.getHeaders());
+        var v = exchange.getVariables();
+        map.put("variable", v);
+        map.put("variables", v);
+        map.put("exception", LanguageHelper.exception(exchange));
         if (allowContextMapAll) {
             map.put("in", in);
             map.put("request", in);
             map.put("exchange", exchange);
-            map.put("exchangeProperties", exchange.getAllProperties());
+            var p = exchange.getAllProperties();
+            map.put("exchangeProperty", p);
+            map.put("exchangeProperties", p);
             if (isOutCapable(exchange)) {
                 // if we are out capable then set out and response as well
                 // however only grab OUT if it exists, otherwise reuse IN
diff --git 
a/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java 
b/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java
index cc9abe4b7dc..88eaf483a82 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java
@@ -38,9 +38,9 @@ import static 
org.apache.camel.util.CamelURIParser.URI_ALREADY_NORMALIZED;
 /**
  * URI utilities.
  *
- * IMPORTANT: This class is only intended for Camel internal, Camel 
components, and other Camel features.
- * If you need a general purpose URI/URL utility class then do not use this 
class. This class is implemented
- * in a certain way to work and support how Camel internally parses endpoint 
URIs.
+ * IMPORTANT: This class is only intended for Camel internal, Camel 
components, and other Camel features. If you need a
+ * general purpose URI/URL utility class then do not use this class. This 
class is implemented in a certain way to work
+ * and support how Camel internally parses endpoint URIs.
  */
 public final class URISupport {
 

Reply via email to