This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 995f472b1cb Exchange log (#15600)
995f472b1cb is described below
commit 995f472b1cb01b4fd77b23d90522329dfbdbd833
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Sep 18 09:12:29 2024 +0200
Exchange log (#15600)
* 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..3c2a07311c9 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.logExchange();
} 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..26067f8ccc0 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 {
};
}
+ /**
+ * Dumps the exchange for logging purpose (uses {@link ExchangeFormatter}
to format the output).
+ */
+ public static Expression logExchange() {
+ 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 "logExchange";
+ }
+ };
+ }
+
/**
* Returns a functional expression for the exchange
*/