Fuse Server 6.2.0 ClassNotFoundException for RestletOperationException

Latest response

The following relates to running a Fuse 6.2.0.redhat-133 server from with Developer Studio 9.1.0 GA. I added the camel-restlet bundle using 'mvn:org.apache.camel/camel-restlet/2.15.1.redhat-620133'

I added an section to one of several routes in a Camel context in an OSGI bundle 'esb-services'. The route uses to invoke a REST endpoint defined using the restlet component. The esb-services bundle previously installed and started with no errors. The added section was:

        <onException redeliveryPolicyRef="BMSUpdateRedelivery">
            <exception>org.apache.camel.component.restlet.RestletOperationException</exception>
            <continued><constant>true</constant></continued>
            <setBody><simple>${exchangeProperty.failBody}</simple></setBody>
        </onException>

I'm able to unit test this route. However when I install the generated jar as a bundle in the same local Fuse server, I now get an exception:

Error occurred during starting Camel: CamelContext(esb-services) due Failed to create route ESBUpdateWhatsOnMediaAsset at: >>> OnException[null -> [SetBody[simple{${exchangeProperty.failBody}}]]] <<< in route: Route(ESBUpdateWhatsOnMediaAsset)[[From[{{whatson.mediaasset... because of org.apache.camel.component.restlet.RestletOperationException

The stack trace is:

org.apache.camel.FailedToCreateRouteException: Failed to create route ESBUpdateWhatsOnMediaAsset at: >>> OnException[null -> [SetBody[simple{${exchangeProperty.failBody}}]]] <<< in route: Route(ESBUpdateWhatsOnMediaAsset)[[From[{{whatson.mediaasset... because of org.apache.camel.component.restlet.RestletOperationException
  at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1028)
  at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:185)
  at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:841)[org.apache.camel:camel-core:2.15.1.redhat-620133 com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2]
  at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:2895)[org.apache.camel:camel-core:2.15.1.redhat-620133 com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2]
  at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2618)[org.apache.camel:camel-core:2.15.1.redhat-620133 com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2]
  at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:167)[org.apache.camel:camel-core:2.15.1.redhat-620133 com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2]
  at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2467)
  at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2463)
  at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2486)[org.apache.camel:camel-core:2.15.1.redhat-620133 com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2]
  at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2463)[org.apache.camel:camel-core:2.15.1.redhat-620133 com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2]
  at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
  at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2432)[org.apache.camel:camel-core:2.15.1.redhat-620133 com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2]
  at org.apache.camel.blueprint.BlueprintCamelContext.start(BlueprintCamelContext.java:180)
  at org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:212)
  at org.apache.camel.blueprint.BlueprintCamelContext.serviceChanged(BlueprintCamelContext.java:150)
  at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:943)
  at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:794)
  at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:544)
  at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4445)
  at org.apache.felix.framework.Felix.registerService(Felix.java:3431)
  at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
  at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:353)
  at org.apache.camel.blueprint.BlueprintCamelContext.init(BlueprintCamelContext.java:100)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_74]
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_74]
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_74]
  at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_74]
  at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:297)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:958)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:712)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:824)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_74]
  at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:682)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:377)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:269)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_74]
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_74]
  at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_74]
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_74]
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)[:1.8.0_74]
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[:1.8.0_74]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_74]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_74]
  at java.lang.Thread.run(Thread.java:745)[:1.8.0_74]
Caused by: java.lang.ClassNotFoundException: org.apache.camel.component.restlet.RestletOperationException
  at org.apache.camel.impl.DefaultClassResolver.resolveMandatoryClass(DefaultClassResolver.java:88)
  at org.apache.camel.model.OnExceptionDefinition.createExceptionClasses(OnExceptionDefinition.java:952)
  at org.apache.camel.model.OnExceptionDefinition.addRoutes(OnExceptionDefinition.java:186)
  at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1025)
... 50 more

So RestletOperationException is not picked up as being in the camel-restlet bundle, even though this shows the 'org.apache.camel.component.restlet' package as exported.

I also manually installed the camel-restlet feature but still get the same exception.

Now RestletOperationException extends CamelException which is in the org.apache.camel package in camel-core. If I change my route's to refer to org.apache.camel.CamelException instead of org.apache.camel.component.restlet.RestletOperationException, then when I install esb-services there are NO exceptions and all routes in esb-services start OK.

How can I use RestletOperationException as an exception I want to deal with in a Camel route?

Responses