This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch lang5 in repository https://gitbox.apache.org/repos/asf/camel.git
commit e8762a5fff1cf69e6a10a39a6118a48a05d9f42e Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Feb 3 14:07:42 2024 +0100 CAMEL-20378: Languages should be thread-safe and be configured only via properties array, all in the same way. --- .../apache/camel/language/bean/BeanLanguage.java | 18 +++++++---------- .../language/datasonnet/DatasonnetLanguage.java | 23 ++-------------------- .../apache/camel/language/joor/JavaLanguage.java | 4 ++-- .../org/apache/camel/language/jq/JqLanguage.java | 2 +- .../apache/camel/jsonpath/JsonPathLanguage.java | 6 +----- .../camel/component/language/LanguageEndpoint.java | 12 ++++++++--- .../camel/language/xquery/XQueryLanguage.java | 6 +----- .../apache/camel/language/wasm/WasmLanguage.java | 6 +----- .../apache/camel/language/xpath/XPathLanguage.java | 14 +++++-------- .../reifier/language/JavaExpressionReifier.java | 4 ++-- .../reifier/language/JoorExpressionReifier.java | 4 ++-- .../language/MethodCallExpressionReifier.java | 14 ++++++------- 12 files changed, 40 insertions(+), 73 deletions(-) diff --git a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java index 785dddb5204..2939f1e8b13 100644 --- a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java +++ b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java @@ -86,10 +86,6 @@ public class BeanLanguage extends TypedLanguageSupport implements ScriptingLangu case "validate": setValidate(PropertyConfigurerSupport.property(camelContext, Boolean.class, value)); return true; - case "resultType": - case "resulttype": - setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value)); - return true; default: return false; } @@ -114,19 +110,19 @@ public class BeanLanguage extends TypedLanguageSupport implements ScriptingLangu public Expression createExpression(String expression, Object[] properties) { BeanExpression answer = null; - String method = property(String.class, properties, 1, null); - Object bean = property(Object.class, properties, 0, null); + Object bean = property(Object.class, properties, 1, null); + String method = property(String.class, properties, 2, null); if (bean != null) { answer = new BeanExpression(bean, method); } if (answer == null) { - Class<?> beanType = property(Class.class, properties, 2, null); + Class<?> beanType = property(Class.class, properties, 3, null); if (beanType != null) { answer = new BeanExpression(beanType, method); } } if (answer == null) { - String ref = property(String.class, properties, 3, null); + String ref = property(String.class, properties, 4, null); if (ref != null) { answer = new BeanExpression(ref, method); } @@ -137,14 +133,14 @@ public class BeanLanguage extends TypedLanguageSupport implements ScriptingLangu if (answer == null) { throw new IllegalArgumentException("Bean language requires bean, beanType, or ref argument"); } - Object scope = property(Object.class, properties, 4, null); + Object scope = property(Object.class, properties, 5, null); if (scope instanceof BeanScope) { answer.setScope((BeanScope) scope); } else if (scope != null) { answer.setScope(BeanScope.valueOf(scope.toString())); } - answer.setValidate(property(boolean.class, properties, 5, isValidate())); - answer.setResultType(property(Class.class, properties, 6, getResultType())); + answer.setValidate(property(boolean.class, properties, 6, isValidate())); + answer.setResultType(property(Class.class, properties, 0, null)); answer.setBeanComponent(beanComponent); answer.setParameterMappingStrategy(parameterMappingStrategy); answer.setSimple(simple); diff --git a/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetLanguage.java b/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetLanguage.java index 2c53f177adb..b3f5b24187c 100644 --- a/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetLanguage.java +++ b/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetLanguage.java @@ -27,19 +27,16 @@ import com.datasonnet.Mapper; import com.datasonnet.document.MediaType; import io.github.classgraph.ClassGraph; import io.github.classgraph.ScanResult; -import org.apache.camel.CamelContext; import org.apache.camel.Expression; import org.apache.camel.Predicate; -import org.apache.camel.spi.PropertyConfigurer; import org.apache.camel.spi.annotations.Language; import org.apache.camel.support.LRUCacheFactory; import org.apache.camel.support.TypedLanguageSupport; -import org.apache.camel.support.component.PropertyConfigurerSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Language("datasonnet") -public class DatasonnetLanguage extends TypedLanguageSupport implements PropertyConfigurer { +public class DatasonnetLanguage extends TypedLanguageSupport { private static final Logger LOG = LoggerFactory.getLogger(DatasonnetLanguage.class); private static final Map<String, String> CLASSPATH_IMPORTS = new HashMap<>(); @@ -84,7 +81,7 @@ public class DatasonnetLanguage extends TypedLanguageSupport implements Property expression = loadResource(expression); DatasonnetExpression answer = new DatasonnetExpression(expression); - answer.setResultType(property(Class.class, properties, 0, getResultType())); + answer.setResultType(property(Class.class, properties, 0, null)); String mediaType = property(String.class, properties, 1, null); if (mediaType != null) { answer.setBodyMediaType(MediaType.valueOf(mediaType)); @@ -111,20 +108,4 @@ public class DatasonnetLanguage extends TypedLanguageSupport implements Property return CLASSPATH_IMPORTS; } - @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; - } - } - } diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaLanguage.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaLanguage.java index 057222b1dfa..1b246cac11a 100644 --- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaLanguage.java +++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaLanguage.java @@ -129,8 +129,8 @@ public class JavaLanguage extends TypedLanguageSupport implements ScriptingLangu public Expression createExpression(String expression, Object[] properties) { JoorExpression answer = new JoorExpression(expression); answer.setCompiler(compiler); - answer.setPreCompile(property(boolean.class, properties, 0, preCompile)); - answer.setResultType(property(Class.class, properties, 1, getResultType())); + answer.setResultType(property(Class.class, properties, 0, null)); + answer.setPreCompile(property(boolean.class, properties, 1, preCompile)); answer.setSingleQuotes(property(boolean.class, properties, 2, singleQuotes)); if (getCamelContext() != null) { answer.init(getCamelContext()); diff --git a/components/camel-jq/src/main/java/org/apache/camel/language/jq/JqLanguage.java b/components/camel-jq/src/main/java/org/apache/camel/language/jq/JqLanguage.java index 9be23525b60..2686e84b437 100644 --- a/components/camel-jq/src/main/java/org/apache/camel/language/jq/JqLanguage.java +++ b/components/camel-jq/src/main/java/org/apache/camel/language/jq/JqLanguage.java @@ -58,7 +58,7 @@ public class JqLanguage extends SingleInputTypedLanguageSupport implements Stati @Override public Expression createExpression(Expression source, String expression, Object[] properties) { JqExpression answer = new JqExpression(Scope.newChildScope(rootScope), expression); - answer.setResultType(property(Class.class, properties, 0, getResultType())); + answer.setResultType(property(Class.class, properties, 0, null)); answer.setSource(source); if (getCamelContext() != null) { answer.init(getCamelContext()); diff --git a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java index c370359cb3a..233b8689900 100644 --- a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java +++ b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java @@ -104,7 +104,7 @@ public class JsonPathLanguage extends SingleInputTypedLanguageSupport implements JsonPathExpression answer = new JsonPathExpression(expression); answer.setSource(source); answer.setPredicate(predicate); - answer.setResultType(property(Class.class, properties, 0, getResultType())); + answer.setResultType(property(Class.class, properties, 0, null)); answer.setSuppressExceptions(property(boolean.class, properties, 4, isSuppressExceptions())); answer.setAllowSimple(property(boolean.class, properties, 5, isAllowSimple())); answer.setAllowEasyPredicate(property(boolean.class, properties, 6, isAllowEasyPredicate())); @@ -151,10 +151,6 @@ public class JsonPathLanguage extends SingleInputTypedLanguageSupport implements } switch (ignoreCase ? name.toLowerCase() : name) { - case "resulttype": - case "resultType": - setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value)); - return true; case "suppressexceptions": case "suppressExceptions": setSuppressExceptions(PropertyConfigurerSupport.property(camelContext, boolean.class, value)); diff --git a/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java b/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java index b11f673bede..3d1ef2598d8 100644 --- a/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java +++ b/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java @@ -48,7 +48,8 @@ import org.apache.camel.util.IOHelper; * defined as well. */ @UriEndpoint(firstVersion = "2.5.0", scheme = "language", title = "Language", syntax = "language:languageName:resourceUri", - remote = false, producerOnly = true, category = { Category.CORE, Category.SCRIPT }, headersClass = LanguageConstants.class) + remote = false, producerOnly = true, category = { Category.CORE, Category.SCRIPT }, + headersClass = LanguageConstants.class) public class LanguageEndpoint extends ResourceEndpoint { private Language language; private Expression expression; @@ -93,16 +94,21 @@ public class LanguageEndpoint extends ResourceEndpoint { if (language == null && languageName != null) { language = getCamelContext().resolveLanguage(languageName); } + Object[] arr = null; if (language instanceof TypedLanguageSupport && resultType != null) { Class<?> clazz = getCamelContext().getClassResolver().resolveMandatoryClass(resultType); - ((TypedLanguageSupport) language).setResultType(clazz); + arr = new Object[] { clazz }; } if (cacheScript && expression == null && script != null) { boolean external = script.startsWith("file:") || script.startsWith("http:"); if (!external) { // we can pre optimize this as the script can be loaded from classpath or registry etc script = resolveScript(script); - expression = language.createExpression(script); + if (arr != null) { + expression = language.createExpression(script, arr); + } else { + expression = language.createExpression(script); + } } } if (expression != null) { diff --git a/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java b/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java index 6fd03362817..cf1554b837c 100644 --- a/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java +++ b/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java @@ -53,7 +53,7 @@ public class XQueryLanguage extends SingleInputTypedLanguageSupport implements P protected void configureBuilder(XQueryBuilder builder, Object[] properties, Expression source) { builder.setSource(source); - Class<?> clazz = property(Class.class, properties, 0, getResultType()); + Class<?> clazz = property(Class.class, properties, 0, null); if (clazz != null) { builder.setResultType(clazz); } @@ -68,10 +68,6 @@ public class XQueryLanguage extends SingleInputTypedLanguageSupport implements P 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; case "configuration": case "Configuration": setConfiguration(PropertyConfigurerSupport.property(camelContext, Configuration.class, value)); diff --git a/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmLanguage.java b/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmLanguage.java index 62632ea79ae..07579ec2418 100644 --- a/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmLanguage.java +++ b/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmLanguage.java @@ -49,10 +49,6 @@ public class WasmLanguage extends TypedLanguageSupport implements PropertyConfig } switch (ignoreCase ? name.toLowerCase() : name) { - case "resulttype": - case "resultType": - setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value)); - return true; case "module": setModule(PropertyConfigurerSupport.property(camelContext, String.class, value)); return true; @@ -79,7 +75,7 @@ public class WasmLanguage extends TypedLanguageSupport implements PropertyConfig @Override public Expression createExpression(String expression, Object[] properties) { WasmExpression answer = new WasmExpression(expression); - answer.setResultType(property(Class.class, properties, 0, getResultType())); + answer.setResultType(property(Class.class, properties, 0, null)); answer.setModule(property(String.class, properties, 1, getModule())); if (getCamelContext() != null) { answer.init(getCamelContext()); diff --git a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java index a0e158f5010..2156f392c1a 100644 --- a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java +++ b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java @@ -130,7 +130,11 @@ public class XPathLanguage extends SingleInputTypedLanguageSupport implements Pr protected void configureBuilder(XPathBuilder builder, Object[] properties, Expression source) { builder.setSource(source); - Class<?> clazz = property(Class.class, properties, 4, documentType); + Class<?> clazz = property(Class.class, properties, 0, null); + if (clazz != null) { + builder.setResultType(clazz); + } + clazz = property(Class.class, properties, 4, documentType); if (clazz != null) { builder.setDocumentType(clazz); } @@ -138,10 +142,6 @@ public class XPathLanguage extends SingleInputTypedLanguageSupport implements Pr if (qname != null) { builder.setResultQName(qname); } - clazz = property(Class.class, properties, 0, getResultType()); - if (clazz != null) { - builder.setResultType(clazz); - } Boolean bool = property(Boolean.class, properties, 6, saxon); if (bool != null) { builder.setUseSaxon(bool); @@ -185,10 +185,6 @@ public class XPathLanguage extends SingleInputTypedLanguageSupport implements Pr } switch (ignoreCase ? name.toLowerCase() : name) { case "resulttype": - case "resultType": - setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value)); - return true; - case "resultqname": case "resultQName": setResultQName(PropertyConfigurerSupport.property(camelContext, QName.class, value)); return true; diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/JavaExpressionReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/JavaExpressionReifier.java index d48571dfb64..4245dc83d40 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/JavaExpressionReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/JavaExpressionReifier.java @@ -29,8 +29,8 @@ public class JavaExpressionReifier extends TypedExpressionReifier<JavaExpression @Override protected Object[] createProperties() { Object[] properties = new Object[3]; - properties[0] = parseBoolean(definition.getPreCompile()); - properties[1] = definition.getResultType(); + properties[0] = definition.getResultType(); + properties[1] = parseBoolean(definition.getPreCompile()); properties[2] = parseBoolean(definition.getSingleQuotes()); return properties; } diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/JoorExpressionReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/JoorExpressionReifier.java index c986b64535a..71b787bdd81 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/JoorExpressionReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/JoorExpressionReifier.java @@ -30,8 +30,8 @@ public class JoorExpressionReifier extends TypedExpressionReifier<JoorExpression @Override protected Object[] createProperties() { Object[] properties = new Object[3]; - properties[0] = parseBoolean(definition.getPreCompile()); - properties[1] = definition.getResultType(); + properties[0] = definition.getResultType(); + properties[1] = parseBoolean(definition.getPreCompile()); properties[2] = parseBoolean(definition.getSingleQuotes()); return properties; } diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java index 2269903b5c6..7a6530c1e7c 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java @@ -31,13 +31,13 @@ public class MethodCallExpressionReifier extends TypedExpressionReifier<MethodCa @Override protected Object[] createProperties() { Object[] properties = new Object[7]; - properties[0] = definition.getInstance(); - properties[1] = parseString(definition.getMethod()); - properties[2] = definition.getBeanType(); - properties[3] = parseString(definition.getRef()); - properties[4] = parseString(definition.getScope()); - properties[5] = parseString(definition.getValidate()); - properties[6] = definition.getResultType(); + properties[0] = definition.getResultType(); + properties[1] = definition.getInstance(); + properties[2] = parseString(definition.getMethod()); + properties[3] = definition.getBeanType(); + properties[4] = parseString(definition.getRef()); + properties[5] = parseString(definition.getScope()); + properties[6] = parseString(definition.getValidate()); return properties; }