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


The following commit(s) were added to refs/heads/master by this push:
     new 1438b50  Fixed bug in property binding support with #class: as prefix
1438b50 is described below

commit 1438b5033902c4d5456a3e72a6de3786f45b3490
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Jun 25 14:18:34 2019 +0200

    Fixed bug in property binding support with #class: as prefix
---
 .../main/java/org/apache/camel/CamelContext.java   |  5 +++
 .../camel/support/PropertyBindingSupportTest.java  | 45 ++++++++++++++++++++++
 .../camel/support/PropertyBindingSupport.java      |  5 ++-
 3 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java 
b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
index 325cd06..8a84349 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
@@ -701,6 +701,11 @@ public interface CamelContext extends StatefulService, 
RuntimeConfiguration {
     Injector getInjector();
 
     /**
+     * Sets the injector to use
+     */
+    void setInjector(Injector injector);
+
+    /**
      * Returns the lifecycle strategies used to handle lifecycle notifications
      *
      * @return the lifecycle strategies
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportTest.java
index f92edb0..ba1b5f4 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportTest.java
@@ -22,7 +22,9 @@ import java.util.Properties;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.PropertyBindingException;
+import org.apache.camel.spi.Injector;
 import org.junit.Test;
 
 /**
@@ -222,6 +224,49 @@ public class PropertyBindingSupportTest extends 
ContextTestSupport {
         }
     }
 
+    @Test
+    public void testDoesNotExistClass() throws Exception {
+        Foo foo = new Foo();
+
+        PropertyBindingSupport.bindProperty(context, foo, "name", "James");
+        try {
+            PropertyBindingSupport.bindProperty(context, foo, "bar.work", 
"#class:org.apache.camel.support.DoesNotExist");
+            fail("Should throw exception");
+        } catch (PropertyBindingException e) {
+            assertIsInstanceOf(ClassNotFoundException.class, e.getCause());
+        }
+    }
+
+    @Test
+    public void testNullInjectorClass() throws Exception {
+        Foo foo = new Foo();
+
+        context.setInjector(new Injector() {
+            @Override
+            public <T> T newInstance(Class<T> type) {
+                return null;
+            }
+
+            @Override
+            public <T> T newInstance(Class<T> type, boolean postProcessBean) {
+                return null;
+            }
+
+            @Override
+            public boolean supportsAutoWiring() {
+                return false;
+            }
+        });
+
+        PropertyBindingSupport.bindProperty(context, foo, "name", "James");
+        try {
+            PropertyBindingSupport.bindProperty(context, foo, "bar.work", 
"#class:org.apache.camel.support.Company");
+            fail("Should throw exception");
+        } catch (PropertyBindingException e) {
+            assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
+        }
+    }
+
     public static class Foo {
         private String name;
         private Bar bar = new Bar();
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index fd20f95..40752a0 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -489,10 +489,13 @@ public final class PropertyBindingSupport {
         if (reference && value instanceof String) {
             if (value.toString().startsWith("#class:")) {
                 // its a new class to be created
-                String className = value.toString().substring(6);
+                String className = value.toString().substring(7);
                 Class<?> type = 
context.getClassResolver().resolveMandatoryClass(className);
                 if (type != null) {
                     value = context.getInjector().newInstance(type);
+                    if (value == null) {
+                        throw new IllegalArgumentException("Cannot create 
instance of class: " + className);
+                    }
                 }
             } else if (value.toString().startsWith("#type:")) {
                 // its reference by type, so lookup the actual value and use 
it if there is only one instance in the registry

Reply via email to