You might want to try the camel transport for cxf instead.
I think in this case you do not need spring.

Christian


-----Ursprüngliche Nachricht-----
Von: bengt.rode...@gmail.com [mailto:bengt.rode...@gmail.com] Im Auftrag von 
Bengt Rodehav
Gesendet: Donnerstag, 26. Mai 2011 12:17
An: users@camel.apache.org
Betreff: camel-cxf in OSGi, java DSL and iPOJO (no Spring)

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.webservic
> e.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(RouteServiceBas
> e.java:70)
> ** at 
> se.digia.connect.core.service.ServiceBase.start(ServiceBase.java:46)
> ** at
> se.digia.trs.route.webservice.WebserviceService.__start(WebserviceServ
> ice.java:54)
> ** at
> se.digia.trs.route.webservice.WebserviceService.start(WebserviceServic
> e.java)
> ** at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)[:1.6.0_25]
> ** at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j
> ava:39)[:1.6.0_25]
> ** at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess
> orImpl.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.ap
> ache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.util.Callback.call(Callback.java:193)[68:org.ap
> ache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.c
> all(LifecycleCallback.java:86)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHa
> ndler.__stateChanged(LifecycleCallbackHandler.java:162)[68:org.apache.
> felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHa
> ndler.stateChanged(LifecycleCallbackHandler.java)[68:org.apache.felix.
> ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:4
> 55)[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(ComponentFactor
> y.java:165)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFacto
> ry.java:301)[68:org.apache.felix.ipojo:1.6.8]
> ** at
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFacto
> ry.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(Modu
> leImpl.java:1768)
> ** at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_25]
> ** at
> org.apache.cxf.common.classloader.ClassLoaderUtils.loadClass2(ClassLoa
> derUtils.java:236)
> ** at
> org.apache.cxf.common.classloader.ClassLoaderUtils.loadClass(ClassLoad
> erUtils.java:222)
> ** at
> org.apache.camel.component.cxf.CxfEndpoint.createServerFactoryBean(Cxf
> Endpoint.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(EventDriven
> ConsumerRoute.java:61)
> ** at
> org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.jav
> a:75)
> ** at org.apache.camel.impl.RouteService.warmUp(RouteService.java:128)
> ** at
> org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelC
> ontext.java:1832)
> ** at
> org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(Def
> aultCamelContext.java:1758)
> ** at
> org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(Defaul
> tCamelContext.java:1548)
> ** at
> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelCon
> text.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.ja
> va:1314)
> ** at
> se.digia.connect.core.service.RouteServiceBase.doStart(RouteServiceBas
> e.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