У меня ниже верблюжий маршрут, который отлично работает, когда я закомментирую parallelProcessing()
часть и коррозионную end()
, но когда я включаю parallelProcessing()
, я получаю ошибку ниже.
org.apache.camel.spring.boot.CamelSpringBootInitializationException: java.lang.ClassCastException: org.apache.camel.model.RouteDefinition cannot be cast to org.apache.camel.model.TryDefinition
Я что-то пропустил end()
?
from("direct:resetRoute")
.routeId("r-route")
.log("Starting r-route")
.doTry()
.bean(transactionManager, "beginTransaction()")
.bean(clientApi, "search(${body},${header.region})")
.setHeader("transactionSize", simple("${body.size()}"))
.process(objectToXmlProcessor)
.process(e -> {
TransactionMaster transactionMaster = transactionMasterService.saveTransactionMaster(String.valueOf(e.getIn().getHeader(Constants.HEADER_1)));
e.getIn().setHeader(Constants.HEADER_2, transactionMaster);
})
.split(simple("${body}"))
.parallelProcessing()
.doTry()
.process(e -> {
Transaction transaction = transactionService.saveTransaction((TransactionMaster) e.getIn().getHeader(Constants.HEADER_2),
((StsTxn) e.getIn().getBody()).getTxnId());
e.getIn().setHeader(Constants.HEADER_3, transaction);
})
.bean(transformationService, "tranform")
.process(objectToXmlProcessor)
.process(e -> {
Transaction transaction = transactionService.updateMsg(String.valueOf(e.getIn().getBody()), (Transaction) e.getIn().getHeader(Constants.HEADER_3));
e.getIn().setHeader(Constants.HEADER_3, transaction);
})
.bean("{{t-p.mqservice}}")
.process(e -> {
Transaction transaction = (Transaction) e.getIn().getHeader(Constants.HEADER_3);
transactionService.updateMsgStatus(transaction, MsgStatus.SUCCESS);
})
.endDoTry()
.doCatch(Exception.class)
.log(LoggingLevel.ERROR, "TRANSACTION-EXCEPTION : ${exception.stacktrace}")
.process(e -> {
Transaction transaction = (Transaction) e.getIn().getHeader(Constants.HEADER_3);
transactionService.updateMsgStatus(transaction, MsgStatus.FAILURE);
})
.end()
.end() // End of parallelProcessing()
.end()// End of split()
.process(c -> {
TransactionMaster transactionMaster = (TransactionMaster) c.getIn().getHeader(Constants.HEADER_2);
transactionMasterService.updateMsgStatus(transactionMaster, MsgStatus.SUCCESS);
})
.bean(transactionManager, "markSuccess")
.endDoTry() // End of doTry()
.doCatch(Exception.class)
.bean(transactionManager, "markFailure")
.log(LoggingLevel.ERROR, "TRANSACTION-MASTER-EXCEPTION : ${exception.stacktrace}")
.end(); // End of doCatch()
Полная трассировка стека
org.apache.camel.spring.boot.CamelSpringBootInitializationException: java.lang.ClassCastException: org.apache.camel.model.RouteDefinition cannot be cast to org.apache.camel.model.TryDefinition
at org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:149)
at org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:54)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:398)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:355)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:882)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:161)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at g.tp.MainApplication.main(MainApplication.java:58)
Caused by: java.lang.ClassCastException: org.apache.camel.model.RouteDefinition cannot be cast to org.apache.camel.model.TryDefinition
at org.apache.camel.model.ProcessorDefinition.endDoTry(ProcessorDefinition.java:1036)
at g.tp.route.ResetRoute.configure(ResetRoute.java:147)
at org.apache.camel.builder.RouteBuilder.checkInitialized(RouteBuilder.java:432)
at org.apache.camel.builder.RouteBuilder.configureRoutes(RouteBuilder.java:399)
at org.apache.camel.builder.RouteBuilder.addRoutesToCamelContext(RouteBuilder.java:380)
at org.apache.camel.impl.AbstractCamelContext.lambda$addRoutes$0(AbstractCamelContext.java:997)
at org.apache.camel.impl.AbstractCamelContext.doWithDefinedClassLoader(AbstractCamelContext.java:3205)
at org.apache.camel.impl.AbstractCamelContext.addRoutes(AbstractCamelContext.java:997)