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/09/18 06:45:59 UTC
(camel) 01/01: CAMEL-21234: Add logExchange function to simple language.
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 <cl...@gmail.com>
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
*/