Thanks for you reply Christian,

Yes, I did find your article but I guess I didn't understand it correctly...

When you say I should create a "normal cxf endpoint" I thought I was
supposed to create a route starting with "from("cxf:")" but maybe you mean I
should actually do a
"new CxfEndpoint()"?

/Bengt

2011/5/26 Christian Schneider <[email protected]>

> I think you can do the CamelTransportfactory setup a little simpler and the
> route is wrong.
>
> A long time ago I wrote an article about the Camel transport for cxf but it
> should mostly still be valid:
>
> https://cwiki.apache.org/confluence/display/CAMEL/Better+JMS+Transport+for+CXF+Webservice+using+Apache+Camel
>
> Basically you have to create a normal cxf endpoint with
> address="camel://direct:endpointname" and then a route in camel:
>
> from("jetty://http://localhost:8080/servicename
> ").to("direct:endpointname")
>
> So the jetty endpoint receives the request and forwards it to cxf with the
> indirection of endpointname.
>
> I hope that helps
>
> Christian
>
>
> Am 26.05.2011 13:56, schrieb Bengt Rodehav:
>
>  Christian,
>>
>> I tried using the camel transport but I got the same exception (couldn't
>> find the ITrsWebService class). I'm not sure I did it the way you
>> intended.
>> What I did was this:
>>
>>
>> *        /*
>> **         * Initialize camel transport for CXF
>> **         */
>> **        BusFactory bf = BusFactory.newInstance();
>> **        Bus bus = bf.createBus();
>> **        CamelTransportFactory camelTransportFactory = new
>> CamelTransportFactory();
>> **        camelTransportFactory.setCamelContext(getContext());
>> **        // register the conduit initiator
>> **        ConduitInitiatorManager cim =
>> bus.getExtension(ConduitInitiatorManager.class);
>> **        cim.registerConduitInitiator(CamelTransportFactory.TRANSPORT_ID,
>> camelTransportFactory);
>> **        // register the destination factory
>> **        DestinationFactoryManager dfm =
>> bus.getExtension(DestinationFactoryManager.class);
>> **
>>  dfm.registerDestinationFactory(CamelTransportFactory.TRANSPORT_ID,
>> camelTransportFactory);
>> **        // set or bus as the default bus for cxf
>> **        BusFactory.setDefaultBus(bus);        **
>> **        ITrsWebService serverBean = new TrsWebServiceImpl();**
>> **        from("jetty:http://localhost:9001/trsws/";).to("direct:cxfin");
>> **
>>
>> from("cxf:camel:direct:cxfin?serviceClass=se.digia.trs.route.webservice.ITrsWebService").bean(serverBean);
>> *
>>
>> Not sure why this would help since I still end up with a URI starting with
>> "cxf:" and with the parameter
>> "serviceClass=se.digia.trs.route.webservice.ITrsWebService". If this class
>> couldn't be found before then it can't be found now either. Did I
>> misunderstand your suggestion?
>>
>> /Bengt
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> 2011/5/26 Bengt Rodehav<[email protected]>
>>
>>  This sounds like a new angle. Do you have any pointers as to how I do
>>> this?
>>> Does it limit what I can do with CXF or is it "fully featured"?
>>>
>>> /Bengt
>>>
>>>
>>> 2011/5/26 Christian Schneider<[email protected]>
>>>
>>>  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: [email protected] [mailto:[email protected]] Im
>>>> Auftrag
>>>> von Bengt Rodehav
>>>> Gesendet: Donnerstag, 26. Mai 2011 12:17
>>>> An: [email protected]
>>>> 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
>>>>
>>>>
>>>
>
> --
> Christian Schneider
> http://www.liquid-reality.de
>
> CXF and Camel Architect
> SOPERA - The Application Integration Division of Talend
> http://www.talend.com
>
>

Reply via email to