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 {
