Hi Camel Experts, I am newbie to Apache Camel and was doing a hands-on tutorial to create a custom component. That's when I stumbled on this as to why DefaultEndpoint.createEndpointUri() is not an abstract method, even when it has to be overwritten.
The implementation of this method in the parent class - DefaultEndpoint- returns null: /** * A factory method to lazily create the endpointUri if none is specified */ protected String createEndpointUri() { return null; } My custom endpoint was extending the DefaultEndpoint and as a first step I only over-rode the abstract method. This led me to the following exception on context start up. My camel context is embedded in tomcat: java.lang.IllegalArgumentException: endpointUri is not specified and com.kronos.prince.camel.endpoint.MyJDBCEndpoint does not implement createEndpointUri() to create a default value at org.apache.camel.impl.DefaultEndpoint.getEndpointUri(DefaultEndpoint.java:154) at org.apache.camel.impl.DefaultEndpoint.toString(DefaultEndpoint.java:139) at java.lang.String.valueOf(String.java:2854) at java.lang.StringBuilder.append(StringBuilder.java:128) at org.apache.camel.impl.EventDrivenConsumerRoute.toString(EventDrivenConsumerRoute.java:50) at org.apache.camel.management.mbean.ManagedRoute.<init>(ManagedRoute.java:62) at org.apache.camel.management.mbean.ManagedSuspendableRoute.<init>(ManagedSuspendableRoute.java:30) at org.apache.camel.management.DefaultManagementObjectStrategy.getManagedObjectForRoute(DefaultManagementObjectStrategy.java:119) at org.apache.camel.management.DefaultManagementLifecycleStrategy.onRoutesAdd(DefaultManagementLifecycleStrategy.java:523) at org.apache.camel.impl.RouteService.warmUp(RouteService.java:156) at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:2109) at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:2039) at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1827) at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1699) at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1544) at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1512) at org.apache.camel.component.servletlistener.CamelServletContextListener.contextInitialized(CamelServletContextListener.java:162) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1100) at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1618) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) A search on the net didn't help much to resolve this problem. So, i dived int the camel's source code and found out that most of the endpoints like JDBCEndpoint, JMSEndpoint override this method. Doing the same in my custom endpoint fixed the problem. Am I missing something here and there is some other way to over come the above mentioned exception. ___________________ Thks & brgds P Manchanda Mobile: +91-9811210374