Hi Bengt,

I think you should create the cxf endpoint using the JaxWsServerFactoryBean 
like described below:
http://cxf.apache.org/docs/jax-ws-java-first-with-jms-transport.html

So you just use another address than in the example there.

Christian


-----Ursprüngliche Nachricht-----
Von: [email protected] [mailto:[email protected]] Im Auftrag von 
Bengt Rodehav
Gesendet: Donnerstag, 26. Mai 2011 14:45
An: [email protected]
Betreff: Re: camel-cxf in OSGi, java DSL and iPOJO (no Spring)

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.webservi
>> ce.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.webse
>>>>> rvic
>>>>> 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(RouteServic
>>>>> eBas
>>>>> e.java:70)
>>>>> ** at
>>>>> se.digia.connect.core.service.ServiceBase.start(ServiceBase.java:4
>>>>> 6)
>>>>> ** at
>>>>> se.digia.trs.route.webservice.WebserviceService.__start(Webservice
>>>>> Serv
>>>>> ice.java:54)
>>>>> ** at
>>>>> se.digia.trs.route.webservice.WebserviceService.start(WebserviceSe
>>>>> rvic
>>>>> e.java)
>>>>> ** at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>>>>> Method)[:1.6.0_25]
>>>>> ** at
>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorIm
>>>>> pl.j
>>>>> ava:39)[:1.6.0_25]
>>>>> ** at
>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAc
>>>>> cess
>>>>> 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:or
>>>>> g.ap
>>>>> ache.felix.ipojo:1.6.8]
>>>>> ** at
>>>>> org.apache.felix.ipojo.util.Callback.call(Callback.java:193)[68:or
>>>>> g.ap
>>>>> ache.felix.ipojo:1.6.8]
>>>>> ** at
>>>>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallba
>>>>> ck.c 
>>>>> all(LifecycleCallback.java:86)[68:org.apache.felix.ipojo:1.6.8]
>>>>> ** at
>>>>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallba
>>>>> ckHa 
>>>>> ndler.__stateChanged(LifecycleCallbackHandler.java:162)[68:org.apache.
>>>>> felix.ipojo:1.6.8]
>>>>> ** at
>>>>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallba
>>>>> ckHa 
>>>>> ndler.stateChanged(LifecycleCallbackHandler.java)[68:org.apache.felix.
>>>>> ipojo:1.6.8]
>>>>> ** at
>>>>> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.ja
>>>>> va: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(ComponentFa
>>>>> ctor y.java:165)[68:org.apache.felix.ipojo:1.6.8]
>>>>> ** at
>>>>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoF
>>>>> acto ry.java:301)[68:org.apache.felix.ipojo:1.6.8]
>>>>> ** at
>>>>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoF
>>>>> acto 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.findClassOrResourceByDelegat
>>>>> ion(
>>>>> ModuleImpl.java:787)
>>>>> ** at
>>>>> org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:7
>>>>> 1)
>>>>> ** 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(Clas
>>>>> sLoa
>>>>> derUtils.java:236)
>>>>> ** at
>>>>> org.apache.cxf.common.classloader.ClassLoaderUtils.loadClass(Class
>>>>> Load
>>>>> 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(EventDr
>>>>> iven
>>>>> 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(DefaultCa
>>>>> melC
>>>>> ontext.java:1832)
>>>>> ** at
>>>>> org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices
>>>>> (Def
>>>>> aultCamelContext.java:1758)
>>>>> ** at
>>>>> org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(De
>>>>> faul
>>>>> tCamelContext.java:1548)
>>>>> ** at
>>>>> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCame
>>>>> lCon
>>>>> 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(DefaultCamelContex
>>>>> t.ja
>>>>> va:1314)
>>>>> ** at
>>>>> se.digia.connect.core.service.RouteServiceBase.doStart(RouteServic
>>>>> eBas
>>>>> 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