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 f2a3cc20d07 CAMEL-19014 - Fixing issue about concurrence on the
SimpleLanguage (#9333)
f2a3cc20d07 is described below
commit f2a3cc20d07271cc2bfba26cb3ecdcf4c119866d
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Mar 11 10:08:08 2023 +0100
CAMEL-19014 - Fixing issue about concurrence on the SimpleLanguage (#9333)
---
.../apache/camel/builder/ExpressionBuilderTest.java | 7 +++++++
.../camel/support/builder/ExpressionBuilder.java | 21 +++++++++++++++++----
2 files changed, 24 insertions(+), 4 deletions(-)
diff --git
a/core/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java
b/core/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java
index 12a38d1df3b..e68bf307161 100644
---
a/core/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java
@@ -134,6 +134,13 @@ public class ExpressionBuilderTest extends TestSupport {
assertExpression(headerExpression("name", String.class), exchange,
"James");
}
+ @Test
+ public void testConstantsOnly() throws Exception {
+ Expression expression = concatExpression(
+ List.of(constantExpression("Hello"), constantExpression(" big
"), constantExpression("World")));
+ assertExpression(expression, exchange, "Hello big World");
+ }
+
@Override
@BeforeEach
public void setUp() throws Exception {
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 c514185dc68..78fddbd3fc0 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
@@ -20,7 +20,6 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
@@ -1701,9 +1700,13 @@ public class ExpressionBuilder {
private static Expression concatExpressionOptimized(final
Collection<Expression> expressions, final String description) {
return new ExpressionAdapter() {
private Collection<Object> optimized;
+ private String optimizedValue;
@Override
public Object evaluate(Exchange exchange) {
+ if (optimizedValue != null) {
+ return optimizedValue;
+ }
StringBuilder buffer = new StringBuilder();
Collection<?> col = optimized != null ? optimized :
expressions;
for (Object obj : col) {
@@ -1713,8 +1716,8 @@ public class ExpressionBuilder {
if (text != null) {
buffer.append(text);
}
- } else {
- buffer.append((String) obj);
+ } else if (obj != null) {
+ buffer.append(obj);
}
}
return buffer.toString();
@@ -1724,6 +1727,7 @@ public class ExpressionBuilder {
public void init(CamelContext context) {
if (optimized == null) {
Collection<Object> preprocessedExpression = new
ArrayList<>(expressions.size());
+ boolean constantsOnly = true;
for (Expression expression : expressions) {
expression.init(context);
if (expression instanceof ConstantExpressionAdapter) {
@@ -1731,9 +1735,18 @@ public class ExpressionBuilder {
preprocessedExpression.add(value.toString());
} else {
preprocessedExpression.add(expression);
+ constantsOnly = false;
}
}
- optimized = preprocessedExpression;
+ if (constantsOnly) {
+ StringBuilder sb = new StringBuilder();
+ for (Object o : preprocessedExpression) {
+ sb.append(o);
+ }
+ optimizedValue = sb.toString();
+ } else {
+ optimized = preprocessedExpression;
+ }
} else {
for (Expression expression : expressions) {
expression.init(context);