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 2017/09/28 12:20:25 UTC
[3/4] camel git commit: CAMEL-11862: Convert to requested type values
retrieved from the repository
CAMEL-11862: Convert to requested type values retrieved from the repository
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6efb461c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6efb461c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6efb461c
Branch: refs/heads/camel-2.19.x
Commit: 6efb461cf66319e49388c789247b6babfbe7d678
Parents: 93ec6f3
Author: Ion Savin <co...@gmx.net>
Authored: Thu Sep 28 13:02:13 2017 +0300
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Sep 28 14:20:07 2017 +0200
----------------------------------------------------------------------
.../apache/camel/util/CamelContextHelper.java | 28 ++++++++++++++++++++
.../org/apache/camel/util/EndpointHelper.java | 4 +--
.../apache/camel/impl/DefaultComponentTest.java | 24 +++++++++++++++++
.../apache/camel/util/EndpointHelperTest.java | 23 ++++++++++++++++
4 files changed, 77 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/6efb461c/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java b/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
index d126005..a3ff4da 100644
--- a/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
@@ -103,6 +103,14 @@ public final class CamelContextHelper {
}
/**
+ * Tried to convert the given value to the requested type
+ */
+ public static <T> T tryConvertTo(CamelContext context, Class<T> type, Object value) {
+ notNull(context, "camelContext");
+ return context.getTypeConverter().tryConvertTo(type, value);
+ }
+
+ /**
* Converts the given value to the specified type throwing an {@link IllegalArgumentException}
* if the value could not be converted to a non null value
*/
@@ -139,6 +147,14 @@ public final class CamelContextHelper {
}
/**
+ * Look up the given named bean in the {@link org.apache.camel.spi.Registry} on the
+ * {@link CamelContext} and try to convert it to the given type.
+ */
+ public static <T> T lookupAndConvert(CamelContext context, String name, Class<T> beanType) {
+ return tryConvertTo(context, beanType, lookup(context, name));
+ }
+
+ /**
* Look up a bean of the give type in the {@link org.apache.camel.spi.Registry} on the
* {@link CamelContext} returning an instance if only one bean is present,
*/
@@ -176,6 +192,18 @@ public final class CamelContextHelper {
}
/**
+ * Look up the given named bean in the {@link org.apache.camel.spi.Registry} on the
+ * {@link CamelContext} and convert it to the given type or throws NoSuchBeanException if not found.
+ */
+ public static <T> T mandatoryLookupAndConvert(CamelContext context, String name, Class<T> beanType) {
+ Object value = lookup(context, name);
+ if (value == null) {
+ throw new NoSuchBeanException(name, beanType.getName());
+ }
+ return convertTo(context, beanType, value);
+ }
+
+ /**
* Evaluates the @EndpointInject annotation using the given context
*/
public static Endpoint getEndpointInjection(CamelContext camelContext, String uri, String ref, String injectionPointName, boolean mandatory) {
http://git-wip-us.apache.org/repos/asf/camel/blob/6efb461c/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java b/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java
index a32c109..979bc11 100644
--- a/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java
@@ -323,9 +323,9 @@ public final class EndpointHelper {
public static <T> T resolveReferenceParameter(CamelContext context, String value, Class<T> type, boolean mandatory) {
String valueNoHash = StringHelper.replaceAll(value, "#", "");
if (mandatory) {
- return CamelContextHelper.mandatoryLookup(context, valueNoHash, type);
+ return CamelContextHelper.mandatoryLookupAndConvert(context, valueNoHash, type);
} else {
- return CamelContextHelper.lookup(context, valueNoHash, type);
+ return CamelContextHelper.lookupAndConvert(context, valueNoHash, type);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6efb461c/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java b/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
index 508c4e2..0be63bb 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
@@ -26,6 +26,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Endpoint;
import org.apache.camel.NoSuchBeanException;
+import org.apache.camel.TypeConversionException;
/**
* Unit test for helper methods on the DefaultComponent.
@@ -93,6 +94,27 @@ public class DefaultComponentTest extends ContextTestSupport {
assertEquals(new Date(0), value);
}
+ public void testResolveAndRemoveReferenceParameterWithConversion() {
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("number", "#numeric");
+ MyComponent my = new MyComponent(this.context);
+ Integer value = my.resolveAndRemoveReferenceParameter(parameters, "number", Integer.class);
+ assertEquals(12345, value.intValue());
+ }
+
+ public void testResolveAndRemoveReferenceParameterWithFailedConversion() {
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("number", "#non-numeric");
+ MyComponent my = new MyComponent(this.context);
+ try {
+ my.resolveAndRemoveReferenceParameter(parameters, "number", Integer.class);
+ } catch (TypeConversionException ex) {
+ assertEquals("Error during type conversion from type: java.lang.String " +
+ "to the required type: java.lang.Integer " +
+ "with value abc due For input string: \"abc\"", ex.getMessage());
+ }
+ }
+
public void testResolveAndRemoveReferenceParameterNotInRegistry() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("date", "#somewhen");
@@ -229,6 +251,8 @@ public class DefaultComponentTest extends ContextTestSupport {
jndiRegistry.bind("bean1", bean1);
jndiRegistry.bind("bean2", bean2);
jndiRegistry.bind("listBean", Arrays.asList(bean1, bean2));
+ jndiRegistry.bind("numeric", "12345");
+ jndiRegistry.bind("non-numeric", "abc");
return jndiRegistry;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6efb461c/camel-core/src/test/java/org/apache/camel/util/EndpointHelperTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/util/EndpointHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/EndpointHelperTest.java
index c92b8c1..3c8386a 100644
--- a/camel-core/src/test/java/org/apache/camel/util/EndpointHelperTest.java
+++ b/camel-core/src/test/java/org/apache/camel/util/EndpointHelperTest.java
@@ -23,6 +23,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.NoSuchBeanException;
import org.apache.camel.Processor;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.SimpleRegistry;
@@ -76,6 +77,7 @@ public class EndpointHelperTest extends ContextTestSupport {
bar = context.getEndpoint("mock:bar");
reg.put("foo", foo);
reg.put("coolbar", bar);
+ reg.put("numbar", "12345");
return context;
}
@@ -101,6 +103,27 @@ public class EndpointHelperTest extends ContextTestSupport {
assertSame(bar, endpoint);
}
+ public void testResolveAndConvertReferenceParameter() throws Exception {
+ // The registry value is a java.lang.String
+ Integer number = EndpointHelper.resolveReferenceParameter(context, "numbar", Integer.class);
+ assertNotNull(number);
+ assertEquals(12345, (int) number);
+ }
+
+ public void testResolveAndConvertMissingReferenceParameter() throws Exception {
+ Integer number = EndpointHelper.resolveReferenceParameter(context, "misbar", Integer.class, false);
+ assertNull(number);
+ }
+
+ public void testMandatoryResolveAndConvertMissingReferenceParameter() throws Exception {
+ try {
+ EndpointHelper.resolveReferenceParameter(context, "misbar", Integer.class, true);
+ fail();
+ } catch (NoSuchBeanException ex) {
+ assertEquals("No bean could be found in the registry for: misbar of type: java.lang.Integer", ex.getMessage());
+ }
+ }
+
public void testResolveParameter() throws Exception {
Endpoint endpoint = EndpointHelper.resolveParameter(context, "#coolbar", Endpoint.class);
assertNotNull(endpoint);