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

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

commit 0ef2341d0972f21d3542182a2e94049a4572592e
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Sep 18 08:42:51 2024 +0200

    CAMEL-21234: Add logExchange function to simple language.
---
 .../language/csimple/joor/OriginalSimpleTest.java  | 15 +++++++++++++
 .../modules/languages/pages/simple-language.adoc   |  2 ++
 .../camel/language/csimple/CSimpleHelper.java      |  5 +++++
 .../simple/ast/SimpleFunctionExpression.java       |  4 ++++
 .../apache/camel/language/simple/SimpleTest.java   | 17 +++++++++++++-
 .../camel/support/builder/ExpressionBuilder.java   | 26 ++++++++++++++++++++++
 6 files changed, 68 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
 
b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
index c3b2d990983..68cb1ff109d 100644
--- 
a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
+++ 
b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
@@ -42,11 +42,13 @@ import 
org.apache.camel.component.bean.MethodNotFoundException;
 import org.apache.camel.language.bean.RuntimeBeanExpressionException;
 import org.apache.camel.language.csimple.CSimpleLanguage;
 import org.apache.camel.language.simple.types.SimpleIllegalSyntaxException;
+import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.spi.VariableRepository;
 import org.apache.camel.spi.VariableRepositoryFactory;
 import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.LanguageHelper;
 import org.apache.camel.test.junit5.LanguageTestSupport;
 import org.apache.camel.util.InetAddressUtil;
 import org.apache.camel.util.StringHelper;
@@ -173,6 +175,19 @@ public class OriginalSimpleTest extends 
LanguageTestSupport {
         assertExpression("${exchange}", exchange);
     }
 
+    @Test
+    public void testLogExchangeExpression() {
+        Expression exp = 
context.resolveLanguage("csimple").createExpression("${logExchange}");
+        assertNotNull(exp);
+
+        // will use exchange formatter
+        ExchangeFormatter ef = 
LanguageHelper.getOrCreateExchangeFormatter(context, null);
+        String expected = ef.format(exchange);
+        assertEquals(expected, exp.evaluate(exchange, Object.class));
+
+        assertExpression("${logExchange}", expected);
+    }
+
     @Test
     public void testExchangeOgnlExpression() {
         Expression exp = 
context.resolveLanguage("csimple").createExpression("${exchange.exchangeId}");
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 3182c19c9a5..ec72400bb44 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
@@ -75,6 +75,8 @@ OGNL expression.
 
 |id |String |the message id
 
+|logExchange |String | Dumps the exchange for logging purpose (uses 
`ExchangeFormatter` to format the output).
+
 |messageTimestamp |long |the message timestamp (millis since epoc) that this 
message originates from.
 Some systems like JMS, Kafka, AWS have a timestamp on the event/message that 
Camel received. This method returns
 the timestamp if a timestamp exists.
diff --git 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java
 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java
index 6d0106b27e0..e62891dba99 100644
--- 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java
+++ 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java
@@ -289,6 +289,11 @@ public final class CSimpleHelper {
         return exchange.getProperty(ExchangePropertyKey.STEP_ID, String.class);
     }
 
+    public static String logExchange(Exchange exchange) {
+        ExchangeFormatter formatter = 
LanguageHelper.getOrCreateExchangeFormatter(exchange.getContext(), null);
+        return formatter.format(exchange);
+    }
+
     public static String fileName(Message message) {
         return message.getHeader(Exchange.FILE_NAME, String.class);
     }
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 c7e5308ac20..219147b82c8 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
@@ -595,6 +595,8 @@ public class SimpleFunctionExpression extends 
LiteralExpression {
             return ExpressionBuilder.exchangeIdExpression();
         } else if (ObjectHelper.equal(expression, "exchange")) {
             return ExpressionBuilder.exchangeExpression();
+        } else if (ObjectHelper.equal(expression, "logExchange")) {
+            return ExpressionBuilder.dumpExchange();
         } else if (ObjectHelper.equal(expression, "exception")) {
             return ExpressionBuilder.exchangeExceptionExpression();
         } else if (ObjectHelper.equal(expression, "exception.message")) {
@@ -1106,6 +1108,8 @@ public class SimpleFunctionExpression extends 
LiteralExpression {
             return "exchange.getExchangeId()";
         } else if (ObjectHelper.equal(expression, "exchange")) {
             return "exchange";
+        } else if (ObjectHelper.equal(expression, "logExchange")) {
+            return "logExchange(exchange)";
         } else if (ObjectHelper.equal(expression, "exception")) {
             return "exception(exchange)";
         } else if (ObjectHelper.equal(expression, "exception.message")) {
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 3b16729a7b6..346ae8c83e7 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
@@ -41,6 +41,7 @@ import 
org.apache.camel.component.bean.MethodNotFoundException;
 import org.apache.camel.language.bean.RuntimeBeanExpressionException;
 import org.apache.camel.language.simple.myconverter.MyCustomDate;
 import org.apache.camel.language.simple.types.SimpleIllegalSyntaxException;
+import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.Registry;
@@ -48,6 +49,7 @@ import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.spi.VariableRepository;
 import org.apache.camel.spi.VariableRepositoryFactory;
 import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.LanguageHelper;
 import org.apache.camel.util.InetAddressUtil;
 import org.apache.camel.util.StringHelper;
 import org.junit.jupiter.api.Test;
@@ -160,11 +162,24 @@ public class SimpleTest extends LanguageTestSupport {
     public void testExchangeExpression() {
         Expression exp = 
context.resolveLanguage("simple").createExpression("${exchange}");
         assertNotNull(exp);
-        assertEquals(exchange, exp.evaluate(exchange, Object.class));
 
+        assertEquals(exchange, exp.evaluate(exchange, Object.class));
         assertExpression("${exchange}", exchange);
     }
 
+    @Test
+    public void testLogExchangeExpression() {
+        Expression exp = 
context.resolveLanguage("simple").createExpression("${logExchange}");
+        assertNotNull(exp);
+
+        // will use exchange formatter
+        ExchangeFormatter ef = 
LanguageHelper.getOrCreateExchangeFormatter(context, null);
+        String expected = ef.format(exchange);
+        assertEquals(expected, exp.evaluate(exchange, Object.class));
+
+        assertExpression("${logExchange}", expected);
+    }
+
     @Test
     public void testExchangeOgnlExpression() {
         Expression exp = 
context.resolveLanguage("simple").createExpression("${exchange.exchangeId}");
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 d860a9239d1..a0440a27569 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
@@ -43,6 +43,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.RuntimeExchangeException;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.Registry;
@@ -1428,6 +1429,31 @@ public class ExpressionBuilder {
         };
     }
 
+    /**
+     * Returns a dump of the exchange using {@link 
org.apache.camel.spi.ExchangeFormatter}.
+     */
+    public static Expression dumpExchange() {
+        return new ExpressionAdapter() {
+            private ExchangeFormatter formatter;
+
+            @Override
+            public void init(CamelContext context) {
+                super.init(context);
+                this.formatter = 
LanguageHelper.getOrCreateExchangeFormatter(context, null);
+            }
+
+            @Override
+            public Object evaluate(Exchange exchange) {
+                return formatter.format(exchange);
+            }
+
+            @Override
+            public String toString() {
+                return "dumpExchange";
+            }
+        };
+    }
+
     /**
      * Returns a functional expression for the exchange
      */

Reply via email to