Author: davsclaus
Date: Wed Jul 13 14:31:26 2011
New Revision: 1146057

URL: http://svn.apache.org/viewvc?rev=1146057&view=rev
Log:
CAMEL-4222: Ref component throws better error message if endpoint could not be 
found in registry.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefInvalidTest.java
      - copied, changed from r1145888, 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefFileEndpointTest.java
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchBeanException.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/ref/RefComponent.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelPostProcessorHelperTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
    
camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchBeanException.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchBeanException.java?rev=1146057&r1=1146056&r2=1146057&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchBeanException.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchBeanException.java 
Wed Jul 13 14:31:26 2011
@@ -30,6 +30,11 @@ public class NoSuchBeanException extends
         this.name = name;
     }
 
+    public NoSuchBeanException(String name, String type) {
+        super("No bean could be found in the registry for: " + name + " of 
type: " + type);
+        this.name = name;
+    }
+
     public NoSuchBeanException(String name, Throwable cause) {
         super("No bean could be found in the registry for: " + name + ". 
Cause: " + cause.getMessage(), cause);
         this.name = name;

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/ref/RefComponent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/ref/RefComponent.java?rev=1146057&r1=1146056&r2=1146057&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/ref/RefComponent.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/ref/RefComponent.java
 Wed Jul 13 14:31:26 2011
@@ -20,6 +20,7 @@ import java.util.Map;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.util.CamelContextHelper;
 
 /**
  * Component for lookup of existing endpoints bound in the {@link 
org.apache.camel.spi.Registry}.
@@ -42,13 +43,15 @@ public class RefComponent extends Defaul
     }
 
     /**
-     * Looks up an endpoint for a given name.
-     *
+     * Looks up a mandatory endpoint for a given name.
+     * <p/>
      * Derived classes could use this name as a logical name and look it up on 
some registry.
+     * <p/>
+     * The default implementation will do a mandatory look up the name in the 
{@link org.apache.camel.spi.Registry}.
      *
-     * The default implementation will look up the name in the registry of the 
{@link #getCamelContext()} property
+     * @throws org.apache.camel.NoSuchBeanException if not found in the {@link 
org.apache.camel.spi.Registry}
      */
     protected Endpoint lookupEndpoint(String name, Map<String, Object> 
parameters) {
-        return getCamelContext().getRegistry().lookup(name, Endpoint.class);
+        return CamelContextHelper.mandatoryLookup(getCamelContext(), name, 
Endpoint.class);
     }
 }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java?rev=1146057&r1=1146056&r2=1146057&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
 Wed Jul 13 14:31:26 2011
@@ -19,6 +19,7 @@ package org.apache.camel.util;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.NoSuchEndpointException;
 
 import static org.apache.camel.util.ObjectHelper.isEmpty;
@@ -107,21 +108,25 @@ public final class CamelContextHelper {
 
     /**
      * Look up the given named bean in the {@link 
org.apache.camel.spi.Registry} on the
-     * {@link CamelContext} or throws IllegalArgumentException if not found.
+     * {@link CamelContext} or throws NoSuchBeanException if not found.
      */
     public static Object mandatoryLookup(CamelContext context, String name) {
         Object answer = lookup(context, name);
-        notNull(answer, "registry entry called " + name);
+        if (answer == null) {
+            throw new NoSuchBeanException(name);
+        }
         return answer;
     }
 
     /**
      * Look up the given named bean of the given type in the {@link 
org.apache.camel.spi.Registry} on the
-     * {@link CamelContext} or throws IllegalArgumentException if not found.
+     * {@link CamelContext} or throws NoSuchBeanException if not found.
      */
     public static <T> T mandatoryLookup(CamelContext context, String name, 
Class<T> beanType) {
         T answer = lookup(context, name, beanType);
-        notNull(answer, "registry entry called " + name + " of type " + 
beanType.getName());
+        if (answer == null) {
+            throw new NoSuchBeanException(name, beanType.getName());
+        }
         return answer;
     }
 

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefInvalidTest.java
 (from r1145888, 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefFileEndpointTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefInvalidTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefInvalidTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefFileEndpointTest.java&r1=1145888&r2=1146057&rev=1146057&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefFileEndpointTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/ref/RefInvalidTest.java
 Wed Jul 13 14:31:26 2011
@@ -18,41 +18,42 @@ package org.apache.camel.component.ref;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
+import org.apache.camel.NoSuchBeanException;
+import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.FileConsumer;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.SimpleRegistry;
 
 /**
  * @version 
  */
-public class RefFileEndpointTest extends ContextTestSupport {
+public class RefInvalidTest extends ContextTestSupport {
 
     private SimpleRegistry registry = new SimpleRegistry();
 
-    @Override
-    protected void setUp() throws Exception {
-        deleteDirectory("target/foo");
-        super.setUp();
-    }
-
-    public void testRefFileEndpoint() throws Exception {
+    public void testOk() throws Exception {
         getMockEndpoint("mock:result").expectedMessageCount(1);
 
-        template.sendBodyAndHeader("file:target/foo", "Hello World", 
Exchange.FILE_NAME, "hello.txt");
+        template.sendBody("ref:foo", "Hello World");
 
         assertMockEndpointsSatisfied();
+    }
 
-        FileConsumer consumer = (FileConsumer) 
context.getRoute("foo").getConsumer();
-        assertEquals(3000, consumer.getDelay());
-        assertEquals(250, consumer.getInitialDelay());
+    public void testInvalid() throws Exception {
+        try {
+            template.sendBody("ref:xxx", "Hello World");
+            fail("Should have thrown an exception");
+        } catch (ResolveEndpointFailedException e) {
+            assertEquals("Failed to resolve endpoint: ref://xxx due to: No 
bean could be found in the registry for: xxx of type: 
org.apache.camel.Endpoint", e.getMessage());
+            NoSuchBeanException cause = 
assertIsInstanceOf(NoSuchBeanException.class, e.getCause());
+            assertEquals("xxx", cause.getName());
+        }
     }
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = new DefaultCamelContext(registry);
-        registry.put("foo", 
context.getEndpoint("file:target/foo?initialDelay=250&delay=3000&delete=true"));
+        registry.put("foo", context.getEndpoint("seda:foo"));
         return context;
     }
 

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelPostProcessorHelperTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelPostProcessorHelperTest.java?rev=1146057&r1=1146056&r2=1146057&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelPostProcessorHelperTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelPostProcessorHelperTest.java
 Wed Jul 13 14:31:26 2011
@@ -23,6 +23,7 @@ import org.apache.camel.Consume;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
+import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.PollingConsumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Produce;
@@ -251,8 +252,8 @@ public class CamelPostProcessorHelperTes
         try {
             helper.getInjectionValue(type, endpointInject.uri(), 
endpointInject.ref(), propertyName, bean, "foo");
             fail("Should throw exception");
-        } catch (IllegalArgumentException e) {
-            assertEquals("registry entry called unknown of type 
org.apache.camel.Endpoint must be specified", e.getMessage());
+        } catch (NoSuchBeanException e) {
+            assertEquals("No bean could be found in the registry for: unknown 
of type: org.apache.camel.Endpoint", e.getMessage());
         }
     }
 

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java?rev=1146057&r1=1146056&r2=1146057&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
 Wed Jul 13 14:31:26 2011
@@ -25,6 +25,7 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Endpoint;
+import org.apache.camel.NoSuchBeanException;
 
 /**
  * Unit test for helper methods on the DefaultComponent.
@@ -99,8 +100,8 @@ public class DefaultComponentTest extend
         try {
             my.resolveAndRemoveReferenceParameter(parameters, "date", 
Date.class);
             fail("returned without finding object in registry");
-        } catch (IllegalArgumentException e) {
-            // test passes
+        } catch (NoSuchBeanException e) {
+            assertEquals("No bean could be found in the registry for: somewhen 
of type: java.util.Date", e.getMessage());
         }
     }
 
@@ -184,8 +185,8 @@ public class DefaultComponentTest extend
         try {
             my.resolveAndRemoveReferenceListParameter(parameters, "dates", 
Date.class);
             fail("returned without finding object in registry");
-        } catch (IllegalArgumentException e) {
-            // test passes
+        } catch (NoSuchBeanException e) {
+            assertEquals("No bean could be found in the registry for: bean3 of 
type: java.util.Date", e.getMessage());
         }
     }
 

Modified: 
camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java?rev=1146057&r1=1146056&r2=1146057&view=diff
==============================================================================
--- 
camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
 (original)
+++ 
camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
 Wed Jul 13 14:31:26 2011
@@ -115,7 +115,7 @@ public class JdbcOptionsTest extends Cam
             template.sendBody("jdbc:xxx", "Hello World");
             fail("Should have thrown a ResolveEndpointFailedException");
         } catch (ResolveEndpointFailedException e) {
-            assertEquals("registry entry called xxx of type 
javax.sql.DataSource must be specified", 
+            assertEquals("No bean could be found in the registry for: xxx of 
type: javax.sql.DataSource",
                 e.getCause().getMessage());
         }
     }


Reply via email to