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()); } }