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 2014/12/18 21:28:09 UTC
[1/5] camel git commit: CAMEL-8113: Optimize type converter registry.
Repository: camel
Updated Branches:
refs/heads/master 628493645 -> 7f5301b75
CAMEL-8113: Optimize type converter registry.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/aa2339db
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/aa2339db
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/aa2339db
Branch: refs/heads/master
Commit: aa2339dba993a70faed042e54264c3bc58962a06
Parents: 6284936
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 15:22:49 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:56 2014 +0100
----------------------------------------------------------------------
.../impl/converter/BaseTypeConverterRegistry.java | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/aa2339db/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
index 962c415..8c46a9d 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
@@ -266,7 +266,7 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement
}
// try to find a suitable type converter
- TypeConverter converter = getOrFindTypeConverter(type, value);
+ TypeConverter converter = getOrFindTypeConverter(key);
if (converter != null) {
log.trace("Using converter: {} to convert {}", converter, key);
Object rc;
@@ -287,7 +287,7 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement
Class<?> primitiveType = ObjectHelper.convertPrimitiveTypeToWrapperType(type);
if (primitiveType != type) {
Class<?> fromType = value.getClass();
- TypeConverter tc = getOrFindTypeConverter(primitiveType, value);
+ TypeConverter tc = getOrFindTypeConverter(new TypeMapping(primitiveType, fromType));
if (tc != null) {
// add the type as a known type converter as we can convert from primitive to object converter
addTypeConverter(type, fromType, tc);
@@ -436,16 +436,11 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement
return typeMappings;
}
- protected <T> TypeConverter getOrFindTypeConverter(Class<?> toType, Object value) {
- Class<?> fromType = null;
- if (value != null) {
- fromType = value.getClass();
- }
- TypeMapping key = new TypeMapping(toType, fromType);
+ protected <T> TypeConverter getOrFindTypeConverter(TypeMapping key) {
TypeConverter converter = typeMappings.get(key);
if (converter == null) {
// converter not found, try to lookup then
- converter = lookup(toType, fromType);
+ converter = lookup(key.getToType(), key.getFromType());
if (converter != null) {
typeMappings.putIfAbsent(key, converter);
}
[2/5] camel git commit: CAMEL-8113: Optimize type converter registry.
Posted by da...@apache.org.
CAMEL-8113: Optimize type converter registry.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5cfa913c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5cfa913c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5cfa913c
Branch: refs/heads/master
Commit: 5cfa913c265c7b4b3aaa5d08b7ee7f531071671f
Parents: 9cd39ab
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 16:28:11 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:57 2014 +0100
----------------------------------------------------------------------
.../apache/camel/builder/ExpressionBuilder.java | 11 ++-
.../apache/camel/component/bean/MethodInfo.java | 9 ++-
.../camel/language/bean/BeanExpression.java | 7 +-
.../apache/camel/support/ExpressionAdapter.java | 4 ++
.../processor/TransformMethodCallTest.java | 48 -------------
...peConverterRegistryStatsPerformanceTest.java | 76 ++++++++++++++++++++
6 files changed, 101 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
index 20f00b9..91c226c 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
@@ -1001,9 +1001,14 @@ public final class ExpressionBuilder {
}
// if its a bean invocation then if it has no arguments then it should be threaded as null body allowed
- BeanInvocation bi = exchange.getIn().getBody(BeanInvocation.class);
- if (bi != null && (bi.getArgs() == null || bi.getArgs().length == 0 || bi.getArgs()[0] == null)) {
- return null;
+ if (exchange.getIn().getBody() instanceof BeanInvocation) {
+ // BeanInvocation would be stored directly as the message body
+ // do not force any type conversion attempts as it would just be unnecessary and cost a bit performance
+ // so a regular instanceof check is sufficient
+ BeanInvocation bi = (BeanInvocation) exchange.getIn().getBody();
+ if (bi.getArgs() == null || bi.getArgs().length == 0 || bi.getArgs()[0] == null) {
+ return null;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/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 9236cd0..aaf3cf0 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
@@ -594,9 +594,14 @@ public class MethodInfo {
// use object first to avoid type conversion so we know if there is a value or not
Object result = expression.evaluate(exchange, Object.class);
if (result != null) {
- // we got a value now try to convert it to the expected type
try {
- answer = exchange.getContext().getTypeConverter().mandatoryConvertTo(parameterType, result);
+ if (parameterType.isInstance(result)) {
+ // optimize if the value is already the same type
+ answer = result;
+ } else {
+ // we got a value now try to convert it to the expected type
+ answer = exchange.getContext().getTypeConverter().mandatoryConvertTo(parameterType, result);
+ }
if (LOG.isTraceEnabled()) {
LOG.trace("Parameter #{} evaluated as: {} type: ", new Object[]{index, answer, ObjectHelper.type(answer)});
}
http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java b/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
index 3cbc2fa..f5cc981 100644
--- a/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
@@ -130,7 +130,12 @@ public class BeanExpression implements Expression, Predicate {
public <T> T evaluate(Exchange exchange, Class<T> type) {
Object result = evaluate(exchange);
- return exchange.getContext().getTypeConverter().convertTo(type, exchange, result);
+ if (Object.class == type) {
+ // do not use type converter if type is Object (optimize)
+ return (T) result;
+ } else {
+ return exchange.getContext().getTypeConverter().convertTo(type, exchange, result);
+ }
}
public boolean matches(Exchange exchange) {
http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java b/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java
index d8e43a9..3344eab 100644
--- a/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java
+++ b/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java
@@ -34,6 +34,10 @@ public abstract class ExpressionAdapter extends ExpressionSupport {
public <T> T evaluate(Exchange exchange, Class<T> type) {
Object value = evaluate(exchange);
+ if (Object.class == type) {
+ // do not use type converter if type is Object (optimize)
+ return (T) value;
+ }
return exchange.getContext().getTypeConverter().convertTo(type, exchange, value);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java b/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
deleted file mode 100644
index 6144e3c..0000000
--- a/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.processor;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.builder.RouteBuilder;
-
-/**
- * @version
- */
-public class TransformMethodCallTest extends ContextTestSupport {
-
- public void testTransform() throws Exception {
- getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
- }
-
- protected RouteBuilder createRouteBuilder() {
- return new RouteBuilder() {
- public void configure() {
- from("direct:start")
- .transform().method(TransformMethodCallTest.class, "transformMe")
- .to("mock:result");
- }
- };
- }
-
- public String transformMe(String in) {
- return "Hello " + in;
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java b/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
new file mode 100644
index 0000000..077f0f2
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
@@ -0,0 +1,76 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version
+ */
+public class TypeConverterRegistryStatsPerformanceTest extends ContextTestSupport {
+
+ private int size = 1000;
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ context.setTypeConverterStatisticsEnabled(true);
+ return context;
+ }
+
+ public void testTransform() throws Exception {
+ long attempt = context.getTypeConverterRegistry().getStatistics().getAttemptCounter();
+ long failed = context.getTypeConverterRegistry().getStatistics().getFailedCounter();
+ long hit = context.getTypeConverterRegistry().getStatistics().getHitCounter();
+ long miss = context.getTypeConverterRegistry().getStatistics().getMissCounter();
+
+ getMockEndpoint("mock:result").expectedMessageCount(size);
+
+ for (int i = 0; i < size; i++) {
+ template.sendBody("direct:start", "World");
+ }
+
+ assertMockEndpointsSatisfied();
+
+ long attempt2 = context.getTypeConverterRegistry().getStatistics().getAttemptCounter();
+ long failed2 = context.getTypeConverterRegistry().getStatistics().getFailedCounter();
+ long hit2 = context.getTypeConverterRegistry().getStatistics().getHitCounter();
+ long miss2 = context.getTypeConverterRegistry().getStatistics().getMissCounter();
+
+ log.info("Attempt: before={}, after={}, delta={}", new Object[]{attempt, attempt2, attempt2 - attempt});
+ log.info("Failed: before={}, after={}, delta={}", new Object[]{failed, failed2, failed2 - failed});
+ log.info("Hit: before={}, after={}, delta={}", new Object[]{hit, hit2, hit2 - hit});
+ log.info("Miss: before={}, after={}, delta={}", new Object[]{miss, miss2, miss2 - miss});
+ }
+
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ public void configure() {
+ from("direct:start")
+ .transform().method(TypeConverterRegistryStatsPerformanceTest.class, "transformMe")
+// .bean(TypeConverterRegistryStatsPerformanceTest.class, "transformMe")
+ .to("mock:result");
+ }
+ };
+ }
+
+ public String transformMe(String in) {
+ return "Hello " + in;
+ }
+}
[3/5] camel git commit: CAMEL-8113: Optimize type converter registry.
Posted by da...@apache.org.
CAMEL-8113: Optimize type converter registry.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a707e51c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a707e51c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a707e51c
Branch: refs/heads/master
Commit: a707e51ca5e29ed4396aa2e7bfc69fa604bc7614
Parents: 5cfa913
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 16:54:33 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:57 2014 +0100
----------------------------------------------------------------------
.../java/org/apache/camel/component/file/FileOperations.java | 2 +-
.../src/main/java/org/apache/camel/util/MessageHelper.java | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/a707e51c/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java b/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
index 7851cfc..5bf82bb 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
@@ -259,7 +259,7 @@ public class FileOperations implements GenericFileOperations<File> {
if (charset != null) {
// charset configured so we must use a reader so we can write with encoding
- Reader in = exchange.getIn().getBody(Reader.class);
+ Reader in = exchange.getContext().getTypeConverter().tryConvertTo(Reader.class, exchange, exchange.getIn().getBody());
if (in == null) {
// okay no direct reader conversion, so use an input stream (which a lot can be converted as)
InputStream is = exchange.getIn().getMandatoryBody(InputStream.class);
http://git-wip-us.apache.org/repos/asf/camel/blob/a707e51c/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
index 879fcbf..f0cae78 100644
--- a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
@@ -67,6 +67,13 @@ public final class MessageHelper {
return null;
}
+ // optimize if the body is a String type already
+ Object body = message.getBody();
+ if (body instanceof String) {
+ return (String) body;
+ }
+
+ // we need to favor using stream cache so the body can be re-read later
StreamCache newBody = message.getBody(StreamCache.class);
if (newBody != null) {
message.setBody(newBody);
[4/5] camel git commit: CAMEL-8113: Optimize type converter registry.
Posted by da...@apache.org.
CAMEL-8113: Optimize type converter registry.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7f5301b7
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7f5301b7
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7f5301b7
Branch: refs/heads/master
Commit: 7f5301b75bc30acfe7c37d12225f385b2a2e9c3b
Parents: a707e51
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 17:12:40 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:57 2014 +0100
----------------------------------------------------------------------
.../apache/camel/component/bean/BeanHolder.java | 7 +++++++
.../camel/component/bean/BeanProcessor.java | 18 +++++++++++++-----
.../camel/component/bean/ConstantBeanHolder.java | 12 +++++++++---
.../component/bean/ConstantTypeBeanHolder.java | 4 ++++
.../apache/camel/component/bean/RegistryBean.java | 4 ++++
...TypeConverterRegistryStatsPerformanceTest.java | 8 ++++++--
6 files changed, 43 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java b/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java
index 7f26df3..5cb9dd4 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java
@@ -41,6 +41,13 @@ public interface BeanHolder {
Processor getProcessor();
/**
+ * Whether a {@link Processor} is supported by this bean holder.
+ *
+ * @return <tt>true</tt> if the holder can supporting using a processor, <tt>false</tt> otherwise
+ */
+ boolean supportProcessor();
+
+ /**
* Gets bean info for the bean.
*/
BeanInfo getBeanInfo();
http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java b/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
index 055ebfb..bf8ddbe 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
public class BeanProcessor extends ServiceSupport implements AsyncProcessor {
private static final Logger LOG = LoggerFactory.getLogger(BeanProcessor.class);
+ private Processor processor;
private boolean multiParameterArray;
private String method;
private BeanHolder beanHolder;
@@ -90,8 +91,11 @@ public class BeanProcessor extends ServiceSupport implements AsyncProcessor {
// do we have a custom adapter for this POJO to a Processor
// but only do this if allowed
if (allowProcessor(explicitMethodName, beanInfo)) {
- // so if there is a custom type converter for the bean to processor
- Processor processor = exchange.getContext().getTypeConverter().tryConvertTo(Processor.class, exchange, bean);
+ Processor processor = getProcessor();
+ if (processor == null) {
+ // so if there is a custom type converter for the bean to processor
+ processor = exchange.getContext().getTypeConverter().convertTo(Processor.class, exchange, bean);
+ }
if (processor != null) {
LOG.trace("Using a custom adapter as bean invocation: {}", processor);
try {
@@ -168,7 +172,7 @@ public class BeanProcessor extends ServiceSupport implements AsyncProcessor {
}
protected Processor getProcessor() {
- return beanHolder.getProcessor();
+ return processor;
}
public Object getBean() {
@@ -214,11 +218,15 @@ public class BeanProcessor extends ServiceSupport implements AsyncProcessor {
// Implementation methods
//-------------------------------------------------------------------------
protected void doStart() throws Exception {
- ServiceHelper.startService(getProcessor());
+ // optimize to only get (create) a processor if really needed
+ if (beanHolder.supportProcessor() && allowProcessor(method, beanHolder.getBeanInfo())) {
+ processor = beanHolder.getProcessor();
+ ServiceHelper.startService(processor);
+ }
}
protected void doStop() throws Exception {
- ServiceHelper.stopService(getProcessor());
+ ServiceHelper.stopService(processor);
}
private boolean allowProcessor(String explicitMethodName, BeanInfo info) {
http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java b/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java
index 2cac840..d2cbe1c 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java
@@ -29,7 +29,7 @@ import org.apache.camel.util.ObjectHelper;
public class ConstantBeanHolder implements BeanHolder {
private final Object bean;
private final BeanInfo beanInfo;
- private final Processor processor;
+ private Processor processor;
public ConstantBeanHolder(Object bean, BeanInfo beanInfo) {
ObjectHelper.notNull(bean, "bean");
@@ -37,7 +37,6 @@ public class ConstantBeanHolder implements BeanHolder {
this.bean = bean;
this.beanInfo = beanInfo;
- this.processor = CamelContextHelper.convertTo(beanInfo.getCamelContext(), Processor.class, bean);
}
public ConstantBeanHolder(Object bean, CamelContext context) {
@@ -59,7 +58,14 @@ public class ConstantBeanHolder implements BeanHolder {
}
public Processor getProcessor() {
- return processor;
+ if (this.processor == null) {
+ this.processor = CamelContextHelper.convertTo(beanInfo.getCamelContext(), Processor.class, bean);
+ }
+ return this.processor;
+ }
+
+ public boolean supportProcessor() {
+ return true;
}
public BeanInfo getBeanInfo() {
http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java b/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java
index b0b0694..8c9dc55 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java
@@ -68,6 +68,10 @@ public class ConstantTypeBeanHolder implements BeanTypeHolder {
return null;
}
+ public boolean supportProcessor() {
+ return false;
+ }
+
public BeanInfo getBeanInfo() {
return beanInfo;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java b/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java
index 76a2f81..5f645f9 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java
@@ -93,6 +93,10 @@ public class RegistryBean implements BeanHolder {
return null;
}
+ public boolean supportProcessor() {
+ return false;
+ }
+
public BeanInfo getBeanInfo() {
if (beanInfo == null) {
Object bean = getBean();
http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java b/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
index 077f0f2..ab3d170 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
@@ -64,8 +64,8 @@ public class TypeConverterRegistryStatsPerformanceTest extends ContextTestSuppor
public void configure() {
from("direct:start")
.transform().method(TypeConverterRegistryStatsPerformanceTest.class, "transformMe")
-// .bean(TypeConverterRegistryStatsPerformanceTest.class, "transformMe")
- .to("mock:result");
+ .bean(TypeConverterRegistryStatsPerformanceTest.class, "transformMeAlso")
+ .to("mock:result");
}
};
}
@@ -73,4 +73,8 @@ public class TypeConverterRegistryStatsPerformanceTest extends ContextTestSuppor
public String transformMe(String in) {
return "Hello " + in;
}
+
+ public String transformMeAlso(String in) {
+ return "Bye " + in;
+ }
}
[5/5] camel git commit: CAMEL-8113: added unit test
Posted by da...@apache.org.
CAMEL-8113: added unit test
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9cd39ab9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9cd39ab9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9cd39ab9
Branch: refs/heads/master
Commit: 9cd39ab902309e630a41560cfe585deee2c99a2e
Parents: aa2339d
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 15:47:01 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:57 2014 +0100
----------------------------------------------------------------------
.../processor/TransformMethodCallTest.java | 48 ++++++++++++++++++++
1 file changed, 48 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/9cd39ab9/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java b/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
new file mode 100644
index 0000000..6144e3c
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version
+ */
+public class TransformMethodCallTest extends ContextTestSupport {
+
+ public void testTransform() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+ template.sendBody("direct:start", "World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ public void configure() {
+ from("direct:start")
+ .transform().method(TransformMethodCallTest.class, "transformMe")
+ .to("mock:result");
+ }
+ };
+ }
+
+ public String transformMe(String in) {
+ return "Hello " + in;
+ }
+}