代码之家  ›  专栏  ›  技术社区  ›  Jigar Naik

Camel并行处理:RouteDefinition不能强制转换为org.apache.Camel.model.TryDefinition

  •  0
  • Jigar Naik  · 技术社区  · 5 年前

    我有一条骆驼下路线,当我发表评论时效果很好 parallelProcessing() 零件与腐蚀 end() 但是当我启用 并行处理() 我正在犯错误。

    org.apache.camel.spring.boot.CamelSpringBootInitializationException: java.lang.ClassCastException: org.apache.camel.model.RouteDefinition cannot be cast to org.apache.camel.model.TryDefinition
    

    我有遗漏吗 结束() ?

    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)
    
    0 回复  |  直到 5 年前