This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch var-headers in repository https://gitbox.apache.org/repos/asf/camel.git
commit afb444407a572236e88ce52572bd3bf82e9bb919 Author: Claus Ibsen <[email protected]> AuthorDate: Wed Jan 31 10:03:15 2024 +0100 CAMEL-19749: variables - Should also copy message headers into variable when using EIP variables --- .../modules/languages/pages/simple-language.adoc | 2 ++ .../simple/ast/SimpleFunctionExpression.java | 12 ++++++++++ .../apache/camel/language/simple/SimpleTest.java | 9 ++++++++ .../camel/support/builder/ExpressionBuilder.java | 26 ++++++++++++++++++++++ 4 files changed, 49 insertions(+) diff --git a/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc index 2036d642303..acb01a71d40 100644 --- a/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc +++ b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc @@ -292,6 +292,8 @@ for example to extract data from the message body (in XML format). This requires for example to extract data from the message body (in XML format). This requires having camel-xpath JAR on the classpath. For _input_ you can choose `header:key`, `exchangeProperty:key` or `variable:key` to use as input for the JSon payload instead of the message body. +|pretty(exp) | String | Converts the inlined expression to a String, and attempts to pretty print if JSon or XML, otherwise the expression is returned as the String value. + |======================================================================= == OGNL expression support diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java index 5572e108b0a..a9276250d2e 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java @@ -175,6 +175,18 @@ public class SimpleFunctionExpression extends LiteralExpression { return SimpleExpressionBuilder.exchangeOgnlExpression(remainder); } + // pretty + remainder = ifStartsWithReturnRemainder("pretty(", function); + if (remainder != null) { + String exp = StringHelper.beforeLast(remainder, ")"); + if (exp == null) { + throw new SimpleParserException("Valid syntax: ${pretty(exp)} was: " + function, token.getIndex()); + } + exp = StringHelper.removeQuotes(exp); + Expression inlined = camelContext.resolveLanguage("simple").createExpression(exp); + return ExpressionBuilder.prettyExpression(inlined); + } + // file: prefix remainder = ifStartsWithReturnRemainder("file:", function); if (remainder != null) { diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java index 7d3dd1f7bb3..fdcf759ffd7 100644 --- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java @@ -2328,6 +2328,15 @@ public class SimpleTest extends LanguageTestSupport { assertThrows(IllegalArgumentException.class, () -> evaluateExpression("${empty(unknownType)}", null)); } + @Test + public void testPretty() { + assertExpression(exchange, "${pretty('Hello')}", "Hello"); + assertExpression(exchange, "${pretty(${body})}", "<hello id=\"m123\">\n</hello>"); + + exchange.getMessage().setBody("{\"name\": \"Jack\", \"id\": 123}"); + assertExpression(exchange, "${pretty(${body})}", "{\n\t\"name\": \"Jack\",\n\t\"id\": 123\n}\n"); + } + private void assertExpressionCreateNewEmpty( String type, Class<?> expectedClass, java.util.function.Predicate<Object> isEmptyAssertion) { Object value = evaluateExpression("${empty(%s)}".formatted(type), null); diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java index bc9775de5e5..0f3bb477721 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java @@ -2374,6 +2374,32 @@ public class ExpressionBuilder { }; } + /** + * Returns the expression as pretty formatted string + */ + public static Expression prettyExpression(final Expression expression) { + return new ExpressionAdapter() { + @Override + public Object evaluate(Exchange exchange) { + String body = expression.evaluate(exchange, String.class); + if (body == null) { + return null; + } else if (body.startsWith("{") && body.endsWith("}") || body.startsWith("[") && body.endsWith("]")) { + return Jsoner.prettyPrint(body); //json + } else if (body.startsWith("<") && body.endsWith(">")) { + return ExpressionBuilder.prettyXml(body); //xml + } + + return body; + } + + @Override + public String toString() { + return "pretty(" + expression + ")"; + } + }; + } + /** * Returns the expression for the message body as pretty formatted string */
