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 <[email protected]> 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);
