I'm using Apache-Camel 2.15.2. I am trying to add routes to a CamelContext dynamically, but I came across a problem that baffles me. As far as I can tell, I do add the routes to the correct CamelContext, and it seems like their configure() is called without throwing exceptions. However when I try to execute the main route, I get a run time Exception telling me that the route I added dynamically does not exist. Here is a simplified version of my code: public class MainRouteBuilder extends RouteBuilder{ public static CamelContext camelContext; public static boolean returnLabel = true; public static RouteBuilder nestedRouteBuilder; @Override public void configure() throws Exception { System.out.println("Building main route!"); System.out.println("Context: " + getContext()); camelContext = getContext(); from("direct:mainRoute") //3. I do not actually want to instantiate RouteContainer like this each time I call this route. //I would simply want to reuse a reference to an instance I created outside of configure()... .to(new RouteContainer().getMyRoute(2)) ; returnLabel = false; //configure direct:myRoute.2 includeRoutes(nestedRouteBuilder); }}public class RouteContainer extends RouteBuilder{ public Route route; RouteContainer() { super(MainRouteBuilder.camelContext); } String getMyRoute(final int n) { if (MainRouteBuilder.returnLabel && route == null) { route = new Route() { @Override public void configure() { System.out.println("Building nested route!"); System.out.println("Context" + getContext()); from("direct:myRoute." + n) .transform() .simple("number: " + n) .to("stream:out") .process(new Processor() { @Override public void process(Exchange exchange) throws Exception { Response response = new Response(); response.setStatus(Status.SUCCESS); exchange.getOut().setBody(response); } }); } }; }//1. works: MainRouteBuilder.nestedRouteBuilder = this;//2. does not work:// RouteContainer routeContainer = new RouteContainer();// routeContainer.route = this.route;// MainRouteBuilder.nestedRouteBuilder = routeContainer; return "direct:myRoute." + n; } @Override public void configure() throws Exception { if (route != null) { route.configure(); } } public abstract static class Route { abstract public void configure(); }} Requests that are sent to direct:mainRoute work.During Camel startup I see in the console: Building main route!Context: SpringCamelContext(camel-1) with spring id org.springframework.web.context.WebApplicationContext:/sample-routeBuilding nested route!ContextSpringCamelContext(camel-1) with spring id org.springframework.web.context.WebApplicationContext:/sample-route and when I send a request to direct:mainRoute, the output is: {"status":"SUCCESS"} HOWEVER, if I comment out (1) above, and uncomment (2), Camel starts up with the same output to the console, but when I send a request to direct:mainRoute, the execution of the route fails with the exception: org.apache.camel.component.direct.DirectConsumerNotAvailableException: No consumers available on endpoint: Endpoint[direct://myRoute.2]. To Clarify: my problem is because I would actually like NOT to instantiate RouteContainer each time I call its route, as I do in (3). This is why I instantiate them at point (2) and plug the Route instance into it... So I would like MainRouteBuilder to look like this: public class MainRouteBuilder extends RouteBuilder{ public static CamelContext camelContext; public static boolean returnLabel = true; public static RouteBuilder nestedRouteBuilder; RouteContainer routeContainer = new RouteContainer(); @Override public void configure() throws Exception { System.out.println("Building main route!"); System.out.println("Context: " + getContext()); camelContext = getContext(); from("direct:mainRoute") .to(routeContainer.getMyRoute(2)) //I may want to call it again like this: //.to(routeContainer.getMyRoute(3)) ; returnLabel = false; //configure direct:myRoute.2 includeRoutes(nestedRouteBuilder); }} My assumption is that maybe the nested route direct:myRoute.2 is created in the wrong CamelContext, but the console output tells me it is not so. Any idea what I am doing wrong here?
-- View this message in context: http://camel.465427.n5.nabble.com/Failure-to-add-routes-dynamically-tp5777328.html Sent from the Camel - Users mailing list archive at Nabble.com.