yes it seems to be like a timing issue :) but what i don't understand is, i thought putting my manual route start up in afterapplicationstart should have resolved the problem. Seems like it doesn't :)
On Tue, Oct 24, 2017 at 7:25 PM, Mark Nuttall <[email protected]> wrote: > I don't know enough about the inner workings of Camel to tell you about the > version issue. > If i remember rightly, I've heard of or experience the same sort of thing > when doing outside the box things, like this. It is really a timing issue, > if i remember rightly. > > > > On Tue, Oct 24, 2017 at 1:18 PM, Dicken George <[email protected]> > wrote: > > > so in the stack trace it talks about line 66 but when i debug i can see > > that > > > > "camelContext.startRoute("salesforce-versions"); " > > > > already in line 64 meaning the route is not started as the routeservices > > object is empty (null). Which thereby causes and expection at line 66 > > which is > > > > Endpoint ep = theRoute.getEndpoint(); > > > > I am wondering if there any specific call which adds all routes to the > > camelcontext differently in 2.19.x compared to 2.20.0 ? > > > > > > > > On Tue, Oct 24, 2017 at 7:13 PM, Mark Nuttall <[email protected]> > wrote: > > > > > Oh. i missed the "complex use case". Of the code you provided, what is > > line > > > 66? > > > > > > On Tue, Oct 24, 2017 at 11:47 AM, Mark Nuttall <[email protected]> > > > wrote: > > > > > > > Is there any reason you are not using the standard Spring Boot + > Camel > > > > mechanisms to create the context and routes. I don't readily see any > in > > > > your code. Doing so might resolve the problem. Let me know if you > > need > > > > help with that.. > > > > > > > > Mark > > > > > > > > On Tue, Oct 24, 2017 at 9:36 AM, Dicken George < > [email protected] > > > > > > > wrote: > > > > > > > >> Dear Fellow Developers, > > > >> > > > >> Just recently, I tried to upgrade my camel-spring boot project form > > > camel > > > >> 2.19.3 to camel 2.20.0 and I face the problem that, I cannot boot up > > my > > > >> application any more, and I get the following stack trace > > > >> > > > >> java.lang.NullPointerException > > > >> at > > > >> com.haufe.ssmp.sfdc.api.app.BeanConfiguration.afterApplicati > > > >> onStart(BeanConfiguration.java:66) > > > >> at > > > >> org.apache.camel.spring.boot.RoutesCollector.onApplicationEv > > > >> ent(RoutesCollector.java:226) > > > >> at > > > >> org.apache.camel.spring.boot.RoutesCollector.onApplicationEv > > > >> ent(RoutesCollector.java:54) > > > >> at > > > >> org.springframework.context.event.SimpleApplicationEventMult > > > >> icaster.doInvokeListener(SimpleApplicationEventMulticas > ter.java:172) > > > >> at > > > >> org.springframework.context.event.SimpleApplicationEventMult > > > >> icaster.invokeListener(SimpleApplicationEventMulticaster.java:165) > > > >> at > > > >> org.springframework.context.event.SimpleApplicationEventMult > > > >> icaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) > > > >> at > > > >> org.springframework.context.support.AbstractApplicationConte > > > >> xt.publishEvent(AbstractApplicationContext.java:393) > > > >> at > > > >> org.springframework.context.support.AbstractApplicationConte > > > >> xt.publishEvent(AbstractApplicationContext.java:347) > > > >> at > > > >> org.springframework.context.support.AbstractApplicationConte > > > >> xt.finishRefresh(AbstractApplicationContext.java:883) > > > >> at > > > >> org.springframework.boot.context.embedded.EmbeddedWebApplica > > > >> tionContext.finishRefresh(EmbeddedWebApplicationContext.java:144) > > > >> at > > > >> org.springframework.context.support.AbstractApplicationConte > > > >> xt.refresh(AbstractApplicationContext.java:546) > > > >> at > > > >> org.springframework.boot.context.embedded.EmbeddedWebApplica > > > >> tionContext.refresh(EmbeddedWebApplicationContext.java:122) > > > >> at > > > >> org.springframework.boot.SpringApplication.refresh(SpringApp > > > >> lication.java:693) > > > >> at > > > >> org.springframework.boot.SpringApplication.refreshContext(Sp > > > >> ringApplication.java:360) > > > >> at > > > >> org.springframework.boot.SpringApplication.run(SpringApplica > > > >> tion.java:303) > > > >> at > > > >> org.springframework.boot.SpringApplication.run(SpringApplica > > > >> tion.java:1118) > > > >> at > > > >> org.springframework.boot.SpringApplication.run(SpringApplica > > > >> tion.java:1107) > > > >> at com.haufe.ssmp.sfdc.api.Application.main(Application.java:12) > > > >> > > > >> Due to my complex use case, i would like to start one specific route > > > >> manually and not use the autoconfiguration and autostart from > > > >> camelcontext. > > > >> I do this in my configuration class by over riding the before > > > application > > > >> start and after application start methods. > > > >> > > > >> @Configuration > > > >> class BeanConfiguration implements CamelContextConfiguration { > > > >> private static final Logger log = > > > >> LoggerFactory.getLogger(BeanConfiguration.class); > > > >> > > > >> @Override > > > >> public void beforeApplicationStart(CamelContext camelContext) { > > > >> camelContext.setPackageScanClassResolver(new > > > >> FatJarPackageScanClassResolver()); > > > >> camelContext.resolveDataFormat("json-jackson"); > > > >> } > > > >> > > > >> @Autowired > > > >> SalesforceComponent sfdcComp; > > > >> > > > >> @Override > > > >> public void afterApplicationStart(CamelContext camelContext) { > > > >> > > > >> try { > > > >> sfdcComp.start(); > > > >> camelContext.startRoute("salesforce-versions"); > > > >> Route theRoute = camelContext.getRoute("salesfo > > > >> rce-versions"); > > > >> Endpoint ep = theRoute.getEndpoint(); > > > >> > > > >> Exchange exchange = ep.createExchange(); > > > >> ProducerTemplate template = > > > >> exchange.getContext().createProducerTemplate(); > > > >> DefaultExchange o = (DefaultExchange) > template.request(ep, > > > new > > > >> Processor() { > > > >> > > > >> @Override > > > >> public void process(Exchange exchange) throws > > Exception > > > { > > > >> // TODO Auto-generated method stub > > > >> > > > >> } > > > >> }); > > > >> Object result = o.getOut().getBody(); > > > >> if(result == null && !(result instanceof ArrayList)) > > > >> throw new Exception("No Salesforce version, > login > > > >> failed."); > > > >> > > > >> ArrayList theList = (ArrayList) result; > > > >> if(theList.size() <= 1) > > > >> throw new Exception("No Salesforce version got, > > > login > > > >> failed."); > > > >> log.debug("Connection to salesforce successfully > > > >> established:"); > > > >> > > > >> } catch (Exception e) { > > > >> // TODO Auto-generated catch block > > > >> e.printStackTrace(); > > > >> throw new RuntimeException("No Connection to > salesforce"); > > > >> } > > > >> > > > >> } > > > >> In this code, i saw during my debugging that it was able to start > the > > > >> routes in camelcontext object and get the endpoints, however with > > > version > > > >> 2.20.0 I see my routes are not added to the camelcontext and no > routes > > > are > > > >> started. > > > >> > > > >> Could anyone help me here to trouble shoot this issue ? > > > >> > > > >> Thanks in advance > > > >> -- > > > >> > > > >> Dicken George > > > >> > > > > > > > > > > > > > > > > > > > -- > > > > Dicken George > > > -- Dicken George
