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 ea0e43499221032d535827dce41cb4b0ec9e5af5 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sun May 26 09:16:13 2019 +0200 CAMEL-13557: Add property binding support to make it convenient to configure components and whatnot. --- .../apache/camel/model/LoadBalancerDefinition.java | 11 -------- .../camel/model/ProcessorDefinitionHelper.java | 7 +++-- .../camel/model/language/ExpressionDefinition.java | 4 +-- .../camel/model/language/JsonPathExpression.java | 24 ++++++++-------- .../camel/model/language/MethodCallExpression.java | 8 +++--- .../model/language/XMLTokenizerExpression.java | 12 ++++---- .../camel/model/language/XPathExpression.java | 32 +++++++++++----------- .../camel/model/language/XQueryExpression.java | 8 +++--- .../org/apache/camel/reifier/ChoiceReifier.java | 2 +- .../org/apache/camel/reifier/ProcessorReifier.java | 8 +++--- .../reifier/dataformat/DataFormatReifier.java | 2 +- .../runtimecatalog/impl/JSonSchemaHelperTest.java | 9 +++--- .../camel/support/builder/ExpressionBuilder.java | 18 ++++++------ 13 files changed, 68 insertions(+), 77 deletions(-) diff --git a/core/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java index 4e5996f..7948897 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java @@ -56,17 +56,6 @@ public class LoadBalancerDefinition extends IdentifiedType implements OtherAttri } /** - * Sets a named property on the data format instance using introspection - */ - protected void setProperty(Object bean, String name, Object value) { - try { - IntrospectionSupport.setProperty(bean, name, value); - } catch (Exception e) { - throw new IllegalArgumentException("Failed to set property " + name + " on " + bean + ". Reason: " + e, e); - } - } - - /** * Maximum number of outputs, as some load balancers only support 1 processor */ public int getMaximumNumberOfOutputs() { diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java index b0f55c5..19df7cc 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java @@ -755,9 +755,10 @@ public final class ProcessorDefinitionHelper { * This implementation will check all the getter/setter pairs on this instance and for all the values * (which is a String type) will check if it refers to a known field (such as on Exchange). * - * @param definition the definition + * @param camelContext the camel context + * @param definition the definition */ - public static void resolveKnownConstantFields(Object definition) throws Exception { + public static void resolveKnownConstantFields(CamelContext camelContext, Object definition) throws Exception { LOG.trace("Resolving known fields for: {}", definition); // find all String getter/setter @@ -782,7 +783,7 @@ public final class ProcessorDefinitionHelper { String constant = ObjectHelper.lookupConstantFieldValue(Exchange.class, field); if (constant != null) { // invoke setter as the text has changed - IntrospectionSupport.setProperty(definition, name, constant); + IntrospectionSupport.setProperty(camelContext, definition, name, constant); changedProperties.put(name, value); if (LOG.isDebugEnabled()) { LOG.debug("Changed property [{}] from: {} to: {}", name, value, constant); diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java index 3facfaf..3669bd8 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java @@ -323,9 +323,9 @@ public class ExpressionDefinition implements Expression, Predicate, OtherAttribu /** * Sets a named property on the object instance using introspection */ - protected void setProperty(Object bean, String name, Object value) { + protected void setProperty(CamelContext camelContext, Object bean, String name, Object value) { try { - IntrospectionSupport.setProperty(bean, name, value); + IntrospectionSupport.setProperty(camelContext, bean, name, value); } catch (Exception e) { throw new IllegalArgumentException("Failed to set property " + name + " on " + bean + ". Reason: " + e, e); diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/JsonPathExpression.java b/core/camel-core/src/main/java/org/apache/camel/model/language/JsonPathExpression.java index da729ab..eb28775 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/language/JsonPathExpression.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/language/JsonPathExpression.java @@ -154,22 +154,22 @@ public class JsonPathExpression extends ExpressionDefinition { @Override protected void configureExpression(CamelContext camelContext, Expression expression) { if (resultType != null) { - setProperty(expression, "resultType", resultType); + setProperty(camelContext, expression, "resultType", resultType); } if (suppressExceptions != null) { - setProperty(expression, "suppressExceptions", suppressExceptions); + setProperty(camelContext, expression, "suppressExceptions", suppressExceptions); } if (allowSimple != null) { - setProperty(expression, "allowSimple", allowSimple); + setProperty(camelContext, expression, "allowSimple", allowSimple); } if (allowEasyPredicate != null) { - setProperty(expression, "allowEasyPredicate", allowEasyPredicate); + setProperty(camelContext, expression, "allowEasyPredicate", allowEasyPredicate); } if (writeAsString != null) { - setProperty(expression, "writeAsString", writeAsString); + setProperty(camelContext, expression, "writeAsString", writeAsString); } if (headerName != null) { - setProperty(expression, "headerName", headerName); + setProperty(camelContext, expression, "headerName", headerName); } super.configureExpression(camelContext, expression); } @@ -177,22 +177,22 @@ public class JsonPathExpression extends ExpressionDefinition { @Override protected void configurePredicate(CamelContext camelContext, Predicate predicate) { if (resultType != null) { - setProperty(predicate, "resultType", resultType); + setProperty(camelContext, predicate, "resultType", resultType); } if (suppressExceptions != null) { - setProperty(predicate, "suppressExceptions", suppressExceptions); + setProperty(camelContext, predicate, "suppressExceptions", suppressExceptions); } if (allowSimple != null) { - setProperty(predicate, "allowSimple", allowSimple); + setProperty(camelContext, predicate, "allowSimple", allowSimple); } if (allowEasyPredicate != null) { - setProperty(predicate, "allowEasyPredicate", allowEasyPredicate); + setProperty(camelContext, predicate, "allowEasyPredicate", allowEasyPredicate); } if (writeAsString != null) { - setProperty(predicate, "writeAsString", writeAsString); + setProperty(camelContext, predicate, "writeAsString", writeAsString); } if (headerName != null) { - setProperty(predicate, "headerName", headerName); + setProperty(camelContext, predicate, "headerName", headerName); } super.configurePredicate(camelContext, predicate); } diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/MethodCallExpression.java b/core/camel-core/src/main/java/org/apache/camel/model/language/MethodCallExpression.java index 68520ba..4d5e8ce 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/language/MethodCallExpression.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/language/MethodCallExpression.java @@ -173,16 +173,16 @@ public class MethodCallExpression extends ExpressionDefinition { protected void configureLanguage(CamelContext camelContext, Language language) { if (instance != null) { - setProperty(language, "bean", instance); + setProperty(camelContext, language, "bean", instance); } if (beanType != null) { - setProperty(language, "beanType", beanType); + setProperty(camelContext, language, "beanType", beanType); } if (ref != null) { - setProperty(language, "ref", ref); + setProperty(camelContext, language, "ref", ref); } if (method != null) { - setProperty(language, "method", method); + setProperty(camelContext, language, "method", method); } } diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java b/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java index 7c09111..1cd75a5 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java @@ -96,13 +96,13 @@ public class XMLTokenizerExpression extends NamespaceAwareExpression { @Override protected void configureExpression(CamelContext camelContext, Expression expression) { if (headerName != null) { - setProperty(expression, "headerName", headerName); + setProperty(camelContext, expression, "headerName", headerName); } if (mode != null) { - setProperty(expression, "mode", mode); + setProperty(camelContext, expression, "mode", mode); } if (group != null) { - setProperty(expression, "group", group); + setProperty(camelContext, expression, "group", group); } super.configureExpression(camelContext, expression); } @@ -110,13 +110,13 @@ public class XMLTokenizerExpression extends NamespaceAwareExpression { @Override protected void configurePredicate(CamelContext camelContext, Predicate predicate) { if (headerName != null) { - setProperty(predicate, "headerName", headerName); + setProperty(camelContext, predicate, "headerName", headerName); } if (mode != null) { - setProperty(predicate, "mode", mode); + setProperty(camelContext, predicate, "mode", mode); } if (group != null) { - setProperty(predicate, "group", group); + setProperty(camelContext, predicate, "group", group); } super.configurePredicate(camelContext, predicate); } diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java b/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java index 7ac65e0..00c7c42 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java @@ -240,28 +240,28 @@ public class XPathExpression extends NamespaceAwareExpression { boolean isLogNamespaces = getLogNamespaces() != null && getLogNamespaces(); if (documentType != null) { - setProperty(expression, "documentType", documentType); + setProperty(camelContext, expression, "documentType", documentType); } if (resultType != null) { - setProperty(expression, "resultType", resultType); + setProperty(camelContext, expression, "resultType", resultType); } if (isSaxon) { - setProperty(expression, "useSaxon", true); + setProperty(camelContext, expression, "useSaxon", true); } if (xpathFactory != null) { - setProperty(expression, "xPathFactory", xpathFactory); + setProperty(camelContext, expression, "xPathFactory", xpathFactory); } if (objectModel != null) { - setProperty(expression, "objectModelUri", objectModel); + setProperty(camelContext, expression, "objectModelUri", objectModel); } if (threadSafety != null) { - setProperty(expression, "threadSafety", threadSafety); + setProperty(camelContext, expression, "threadSafety", threadSafety); } if (isLogNamespaces) { - setProperty(expression, "logNamespaces", true); + setProperty(camelContext, expression, "logNamespaces", true); } if (ObjectHelper.isNotEmpty(getHeaderName())) { - setProperty(expression, "headerName", getHeaderName()); + setProperty(camelContext, expression, "headerName", getHeaderName()); } // moved the super configuration to the bottom so that the namespace init picks up the newly set XPath Factory super.configureExpression(camelContext, expression); @@ -273,28 +273,28 @@ public class XPathExpression extends NamespaceAwareExpression { boolean isLogNamespaces = getLogNamespaces() != null && getLogNamespaces(); if (documentType != null) { - setProperty(predicate, "documentType", documentType); + setProperty(camelContext, predicate, "documentType", documentType); } if (resultType != null) { - setProperty(predicate, "resultType", resultType); + setProperty(camelContext, predicate, "resultType", resultType); } if (isSaxon) { - setProperty(predicate, "useSaxon", true); + setProperty(camelContext, predicate, "useSaxon", true); } if (xpathFactory != null) { - setProperty(predicate, "xPathFactory", xpathFactory); + setProperty(camelContext, predicate, "xPathFactory", xpathFactory); } if (objectModel != null) { - setProperty(predicate, "objectModelUri", objectModel); + setProperty(camelContext, predicate, "objectModelUri", objectModel); } if (threadSafety != null) { - setProperty(predicate, "threadSafety", threadSafety); + setProperty(camelContext, predicate, "threadSafety", threadSafety); } if (isLogNamespaces) { - setProperty(predicate, "logNamespaces", true); + setProperty(camelContext, predicate, "logNamespaces", true); } if (ObjectHelper.isNotEmpty(getHeaderName())) { - setProperty(predicate, "headerName", getHeaderName()); + setProperty(camelContext, predicate, "headerName", getHeaderName()); } // moved the super configuration to the bottom so that the namespace init picks up the newly set XPath Factory super.configurePredicate(camelContext, predicate); diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java b/core/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java index 37fbf96..615188f 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java @@ -107,10 +107,10 @@ public class XQueryExpression extends NamespaceAwareExpression { @Override protected void configureExpression(CamelContext camelContext, Expression expression) { if (resultType != null) { - setProperty(expression, "resultType", resultType); + setProperty(camelContext, expression, "resultType", resultType); } if (ObjectHelper.isNotEmpty(getHeaderName())) { - setProperty(expression, "headerName", getHeaderName()); + setProperty(camelContext, expression, "headerName", getHeaderName()); } super.configureExpression(camelContext, expression); } @@ -118,10 +118,10 @@ public class XQueryExpression extends NamespaceAwareExpression { @Override protected void configurePredicate(CamelContext camelContext, Predicate predicate) { if (resultType != null) { - setProperty(predicate, "resultType", resultType); + setProperty(camelContext, predicate, "resultType", resultType); } if (ObjectHelper.isNotEmpty(getHeaderName())) { - setProperty(predicate, "headerName", getHeaderName()); + setProperty(camelContext, predicate, "headerName", getHeaderName()); } super.configurePredicate(camelContext, predicate); } diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/ChoiceReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/ChoiceReifier.java index 11fa17e..272d79f 100644 --- a/core/camel-core/src/main/java/org/apache/camel/reifier/ChoiceReifier.java +++ b/core/camel-core/src/main/java/org/apache/camel/reifier/ChoiceReifier.java @@ -68,7 +68,7 @@ class ChoiceReifier extends ProcessorReifier<ChoiceDefinition> { ProcessorDefinitionHelper.resolvePropertyPlaceholders(routeContext.getCamelContext(), exp); // resolve constant fields (eg Exchange.FILE_NAME) - ProcessorDefinitionHelper.resolveKnownConstantFields(exp); + ProcessorDefinitionHelper.resolveKnownConstantFields(routeContext.getCamelContext(), exp); } FilterProcessor filter = (FilterProcessor) createProcessor(routeContext, whenClause); diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java index 891ca43..e42afe1 100644 --- a/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java +++ b/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java @@ -432,7 +432,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> { ProcessorDefinitionHelper.resolvePropertyPlaceholders(routeContext.getCamelContext(), output); // resolve constant fields (eg Exchange.FILE_NAME) - ProcessorDefinitionHelper.resolveKnownConstantFields(output); + ProcessorDefinitionHelper.resolveKnownConstantFields(routeContext.getCamelContext(), output); // also resolve properties and constant fields on embedded expressions ProcessorDefinition<?> me = (ProcessorDefinition<?>) output; @@ -444,7 +444,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> { ProcessorDefinitionHelper.resolvePropertyPlaceholders(routeContext.getCamelContext(), expressionDefinition); // resolve constant fields (eg Exchange.FILE_NAME) - ProcessorDefinitionHelper.resolveKnownConstantFields(expressionDefinition); + ProcessorDefinitionHelper.resolveKnownConstantFields(routeContext.getCamelContext(), expressionDefinition); } } @@ -515,7 +515,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> { ProcessorDefinitionHelper.resolvePropertyPlaceholders(routeContext.getCamelContext(), definition); // resolve constant fields (eg Exchange.FILE_NAME) - ProcessorDefinitionHelper.resolveKnownConstantFields(definition); + ProcessorDefinitionHelper.resolveKnownConstantFields(routeContext.getCamelContext(), definition); // also resolve properties and constant fields on embedded expressions ProcessorDefinition<?> me = definition; @@ -527,7 +527,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> { ProcessorDefinitionHelper.resolvePropertyPlaceholders(routeContext.getCamelContext(), expressionDefinition); // resolve constant fields (eg Exchange.FILE_NAME) - ProcessorDefinitionHelper.resolveKnownConstantFields(expressionDefinition); + ProcessorDefinitionHelper.resolveKnownConstantFields(routeContext.getCamelContext(), expressionDefinition); } } diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java index 635f7f5..df57391 100644 --- a/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java +++ b/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java @@ -228,7 +228,7 @@ public abstract class DataFormatReifier<T extends DataFormatDefinition> { if (isReferenceParameter(ref) && camelContext != null) { IntrospectionSupport.setProperty(camelContext, camelContext.getTypeConverter(), bean, name, null, ref, true); } else { - IntrospectionSupport.setProperty(bean, name, value); + IntrospectionSupport.setProperty(camelContext, bean, name, value); } } catch (Exception e) { throw new IllegalArgumentException("Failed to set property: " + name + " on: " + bean + ". Reason: " + e, e); diff --git a/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/JSonSchemaHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/JSonSchemaHelperTest.java index 578229f..24c7461 100644 --- a/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/JSonSchemaHelperTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/JSonSchemaHelperTest.java @@ -54,12 +54,13 @@ public class JSonSchemaHelperTest extends ContextTestSupport { assertEquals("version", rows.get(16).keySet().iterator().next()); rows = JSonSchemaHelper.parseJsonSchema("properties", json, true); - assertEquals(5, rows.size()); + assertEquals(6, rows.size()); assertEquals("beanName", rows.get(0).values().iterator().next()); assertEquals("method", rows.get(1).values().iterator().next()); - assertEquals("cache", rows.get(2).values().iterator().next()); - assertEquals("parameters", rows.get(3).values().iterator().next()); - assertEquals("synchronous", rows.get(4).values().iterator().next()); + assertEquals("basicPropertyBinding", rows.get(2).values().iterator().next()); + assertEquals("cache", rows.get(3).values().iterator().next()); + assertEquals("parameters", rows.get(4).values().iterator().next()); + assertEquals("synchronous", rows.get(5).values().iterator().next()); } @Test 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 e97813c..de302e6 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 @@ -1525,8 +1525,8 @@ public class ExpressionBuilder { return new ExpressionAdapter() { public Object evaluate(Exchange exchange) { Language language = exchange.getContext().resolveLanguage("bean"); - setProperty(language, "bean", bean); - setProperty(language, "method", expression); + setProperty(exchange.getContext(), language, "bean", bean); + setProperty(exchange.getContext(), language, "method", expression); return language.createExpression(null).evaluate(exchange, Object.class); } @@ -1618,18 +1618,18 @@ public class ExpressionBuilder { public Object evaluate(Exchange exchange) { Language language = exchange.getContext().resolveLanguage("xtokenize"); if (headerName != null) { - setProperty(language, "headerName", headerName); + setProperty(exchange.getContext(), language, "headerName", headerName); } if (mode != 'i') { - setProperty(language, "mode", mode); + setProperty(exchange.getContext(), language, "mode", mode); } if (group > 1) { - setProperty(language, "group", group); + setProperty(exchange.getContext(), language, "group", group); } if (namespaces != null) { - setProperty(language, "namespaces", namespaces); + setProperty(exchange.getContext(), language, "namespaces", namespaces); } - setProperty(language, "path", path); + setProperty(exchange.getContext(), language, "path", path); return language.createExpression(null).evaluate(exchange, Object.class); } @@ -1640,9 +1640,9 @@ public class ExpressionBuilder { }; } - protected static void setProperty(Object bean, String name, Object value) { + protected static void setProperty(CamelContext camelContext, Object bean, String name, Object value) { try { - IntrospectionSupport.setProperty(bean, name, value); + IntrospectionSupport.setProperty(camelContext, bean, name, value); } catch (Exception e) { throw new IllegalArgumentException("Failed to set property " + name + " on " + bean + ". Reason: " + e, e); }