You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/01/31 09:07:32 UTC
(camel) 16/16: CAMEL-19749: variables - Should also copy message headers into variable when using EIP variables
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 <cl...@gmail.com>
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
*/