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 2020/10/02 08:50:53 UTC
[camel] 13/14: CAMEL-15605: Languages should be singleton for
better performance.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit c15c30e30ee57146487de8c5c533786906e132fa
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Oct 2 10:49:00 2020 +0200
CAMEL-15605: Languages should be singleton for better performance.
---
.../org/apache/camel/builder/SimpleBuilder.java | 19 +------------------
.../language/JsonPathExpressionReifier.java | 14 +++++++-------
.../language/MethodCallExpressionReifier.java | 6 +++---
.../reifier/language/SimpleExpressionReifier.java | 17 +++++++++++++----
.../language/TokenizerExpressionReifier.java | 22 ++++++++++------------
.../language/XMLTokenizerExpressionReifier.java | 12 +++++-------
.../reifier/language/XPathExpressionReifier.java | 14 +++++++-------
.../reifier/language/XQueryExpressionReifier.java | 4 ++--
.../org/apache/camel/support/LanguageSupport.java | 4 ++++
.../language/xtokenizer/XMLTokenizeLanguage.java | 8 +++++---
10 files changed, 57 insertions(+), 63 deletions(-)
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/SimpleBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/SimpleBuilder.java
index 9a46338..61a7c12 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/SimpleBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/SimpleBuilder.java
@@ -23,10 +23,8 @@ import org.apache.camel.Expression;
import org.apache.camel.Predicate;
import org.apache.camel.spi.ExpressionResultTypeAware;
import org.apache.camel.spi.Language;
-import org.apache.camel.spi.PropertyConfigurer;
import org.apache.camel.support.PredicateToExpressionAdapter;
import org.apache.camel.support.ScriptHelper;
-import org.apache.camel.support.component.PropertyConfigurerSupport;
/**
* Creates an {@link org.apache.camel.language.simple.Simple} language builder.
@@ -34,7 +32,7 @@ import org.apache.camel.support.component.PropertyConfigurerSupport;
* This builder is available in the Java DSL from the {@link RouteBuilder} which means that using simple language for
* {@link Expression}s or {@link Predicate}s is very easy with the help of this builder.
*/
-public class SimpleBuilder implements Predicate, Expression, ExpressionResultTypeAware, PropertyConfigurer {
+public class SimpleBuilder implements Predicate, Expression, ExpressionResultTypeAware {
private final String text;
private Class<?> resultType;
@@ -64,21 +62,6 @@ public class SimpleBuilder implements Predicate, Expression, ExpressionResultTyp
return simple(String.format(formatText, values), resultType);
}
- @Override
- public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
- if (target != this) {
- throw new IllegalStateException("Can only configure our own instance !");
- }
- switch (ignoreCase ? name.toLowerCase() : name) {
- case "resulttype":
- case "resultType":
- setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value));
- return true;
- default:
- return false;
- }
- }
-
public String getText() {
return text;
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/JsonPathExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/JsonPathExpressionReifier.java
index b04303e..3b5dbf8 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/JsonPathExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/JsonPathExpressionReifier.java
@@ -47,14 +47,14 @@ public class JsonPathExpressionReifier extends ExpressionReifier<JsonPathExpress
private Map<String, Object> createProperties(String exp) {
Map<String, Object> properties = new HashMap<>(8);
- properties.put("expression", exp);
+ properties.put("expression", parseString(exp));
properties.put("resultType", definition.getResultType());
- properties.put("suppressExceptions", definition.getSuppressExceptions());
- properties.put("allowSimple", definition.getAllowSimple());
- properties.put("allowEasyPredicate", definition.getAllowEasyPredicate());
- properties.put("writeAsString", definition.getWriteAsString());
- properties.put("headerName", definition.getHeaderName());
- properties.put("option", definition.getOption());
+ properties.put("suppressExceptions", parseBoolean(definition.getSuppressExceptions()));
+ properties.put("allowSimple", parseBoolean(definition.getAllowSimple()));
+ properties.put("allowEasyPredicate", parseBoolean(definition.getAllowEasyPredicate()));
+ properties.put("writeAsString", parseBoolean(definition.getWriteAsString()));
+ properties.put("headerName", parseString(definition.getHeaderName()));
+ properties.put("option", parseString(definition.getOption()));
return properties;
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java
index e6c3b52..66e6ea5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java
@@ -36,9 +36,9 @@ public class MethodCallExpressionReifier extends ExpressionReifier<MethodCallExp
protected Map<String, Object> createProperties() {
Map<String, Object> properties = new HashMap<>(4);
properties.put("bean", definition.getInstance());
- properties.put("beanType", or(definition.getBeanType(), definition.getBeanTypeName()));
- properties.put("ref", definition.getRef());
- properties.put("method", definition.getMethod());
+ properties.put("beanType", definition.getBeanType());
+ properties.put("ref", parseString(definition.getRef()));
+ properties.put("method", parseString(definition.getMethod()));
return properties;
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java
index 2bc0a3b..e14bf79 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java
@@ -67,10 +67,7 @@ public class SimpleExpressionReifier extends ExpressionReifier<SimpleExpression>
protected SimpleBuilder createBuilder() {
String exp = parseString(definition.getExpression());
// should be true by default
- boolean isTrim = true;
- if (definition.getTrim() != null) {
- isTrim = parseBoolean(definition.getTrim());
- }
+ boolean isTrim = parseBoolean(definition.getTrim(), true);
if (exp != null && isTrim) {
exp = exp.trim();
}
@@ -80,6 +77,18 @@ public class SimpleExpressionReifier extends ExpressionReifier<SimpleExpression>
}
@Override
+ protected Expression createExpression(Language language, String exp) {
+ definition.setExpression(exp);
+ return createBuilder();
+ }
+
+ @Override
+ protected Predicate createPredicate(Language language, String exp) {
+ definition.setExpression(exp);
+ return createBuilder();
+ }
+
+ @Override
protected void configureLanguage(Language language) {
if (definition.getResultType() == null && definition.getResultTypeName() != null) {
Class<?> clazz;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
index 02576d4..7cdaf26 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
@@ -41,16 +41,16 @@ public class TokenizerExpressionReifier extends ExpressionReifier<TokenizerExpre
if (token.startsWith("\\n")) {
token = '\n' + token.substring(2);
}
- properties.put("token", token);
- properties.put("endToken", definition.getEndToken());
- properties.put("inheritNamespaceTagName", definition.getInheritNamespaceTagName());
- properties.put("headerName", definition.getHeaderName());
- properties.put("groupDelimiter", definition.getGroupDelimiter());
- properties.put("regex", definition.getRegex());
- properties.put("xml", definition.getXml());
- properties.put("includeTokens", definition.getIncludeTokens());
- properties.put("group", definition.getGroup());
- properties.put("skipFirst", definition.getSkipFirst());
+ properties.put("token", parseString(token));
+ properties.put("endToken", parseString(definition.getEndToken()));
+ properties.put("inheritNamespaceTagName", parseString(definition.getInheritNamespaceTagName()));
+ properties.put("headerName", parseString(definition.getHeaderName()));
+ properties.put("groupDelimiter", parseString(definition.getGroupDelimiter()));
+ properties.put("regex", parseBoolean(definition.getRegex()));
+ properties.put("xml", parseBoolean(definition.getXml()));
+ properties.put("includeTokens", parseBoolean(definition.getIncludeTokens()));
+ properties.put("group", parseString(definition.getGroup()));
+ properties.put("skipFirst", parseBoolean(definition.getSkipFirst()));
return properties;
}
@@ -62,13 +62,11 @@ public class TokenizerExpressionReifier extends ExpressionReifier<TokenizerExpre
@Override
protected Expression createExpression(Language language, String exp) {
- // method call does not use the string exp so its not in use
return language.createExpression(createProperties());
}
@Override
protected Predicate createPredicate(Language language, String exp) {
- // method call does not use the string exp so its not in use
return language.createPredicate(createProperties());
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
index 331a075..71f4d59 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
@@ -42,13 +42,11 @@ public class XMLTokenizerExpressionReifier extends ExpressionReifier<XMLTokenize
@Override
protected Expression createExpression(Language language, String exp) {
- // method call does not use the string exp so its not in use
return language.createExpression(createProperties());
}
@Override
protected Predicate createPredicate(Language language, String exp) {
- // method call does not use the string exp so its not in use
return language.createPredicate(createProperties());
}
@@ -70,11 +68,11 @@ public class XMLTokenizerExpressionReifier extends ExpressionReifier<XMLTokenize
}
protected Map<String, Object> createProperties() {
- Map<String, Object> properties = new HashMap<>(3);
- properties.put("headerName", definition.getHeaderName());
- properties.put("mode", definition.getMode());
- properties.put("group", definition.getGroup());
- properties.put("path", definition.getExpression());
+ Map<String, Object> properties = new HashMap<>(4);
+ properties.put("headerName", parseString(definition.getHeaderName()));
+ properties.put("mode", parseString(definition.getMode()));
+ properties.put("group", parseInt(definition.getGroup()));
+ properties.put("path", parseString(definition.getExpression()));
return properties;
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
index 4fb3b6f..70e0085 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
@@ -66,8 +66,8 @@ public class XPathExpressionReifier extends ExpressionReifier<XPathExpression> {
}
protected Map<String, Object> createProperties(String expression) {
- Map<String, Object> properties = new HashMap<>(9);
- properties.put("expression", expression);
+ Map<String, Object> properties = new HashMap<>(10);
+ properties.put("expression", parseString(expression));
properties.put("documentType", definition.getDocumentType());
// resultType can either point to a QName or it can be a regular class that influence the qname
// so we need this special logic to set resultQName and resultType accordingly
@@ -78,12 +78,12 @@ public class XPathExpressionReifier extends ExpressionReifier<XPathExpression> {
} else {
properties.put("resultType", definition.getResultType());
}
- properties.put("useSaxon", definition.getSaxon());
+ properties.put("useSaxon", parseBoolean(definition.getSaxon()));
properties.put("xpathFactory", definition.getXPathFactory());
- properties.put("objectModelUri", definition.getObjectModel());
- properties.put("threadSafety", definition.getThreadSafety());
- properties.put("logNamespaces", definition.getLogNamespaces());
- properties.put("headerName", definition.getHeaderName());
+ properties.put("objectModelUri", parseString(definition.getObjectModel()));
+ properties.put("threadSafety", parseBoolean(definition.getThreadSafety()));
+ properties.put("logNamespaces", parseBoolean(definition.getLogNamespaces()));
+ properties.put("headerName", parseString(definition.getHeaderName()));
return properties;
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
index 0996ce1..ea4e97a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
@@ -63,9 +63,9 @@ public class XQueryExpressionReifier extends ExpressionReifier<XQueryExpression>
protected Map<String, Object> createProperties(String expression) {
Map<String, Object> properties = new HashMap<>(3);
- properties.put("expression", expression);
+ properties.put("expression", parseString(expression));
properties.put("resultType", definition.getResultType());
- properties.put("headerName", definition.getHeaderName());
+ properties.put("headerName", parseString(definition.getHeaderName()));
return properties;
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
index 6bd6c12..4f0c60e 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
@@ -110,6 +110,10 @@ public abstract class LanguageSupport implements Language, IsSingleton, CamelCon
value = defaultValue;
}
+ if (value instanceof String) {
+ value = getCamelContext().resolvePropertyPlaceholders(value.toString());
+ }
+
// if the type is not string based and the value is a bean reference, then we need to lookup
// the bean from the registry
if (value instanceof String && String.class != type) {
diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
index 0cd0447..ed0f8f9 100644
--- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
+++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
@@ -41,8 +41,8 @@ public class XMLTokenizeLanguage extends LanguageSupport {
private String headerName;
private String path;
- private char mode = 'i';
- private int group = 1;
+ private char mode;
+ private int group;
private Namespaces namespaces;
public static Expression tokenize(String path) {
@@ -98,7 +98,9 @@ public class XMLTokenizeLanguage extends LanguageSupport {
public Expression createExpression(Map<String, Object> properties) {
XMLTokenizeLanguage answer = new XMLTokenizeLanguage();
answer.setHeaderName(property(String.class, properties, "headerName", headerName));
- answer.setMode(property(char.class, properties, "mode", mode));
+ if (properties.get("mode") != null) {
+ answer.setMode(property(char.class, properties, "mode", 'i'));
+ }
answer.setGroup(property(int.class, properties, "group", group));
String path = property(String.class, properties, "path", null);
return answer.createExpression(path);