Optimise - Bean component - Dont set multi parameter header if not really needed. Also it should be deprecated as its some old cruft.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cec467ff Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cec467ff Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cec467ff Branch: refs/heads/master Commit: cec467ff7c512e9b04e05448273aa6938dc406a8 Parents: 40db0a7 Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Jun 2 11:14:08 2017 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Jun 2 11:16:09 2017 +0200 ---------------------------------------------------------------------- .../src/main/java/org/apache/camel/Exchange.java | 1 + .../component/bean/AbstractBeanProcessor.java | 16 ++++++++++------ .../apache/camel/component/bean/MethodInfo.java | 17 ++++++++--------- 3 files changed, 19 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/cec467ff/camel-core/src/main/java/org/apache/camel/Exchange.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/Exchange.java b/camel-core/src/main/java/org/apache/camel/Exchange.java index 87fcf13..56e0780 100644 --- a/camel-core/src/main/java/org/apache/camel/Exchange.java +++ b/camel-core/src/main/java/org/apache/camel/Exchange.java @@ -89,6 +89,7 @@ public interface Exchange { String BATCH_SIZE = "CamelBatchSize"; String BATCH_COMPLETE = "CamelBatchComplete"; String BEAN_METHOD_NAME = "CamelBeanMethodName"; + @Deprecated String BEAN_MULTI_PARAMETER_ARRAY = "CamelBeanMultiParameterArray"; String BINDING = "CamelBinding"; // do not prefix with Camel and use lower-case starting letter as its a shared key http://git-wip-us.apache.org/repos/asf/camel/blob/cec467ff/camel-core/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java b/camel-core/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java index 858253e..88d78c7 100644 --- a/camel-core/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java +++ b/camel-core/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java @@ -146,15 +146,15 @@ public abstract class AbstractBeanProcessor implements AsyncProcessor { } // set temporary header which is a hint for the bean info that introspect the bean - if (in.getHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY) == null) { - in.setHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY, isMultiParameterArray()); + if (isMultiParameterArray()) { + in.setHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY, Boolean.TRUE); } - - MethodInvocation invocation; // set explicit method name to invoke as a header, which is how BeanInfo can detect it if (explicitMethodName != null) { in.setHeader(Exchange.BEAN_METHOD_NAME, explicitMethodName); } + + MethodInvocation invocation; try { invocation = beanInfo.createInvocation(bean, exchange); } catch (Throwable e) { @@ -163,8 +163,12 @@ public abstract class AbstractBeanProcessor implements AsyncProcessor { return true; } finally { // must remove headers as they were provisional - in.removeHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY); - in.removeHeader(Exchange.BEAN_METHOD_NAME); + if (isMultiParameterArray()) { + in.removeHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY); + } + if (explicitMethodName != null) { + in.removeHeader(Exchange.BEAN_METHOD_NAME); + } } if (invocation == null) { http://git-wip-us.apache.org/repos/asf/camel/blob/cec467ff/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java b/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java index fa04efc..f2aedb9 100644 --- a/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java +++ b/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java @@ -639,14 +639,11 @@ public class MethodInfo { @SuppressWarnings("unchecked") public <T> T evaluate(Exchange exchange, Class<T> type) { Object body = exchange.getIn().getBody(); - boolean multiParameterArray = false; - if (exchange.getIn().getHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY) != null) { - multiParameterArray = exchange.getIn().getHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY, Boolean.class); - if (multiParameterArray) { - // Just change the message body to an Object array - if (!(body instanceof Object[])) { - body = exchange.getIn().getBody(Object[].class); - } + boolean multiParameterArray = exchange.getIn().getHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY, false, boolean.class); + if (multiParameterArray) { + // Just change the message body to an Object array + if (!(body instanceof Object[])) { + body = exchange.getIn().getBody(Object[].class); } } @@ -668,7 +665,9 @@ public class MethodInfo { // we need to do this before the expressions gets evaluated as it may contain // a @Bean expression which would by mistake read these headers. So the headers // must be removed at this point of time - exchange.getIn().removeHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY); + if (multiParameterArray) { + exchange.getIn().removeHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY); + } exchange.getIn().removeHeader(Exchange.BEAN_METHOD_NAME); Object[] answer = evaluateParameterExpressions(exchange, body, multiParameterArray, it);