aldettinger opened a new issue #1605:
URL: https://github.com/apache/camel-quarkus/issues/1605


   A camel-quarkus user could face a `ClassNotFoundException` when using 
`onException` in native mode, for instance the following route :
   ```
   onException(MyException.class).handled(true);
   from("direct:onException").throwException(new MyException());
   ```
   Could produce a stack trace similar as below:
   ```
   2020-08-25 11:02:49,859 ERROR [io.qua.application] (main) Failed to start 
application (with profile prod): java.lang.RuntimeException: 
org.apache.camel.FailedToCreateRouteException: Failed to create route route1 
at: >>> ThrowException[org.apache.camel.quarkus.core.CoreRoutes.MyException] 
<<< in route: Route(route1)[From[direct:onException] -> [OnException[[org.... 
because of java.lang.ClassNotFoundException: 
org.apache.camel.quarkus.core.CoreRoutes$MyException
        at 
org.apache.camel.quarkus.core.CamelBootstrapRecorder.start(CamelBootstrapRecorder.java:47)
        at 
io.quarkus.deployment.steps.CamelBootstrapProcessor$boot-173480958.deploy_0(CamelBootstrapProcessor$boot-173480958.zig:101)
        at 
io.quarkus.deployment.steps.CamelBootstrapProcessor$boot-173480958.deploy(CamelBootstrapProcessor$boot-173480958.zig:40)
        at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:642)
        at io.quarkus.runtime.Application.start(Application.java:90)
        at 
io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:92)
        at io.quarkus.runtime.Quarkus.run(Quarkus.java:61)
        at io.quarkus.runtime.Quarkus.run(Quarkus.java:38)
        at io.quarkus.runtime.Quarkus.run(Quarkus.java:106)
        at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)
   Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create 
route route1 at: >>> 
ThrowException[org.apache.camel.quarkus.core.CoreRoutes.MyException] <<< in 
route: Route(route1)[From[direct:onException] -> [OnException[[org.... because 
of java.lang.ClassNotFoundException: 
org.apache.camel.quarkus.core.CoreRoutes$MyException
        at 
org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:393)
        at 
org.apache.camel.reifier.RouteReifier.createRoute(RouteReifier.java:117)
        at 
org.apache.camel.quarkus.core.FastCamelContext.startRouteDefinitions(FastCamelContext.java:688)
        at 
org.apache.camel.quarkus.core.FastCamelContext.startRouteDefinitions(FastCamelContext.java:480)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doInit(AbstractCamelContext.java:2612)
        at 
org.apache.camel.quarkus.core.FastCamelContext.doInit(FastCamelContext.java:366)
        at 
org.apache.camel.support.service.BaseService.init(BaseService.java:83)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.init(AbstractCamelContext.java:2435)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:111)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2452)
        at 
org.apache.camel.quarkus.core.CamelContextRuntime.start(CamelContextRuntime.java:57)
        at 
org.apache.camel.quarkus.core.CamelBootstrapRecorder.start(CamelBootstrapRecorder.java:45)
        ... 9 more
   Caused by: org.apache.camel.RuntimeCamelException: 
java.lang.ClassNotFoundException: 
org.apache.camel.quarkus.core.CoreRoutes$MyException
        at 
org.apache.camel.reifier.errorhandler.ErrorHandlerReifier.createExceptionClasses(ErrorHandlerReifier.java:280)
        at 
org.apache.camel.reifier.errorhandler.ErrorHandlerReifier.addExceptionPolicy(ErrorHandlerReifier.java:257)
        at 
org.apache.camel.reifier.errorhandler.ErrorHandlerReifier.configure(ErrorHandlerReifier.java:300)
        at 
org.apache.camel.reifier.errorhandler.DefaultErrorHandlerReifier.createErrorHandler(DefaultErrorHandlerReifier.java:47)
        at 
org.apache.camel.reifier.errorhandler.ErrorHandlerRefReifier.createErrorHandler(ErrorHandlerRefReifier.java:34)
        at 
org.apache.camel.reifier.ProcessorReifier.wrapInErrorHandler(ProcessorReifier.java:674)
        at 
org.apache.camel.reifier.ProcessorReifier.wrapChannelInErrorHandler(ProcessorReifier.java:654)
        at 
org.apache.camel.reifier.ProcessorReifier.wrapChannel(ProcessorReifier.java:633)
        at 
org.apache.camel.reifier.ProcessorReifier.wrapChannel(ProcessorReifier.java:544)
        at 
org.apache.camel.reifier.ProcessorReifier.wrapProcessor(ProcessorReifier.java:540)
        at 
org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:782)
        at 
org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:511)
        at 
org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:391)
        ... 20 more
   Caused by: java.lang.ClassNotFoundException: 
org.apache.camel.quarkus.core.CoreRoutes$MyException
        at 
org.apache.camel.impl.engine.DefaultClassResolver.resolveMandatoryClass(DefaultClassResolver.java:96)
        at 
org.apache.camel.reifier.errorhandler.ErrorHandlerReifier.createExceptionClasses(ErrorHandlerReifier.java:277)
        ... 32 more
   ```
   
   I can't see any way to avoid loading the exception class during camel 
`onException` handling.
   I don't think we could register exception classes as reflective from an 
extension without access to route definitions at build time.
   
   So, at this stage, I'm thinking about documenting that when using 
`onException(xxExceptionClass)`, then it's user's responsibility to register 
`xxExceptionClass` for reflection.
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to