I have great problems getting camel-cxf to work. I use Camel 2.7.1 running
in Karaf 2.2.0.

First, lets see what I can get to work...

If I create my camel context and my cxf endpoint from within Spring I do get
things to work, like this:

*META-INF/spring/beans.xml*
...

*    <cxf:cxfEndpoint id="trsWsEndpoint"
**                     address="http://localhost:9000/trsws/";
**
 serviceClass="se.digia.trs.route.webservice.ITrsWebService">
**    </cxf:cxfEndpoint>**
**    <bean id="routes" class="se.digia.trs.route.webservice.Routes" />**
**    <camel:camelContext id="camel">
**    <camel:routeBuilder ref="routes"/>
**    </camel:camelContext>*

...

*Routes.java*
...

*  ITrsWebService serverBean = new TrsWebServiceImpl();**
**  from("cxf:bean:trsWsEndpoint")..bean(serverBean);*

...

Using soapUI I can verify that my implementation class gets called and that
the web service works.

However I have built a framework using iPOJO that basically creates the
camel context and the route when the iPOJO component is started. I thus do
not have access to any beans/endponts/contexts instantiated by Spring. How
can I get this to work?

I first tried to use cxf:bean like above. However there is no way (at least
I cant find any) to create the cxfEndpoint. I cant refer to the cxf endpoint
instantiated in Spring and I don't seem to be able to create one of my own
from Java.

I then tried using "cxf:" instead of "cxf:bean" like this:

*  ITrsWebService serverBean = new TrsWebServiceImpl();
>   from("cxf:
> http://localhost:9001/trsws/?serviceClass=se.digia.trs.route.webservice.ITrsWebService
> ").bean(serverBean);*


But for some reason camel-cxf can't seem to find the ITrsWebService class
(an interface). I get the following exception:


*2011-05-26 11:33:31,655 | ERROR | 01-fdce4f9f0365) | webservice
>           | ?                                   ? | [ERROR] null :
> [trs.route.webservice.8f8bae86-9561-4c21-be01-fdce4f9f0365] The callback
> method start has thrown an exception : Camel context failed to start (WS)
> **java.lang.RuntimeException: Camel context failed to start (WS)
> ** at
> se.digia.connect.core.service.RouteServiceBase.doStart(RouteServiceBase.java:70)
> ** at se.digia.connect.core.service.ServiceBase.start(ServiceBase.java:46)
> ** at
> se.digia.trs.route.webservice.WebserviceService.__start(WebserviceService.java:54)
> ** at
> se.digia.trs.route.webservice.WebserviceService.start(WebserviceService.java)
> ** at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)[:1.6.0_25]
> ** at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_25]
> ** at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_25]
> ** at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_25]
> ** at
> org.apache.felix.ipojo.util.Callback.call(Callback.java:237)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.util.Callback.call(Callback.java:193)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:455)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:336)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:165)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.IPojoFactory.updated(IPojoFactory.java:634)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1567)[5:org.apache.felix.configadmin:1.2.8]
> ** at
> org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:104)[5:org.apache.felix.configadmin:1.2.8]
> ** at java.lang.Thread.run(Thread.java:662)[:1.6.0_25]
> **Caused by: java.lang.ClassNotFoundException:
> se.digia.trs.route.webservice.ITrsWebService not found by
> org.apache.camel.camel-cxf [165]
> ** at
> org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787)
> ** at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)
> ** at
> org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768)
> ** at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_25]
> ** at
> org.apache.cxf.common.classloader.ClassLoaderUtils.loadClass2(ClassLoaderUtils.java:236)
> ** at
> org.apache.cxf.common.classloader.ClassLoaderUtils.loadClass(ClassLoaderUtils.java:222)
> ** at
> org.apache.camel.component.cxf.CxfEndpoint.createServerFactoryBean(CxfEndpoint.java:378)
> ** at
> org.apache.camel.component.cxf.CxfConsumer.<init>(CxfConsumer.java:59)
> ** at
> org.apache.camel.component.cxf.CxfEndpoint.createConsumer(CxfEndpoint.java:127)
> ** at
> org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:61)
> ** at
> org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.java:75)
> ** at org.apache.camel.impl.RouteService.warmUp(RouteService.java:128)
> ** at
> org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:1832)
> ** at
> org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1758)
> ** at
> org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1548)
> ** at
> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1440)
> ** at
> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1336)
> ** at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
> ** at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
> ** at
> org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1314)
> ** at
> se.digia.connect.core.service.RouteServiceBase.doStart(RouteServiceBase.java:54)
> ** ... 21 more*


How can I expose a web service with camel-cxf completely without using
Spring? Is it even possible? If not, how do I access the cxf endpoint
instantiated by Spring from my java code?

I should add that I'm using code-first and thus do not use a WSDL file.

/Bengt

Reply via email to