Hi Yeah you can validate the endpoints with
CamelContext.getEndpoint(uri); Why would you have invalid endpoints in the first place. Do you dynamic compute the endpoints before starting Camel? On Thu, May 3, 2012 at 1:29 PM, Ilger Gerda <il...@big.tuwien.ac.at> wrote: > Thanks Claus. > So basically the best way would be to just validate the Strings I use to > create the endpoints before using them, is that right? > > It still crashes with the same exception when I set autoStartup false: > [DEBUG] - - Warming up route id: route1 having > autoStartup=false [main] [o.a.c.s.SpringCamelContext] > But since I'd like to keep autoStartup anyway, there's no point investigating. > > > Re Christian - catching the exception: Is that what you're suggesting: > > static class BadRouteBuilder extends RouteBuilder { > @Override > public void configure() throws Exception { > try { > from("ftp://illegalUrl:::123").to("direct:b"); > } catch(Exception e) { > // we don't end up here > } > } > } > > I believe that I'd have to catch the exception in the loop in > DefaultCamelContext.doWarmUpRoutes - meaning I'd have to subclass > SpringCamelContext, had to override doWarmUpRoutes, and then I'd have to > clean up all references to the route ... I don't think I want to do that ... > or is there a clean, non-error-prone, easy way I'm missing? > > Validating the strings before passing them to camel's "from" method sounds a > lot safer. > > > Thanks, > Gerda > > > Here's the stack trace (just in case you're curious - thanks everyone for > your help!): > java.lang.IllegalStateException: Failed to load ApplicationContext > at > org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157) > at > org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) > at > org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) > at > org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) > at > org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance(AbstractTestNGSpringContextTests.java:133) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) > at > org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:551) > at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213) > at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138) > at > org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175) > at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107) > at org.testng.TestRunner.privateRun(TestRunner.java:768) > at org.testng.TestRunner.run(TestRunner.java:617) > at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) > at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) > at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) > at org.testng.SuiteRunner.run(SuiteRunner.java:240) > at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53) > at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87) > at org.testng.TestNG.runSuitesSequentially(TestNG.java:1185) > at org.testng.TestNG.runSuitesLocally(TestNG.java:1110) > at org.testng.TestNG.run(TestNG.java:1022) > at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:109) > at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:202) > at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:173) > Caused by: org.springframework.beans.factory.BeanCreationException: Error > creating bean with name 'camelContext' defined in class > at.erpel.messaginghub.unit.routes.BadRouteDefinitionTest$ContextConfig: > Invocation of init method failed; nested exception is > java.lang.IllegalArgumentException: host must be specified and not empty > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) > at > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) > at > org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) > at > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) > at > org.apache.camel.spring.javaconfig.test.JavaConfigContextLoader.loadContext(JavaConfigContextLoader.java:125) > at > org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:130) > at > org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148) > ... 28 more > Caused by: java.lang.IllegalArgumentException: host must be specified and not > empty > at org.apache.camel.util.ObjectHelper.notEmpty(ObjectHelper.java:319) > at > org.apache.camel.component.file.remote.RemoteFileEndpoint.afterPropertiesSet(RemoteFileEndpoint.java:108) > at > org.apache.camel.component.file.remote.RemoteFileEndpoint.createConsumer(RemoteFileEndpoint.java:75) > at > org.apache.camel.component.file.remote.RemoteFileEndpoint.createConsumer(RemoteFileEndpoint.java:31) > at > org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:65) > at > org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.java:80) > at org.apache.camel.impl.RouteService.warmUp(RouteService.java:133) > at > org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:1925) > at > org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1853) > at > org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1646) > at > org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1534) > at > org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1421) > at > org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:179) > at > org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) > at > org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1389) > at > org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:228) > at > org.apache.camel.spring.SpringCamelContext.afterPropertiesSet(SpringCamelContext.java:104) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) > ... 40 more > > -----Original Message----- > From: Christian Müller [mailto:christian.muel...@gmail.com] > Sent: Thursday, May 03, 2012 10:17 AM > To: users@camel.apache.org > Subject: Re: Mistakes in endpoints prevent start of camel context > > But if you create the route at runtime via the Java DSL, you can catch the > Exception and handle it in the way you want, e.g. ignore it. > > Best, > Christian > > On Thu, May 3, 2012 at 9:41 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > >> On Wed, May 2, 2012 at 5:21 PM, Ilger Gerda <il...@big.tuwien.ac.at> >> wrote: >> > Hi all, >> > >> > We have a number of ftp consumer routes that we start based on URLs >> > read >> from our database. >> > If there's a typo in the URL (e.g. "ftp://localhost::1023"), the >> > whole >> camelContext won't start. >> > We're using SpringCamelContext. >> > >> > These routes are not essential, we still want our application to >> > start & >> camel provide all the other routes we defined. >> > Is there a way to ignore routes that throw exceptions upon >> creation/camel context start (have camel behave as if we never added them)? >> > >> >> You can configure the routes with autoStartup=false. >> >> But there is currently no option to say, well I dont care if a route >> cannot startup. >> >> >> > Thanks, >> > Gerda >> >> >> >> -- >> Claus Ibsen >> ----------------- >> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com >> FuseSource >> Email: cib...@fusesource.com >> Web: http://fusesource.com >> Twitter: davsclaus, fusenews >> Blog: http://davsclaus.blogspot.com/ >> Author of Camel in Action: http://www.manning.com/ibsen/ >> -- Claus Ibsen ----------------- CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/