You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Dave Brosius <db...@apache.org> on 2008/04/30 00:15:55 UTC

cxf Autowiring in OSGI

I am having trouble getting cxf to work in osgi. The problem is that it appears that there are no factories registered for the various namespaces needed such as
http://schemas.xmlsoap.org/soap/http


When run in normal mode (not osgi), I see these namespaces being registered (in the below stack trace). In OSGI this isn't happening and so it fails in JaxWsServerFactoryBean.createBindingInfo. Does anyone have any ideas about how to fix this?


[CODE]
Thread [main] (Suspended (breakpoint at line 79 in DestinationFactoryManagerImpl))	
	DestinationFactoryManagerImpl.registerDestinationFactory(String, DestinationFactory) line: 79	
	JettyHTTPTransportFactory.finalizeConfig() line: 68	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 585	
	ResourceInjector.invokePostConstruct() line: 305	
	ResourceInjector.construct(Object) line: 86	
	Jsr250BeanPostProcessor.postProcessAfterInitialization(Object, String) line: 58	
	DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyBeanPostProcessorsAfterInitialization(Object, String) line: 357	
	DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).initializeBean(String, Object, RootBeanDefinition) line: 1308	
	DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String, RootBeanDefinition, Object[]) line: 463	
	AbstractAutowireCapableBeanFactory$1.run() line: 404	
	AccessController.doPrivileged(PrivilegedAction<T>) line: not available [native method]	
	DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String, RootBeanDefinition, Object[]) line: 375	
	AbstractBeanFactory$1.getObject() line: 263	
	DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String, ObjectFactory) line: 170	
	DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String, Class, Object[], boolean) line: 260	
	DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class, Object[]) line: 184	
	DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line: 163	
	DefaultListableBeanFactory.preInstantiateSingletons() line: 430	
	BusApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory) line: 729	
	BusApplicationContext(AbstractApplicationContext).refresh() line: 381	
	BusApplicationContext.<init>(String[], boolean, ApplicationContext) line: 86	
	SpringBusFactory.createBus(String[], boolean) line: 93	
	SpringBusFactory.createBus(String, boolean) line: 87	
	SpringBusFactory.createBus(String) line: 65	
	SpringBusFactory.createBus() line: 54	
	BusFactory.getDefaultBus(boolean) line: 69	
	BusFactory.getThreadDefaultBus(boolean) line: 106	
	BusFactory.getThreadDefaultBus() line: 97	
	JaxWsServerFactoryBean(AbstractEndpointFactory).getBus() line: 73	
	JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initializeServiceFactory() line: 143	
	JaxWsServerFactoryBean(ServerFactoryBean).initializeServiceFactory() line: 149	
	JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEndpoint() line: 73	
	JaxWsServerFactoryBean(ServerFactoryBean).create() line: 113	
	JaxWsServerFactoryBean.create() line: 160	
	Main.main(String[]) line: 19	
[/CODE]


Re: cxf Autowiring in OSGI

Posted by Guillaume Nodet <gn...@gmail.com>.
FYI, ServiceMix 3.2.1 does not use OSGi at all, this is only available
in ServiceMix 4.
Anyway, this is a known problem, but should not prevent you to unzip
the distribution and use it.

On Wed, Apr 30, 2008 at 11:50 PM, MeBigFatGuy <db...@apache.org> wrote:
>
>  I tried downloading the servicemix 3.2.1 sources zip from here
>  http://servicemix.apache.org/download.html, but got a zip that was corrupt
>  with many error messages like:
>
>  The following invalid filename was encountered in the archive:
>  "apache-servicemix-3.2.1\src\core\servicemix-jbl\file:\home\gnodet\public_html\servicemix-3.2.1\site\people.apache.org\www\servicemix.apache.org\dist\servicemix-3.2.1\site\parent\core\servicemix-jbl\apidocs\index.html"
>
>
>
>
>
>  dkulp wrote:
>  >
>  > On Wednesday 30 April 2008, Dave Brosius wrote:
>  >> Thank you very much. Is the META-INF/cxf/osgi directory new? as of
>  >> 2.0.5 it doesn't exist.
>  >
>  > That's a file that's over in the servicemix repo someplace that defines
>  > an http transport for the CXF runtime that uses the osgi servlet instead
>  > of our embedded jetty.   It should be moved over to CXF at some point,
>  > but it hasn't been yet.
>  >
>  > Dan
>  >
>  >
>  >>
>  >> -----Original Message-----
>  >> From: Guillaume Nodet <gn...@gmail.com>
>  >> Sent: Wednesday, April 30, 2008 10:37am
>  >> To: users@cxf.apache.org
>  >> Subject: Re: cxf Autowiring in OSGI
>  >>
>  >> Here's what we came up with so far:
>  >>
>  >> http://servicemix.apache.org/SMX4/cxf-examples.html#CXFexamples-Inside
>  >>theexample
>  >>
>  >> if you really want to use the non spring configuration, the best way
>  >> to avoid classloader issues may be to embed cxf and its dependencies
>  >> inside a single bundle along with your services.
>  >>
>  >> On Wed, Apr 30, 2008 at 4:06 PM, Daniel Kulp <dk...@apache.org> wrote:
>  >> >  Dave,
>  >> >
>  >> >
>  >> >  Guillaume Nodet definitely has more experience with the OSGi stuff.
>  >> >  In generaly, we've seen success using the Spring Dynamic Module
>  >> > stuff with OSGi as you can import the cxf stuff you need in the
>  >> > spring module and the bus gets wired up correctly.   (in 2.0.6/2.1,
>  >> > we even added a cxf-all.xml that you can import to grab everything,
>  >> > but thats probably more than you need)
>  >> >
>  >> >  I'm not sure if anyone not using spring-dm has gotten anything to
>  >> > work. One option MAY be to call SpringBusFactory.createBus()
>  >> > yourself first to cause the Bus to be created with spring.  Not sure
>  >> > if that works though as I'm not sure if it will find all the spring
>  >> > config files or not.
>  >> >
>  >> >  Dan
>  >> >
>  >> >  On Tuesday 29 April 2008, Dave Brosius wrote:
>  >> >  > OK, this code is failing in OSGI
>  >> >  >
>  >> >  > BusFactory.getBusFactoryClass
>  >> >  >
>  >> >  > specifically, it tries to load the file
>  >> >  >
>  >> >  > META-INF/services/org.apache.cxf.bus.factory
>  >> >  >
>  >> >  > and fails.
>  >> >  >
>  >> >  > [CODE]
>  >> >  > private static String getBusFactoryClass(ClassLoader classLoader)
>  >> >  > {
>  >> >  >
>  >> >  >         String busFactoryClass = null;
>  >> >  >         String busFactoryCondition = null;
>  >> >  >
>  >> >  >         // next check system properties
>  >> >  >         busFactoryClass =
>  >> >  > System.getProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME); if
>  >> >  > (isValidBusFactoryClass(busFactoryClass)) {
>  >> >  >             return busFactoryClass;
>  >> >  >         }
>  >> >  >
>  >> >  >         try {
>  >> >  >             // next, check for the services stuff in the jar file
>  >> >  >             String serviceId = "META-INF/services/" +
>  >> >  > BusFactory.BUS_FACTORY_PROPERTY_NAME; InputStream is = null;
>  >> >  >
>  >> >  >             if (classLoader == null) {
>  >> >  >                 classLoader =
>  >> >  > Thread.currentThread().getContextClassLoader(); }
>  >> >  >
>  >> >  >             if (classLoader == null) {
>  >> >  >                 is =
>  >> >  > ClassLoader.getSystemResourceAsStream(serviceId); } else {
>  >> >  >                 is = classLoader.getResourceAsStream(serviceId);
>  >> >  >             }
>  >> >  >             if (is != null) {
>  >> >  >                 BufferedReader rd = new BufferedReader(new
>  >> >  > InputStreamReader(is, "UTF-8")); busFactoryClass = rd.readLine();
>  >> >  >                 busFactoryCondition = rd.readLine();
>  >> >  >                 rd.close();
>  >> >  >             }
>  >> >  >             if (isValidBusFactoryClass(busFactoryClass)) {
>  >> >  >                 if (busFactoryCondition != null) {
>  >> >  >                     try {
>  >> >  >
>  >> >  > classLoader.loadClass(busFactoryCondition); return
>  >> >  > busFactoryClass;
>  >> >  >                     } catch (ClassNotFoundException e) {
>  >> >  >                         return DEFAULT_BUS_FACTORY;
>  >> >  >                     }
>  >> >  >                 } else {
>  >> >  >                     return busFactoryClass;
>  >> >  >                 }
>  >> >  >             }
>  >> >  >
>  >> >  >             // otherwise use default
>  >> >  >             busFactoryClass = BusFactory.DEFAULT_BUS_FACTORY;
>  >> >  >             return busFactoryClass;
>  >> >  >         } catch (Exception ex) {
>  >> >  >             LogUtils.log(LOG, Level.SEVERE,
>  >> >  > "FAILED_TO_DETERMINE_BUS_FACTORY_EXC", ex); }
>  >> >  >         return busFactoryClass;
>  >> >  >     }
>  >> >  > [/CODE]
>  >> >  >
>  >> >  >
>  >> >  > -----Original Message-----
>  >> >  > From: Dave Brosius <db...@apache.org>
>  >> >  > Sent: Tuesday, April 29, 2008 6:27pm
>  >> >  > To: users@cxf.apache.org
>  >> >  > Cc: dave@mebigfatguy.com
>  >> >  > Subject: RE: cxf Autowiring in OSGI
>  >> >  >
>  >> >  > Here's the difference: Can anyone help me with why this is so?
>  >> >  >
>  >> >  > In OSGI, createBus creates a CXFBusFactory
>  >> >  >
>  >> >  > Thread [SpringOsgiExtenderThread-2] (Suspended)
>  >> >  >       CXFBusFactory.createBus() line: 32
>  >> >  >       BusFactory.getDefaultBus(boolean) line: 69
>  >> >  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>  >> >  >       BusFactory.getThreadDefaultBus() line: 97
>  >> >  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus()
>  >> >  > line: 73
>  >> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initiali
>  >> >  >zeSe rviceFactory() line: 143
>  >> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEn
>  >> >  >dpoin t() line: 73
>  >> >  > JaxWsServerFactoryBean(ServerFactoryBean).create() line: 113
>  >> >  > JaxWsServerFactoryBean.create() line: 160
>  >> >  >       EchoInstaller.init() line: 23
>  >> >  >       NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
>  >> >  > line: not available [native method]
>  >> >  > NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
>  >> >  >       DelegatingMethodAccessorImpl.invoke(Object, Object[]) line:
>  >> >  > 25 Method.invoke(Object, Object...) line: 585
>  >> >  >
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).in
>  >> >  >voke CustomInitMethod(String, Object, String, boolean) line: 1378
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).in
>  >> >  >vokeI nitMethods(String, Object, RootBeanDefinition) line: 1339
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).in
>  >> >  >itial izeBean(String, Object, RootBeanDefinition) line: 1299
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).do
>  >> >  >Creat eBean(String, RootBeanDefinition, Object[]) line: 463
>  >> >  > AbstractAutowireCapableBeanFactory$1.run() line: 404
>  >> >  >       AccessController.doPrivileged(PrivilegedAction<T>) line:
>  >> >  > not available [native method]
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).cr
>  >> >  >eateB ean(String, RootBeanDefinition, Object[]) line: 375
>  >> >  > AbstractBeanFactory$1.getObject() line: 263
>  >> >  >
>  >> >  > DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingl
>  >> >  >eton (String, ObjectFactory) line: 170
>  >> >  > DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
>  >> >  > Class, Object[], boolean) line: 260
>  >> >  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String,
>  >> >  > Class, Object[]) line: 184
>  >> >  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String)
>  >> >  > line: 163 DefaultListableBeanFactory.preInstantiateSingletons()
>  >> >  > line: 430
>  >> >  > OsgiBundleXmlApplicationContext(AbstractApplicationContext).finis
>  >> >  >hBean FactoryInitialization(ConfigurableListableBeanFactory) line:
>  >> >  > 729
>  >> >  > OsgiBundleXmlApplicationContext(AbstractDelegatedExecutionApplica
>  >> >  >tionC ontext).completeRefresh() line: 268
>  >> >  > DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.ru
>  >> >  >n() line: 142
>  >> >  > DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.ru
>  >> >  >n() line: 142 Thread.run() line: 595
>  >> >  >
>  >> >  >
>  >> >  > In standard mode, createBus creates a SpringBusFactory
>  >> >  >
>  >> >  > Thread [main] (Suspended (breakpoint at line 54 in
>  >> >  > SpringBusFactory)) SpringBusFactory.createBus() line: 54
>  >> >  >       BusFactory.getDefaultBus(boolean) line: 69
>  >> >  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>  >> >  >       BusFactory.getThreadDefaultBus() line: 97
>  >> >  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus()
>  >> >  > line: 73
>  >> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initiali
>  >> >  >zeSe rviceFactory() line: 143
>  >> >  > JaxWsServerFactoryBean(ServerFactoryBean).initializeServiceFactor
>  >> >  >y() line: 149
>  >> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEn
>  >> >  >dpoin t() line: 73
>  >> >  > JaxWsServerFactoryBean(ServerFactoryBean).create() line: 113
>  >> >  > JaxWsServerFactoryBean.create() line: 160
>  >> >  >       Main.main(String[]) line: 19
>  >> >  >
>  >> >  >
>  >> >  >
>  >> >  >
>  >> >  > -----Original Message-----
>  >> >  > From: Dave Brosius <db...@apache.org>
>  >> >  > Sent: Tuesday, April 29, 2008 6:15pm
>  >> >  > To: users@cxf.apache.org
>  >> >  > Cc: dave@mebigfatguy.com
>  >> >  > Subject: cxf Autowiring in OSGI
>  >> >  >
>  >> >  > I am having trouble getting cxf to work in osgi. The problem is
>  >> >  > that it appears that there are no factories registered for the
>  >> >  > various namespaces needed such as
>  >> >  > http://schemas.xmlsoap.org/soap/http
>  >> >  >
>  >> >  >
>  >> >  > When run in normal mode (not osgi), I see these namespaces being
>  >> >  > registered (in the below stack trace). In OSGI this isn't
>  >> >  > happening and so it fails in
>  >> >  > JaxWsServerFactoryBean.createBindingInfo. Does anyone have any
>  >> >  > ideas about how to fix this?
>  >> >  >
>  >> >  >
>  >> >  > [CODE]
>  >> >  > Thread [main] (Suspended (breakpoint at line 79 in
>  >> >  > DestinationFactoryManagerImpl))
>  >> >  > DestinationFactoryManagerImpl.registerDestinationFactory(String,
>  >> >  > DestinationFactory) line: 79
>  >> >  > JettyHTTPTransportFactory.finalizeConfig() line: 68
>  >> >  >       NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
>  >> >  > line: not available [native method]
>  >> >  > NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
>  >> >  >       DelegatingMethodAccessorImpl.invoke(Object, Object[]) line:
>  >> >  > 25 Method.invoke(Object, Object...) line: 585
>  >> >  >       ResourceInjector.invokePostConstruct() line: 305
>  >> >  >       ResourceInjector.construct(Object) line: 86
>  >> >  >
>  >> >  > Jsr250BeanPostProcessor.postProcessAfterInitialization(Object,
>  >> >  > String) line: 58
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).ap
>  >> >  >plyBe anPostProcessorsAfterInitialization(Object, String) line:
>  >> >  > 357
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).in
>  >> >  >itial izeBean(String, Object, RootBeanDefinition) line: 1308
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).do
>  >> >  >Creat eBean(String, RootBeanDefinition, Object[]) line: 463
>  >> >  > AbstractAutowireCapableBeanFactory$1.run() line: 404
>  >> >  >       AccessController.doPrivileged(PrivilegedAction<T>) line:
>  >> >  > not available [native method]
>  >> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).cr
>  >> >  >eateB
>  >> > >
>  >> > >ean(String, RootBeanDefinition, Object[]) line: 375
>  >> > >
>  >> >  > AbstractBeanFactory$1.getObject() line: 263
>  >> >  >
>  >> >  > DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingl
>  >> >  >eton (String, ObjectFactory) line: 170
>  >> >  > DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
>  >> >  > Class, Object[], boolean) line: 260
>  >> >  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String,
>  >> >  > Class, Object[]) line: 184
>  >> >  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String)
>  >> >  > line: 163 DefaultListableBeanFactory.preInstantiateSingletons()
>  >> >  > line: 430
>  >> >  > BusApplicationContext(AbstractApplicationContext).finishBeanFacto
>  >> >  >ryIni tialization(ConfigurableListableBeanFactory) line: 729
>  >> >  > BusApplicationContext(AbstractApplicationContext).refresh() line:
>  >> >  > 381 BusApplicationContext.<init>(String[], boolean,
>  >> >  > ApplicationContext) line: 86 SpringBusFactory.createBus(String[],
>  >> >  > boolean) line: 93 SpringBusFactory.createBus(String, boolean)
>  >> >  > line: 87 SpringBusFactory.createBus(String) line: 65
>  >> >  >       SpringBusFactory.createBus() line: 54
>  >> >  >       BusFactory.getDefaultBus(boolean) line: 69
>  >> >  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>  >> >  >       BusFactory.getThreadDefaultBus() line: 97
>  >> >  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus()
>  >> >  > line: 73
>  >> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initiali
>  >> >  >zeSe
>  >> > >
>  >> > >rviceFactory() line: 143
>  >> > >
>  >> >  > JaxWsServerFactoryBean(ServerFactoryBean).initializeServiceFactor
>  >> >  >y() line: 149
>  >> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEn
>  >> >  >dpoin
>  >> > >
>  >> > >t() line: 73 JaxWsServerFactoryBean(ServerFactoryBean).create()
>  > line:
>  >> >  > 113 JaxWsServerFactoryBean.create() line: 160
>  >> >  >       Main.main(String[]) line: 19
>  >> >  > [/CODE]
>  >> >
>  >> >  --
>  >> >  J. Daniel Kulp
>  >> >  Principal Engineer, IONA
>  >> >  dkulp@apache.org
>  >> >  http://www.dankulp.com/blog
>  >
>  >
>  >
>  > --
>  > J. Daniel Kulp
>  > Principal Engineer, IONA
>  > dkulp@apache.org
>  > http://www.dankulp.com/blog
>  >
>  >
>
>  --
>  View this message in context: http://www.nabble.com/cxf-Autowiring-in-OSGI-tp16971724p16992318.html
>  Sent from the cxf-user mailing list archive at Nabble.com.
>
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/

Re: cxf Autowiring in OSGI

Posted by MeBigFatGuy <db...@apache.org>.
I tried downloading the servicemix 3.2.1 sources zip from here
http://servicemix.apache.org/download.html, but got a zip that was corrupt
with many error messages like:

The following invalid filename was encountered in the archive:
"apache-servicemix-3.2.1\src\core\servicemix-jbl\file:\home\gnodet\public_html\servicemix-3.2.1\site\people.apache.org\www\servicemix.apache.org\dist\servicemix-3.2.1\site\parent\core\servicemix-jbl\apidocs\index.html"

 

dkulp wrote:
> 
> On Wednesday 30 April 2008, Dave Brosius wrote:
>> Thank you very much. Is the META-INF/cxf/osgi directory new? as of
>> 2.0.5 it doesn't exist.
> 
> That's a file that's over in the servicemix repo someplace that defines 
> an http transport for the CXF runtime that uses the osgi servlet instead 
> of our embedded jetty.   It should be moved over to CXF at some point, 
> but it hasn't been yet.
> 
> Dan
> 
> 
>>
>> -----Original Message-----
>> From: Guillaume Nodet <gn...@gmail.com>
>> Sent: Wednesday, April 30, 2008 10:37am
>> To: users@cxf.apache.org
>> Subject: Re: cxf Autowiring in OSGI
>>
>> Here's what we came up with so far:
>>    
>> http://servicemix.apache.org/SMX4/cxf-examples.html#CXFexamples-Inside
>>theexample
>>
>> if you really want to use the non spring configuration, the best way
>> to avoid classloader issues may be to embed cxf and its dependencies
>> inside a single bundle along with your services.
>>
>> On Wed, Apr 30, 2008 at 4:06 PM, Daniel Kulp <dk...@apache.org> wrote:
>> >  Dave,
>> >
>> >
>> >  Guillaume Nodet definitely has more experience with the OSGi stuff.
>> >  In generaly, we've seen success using the Spring Dynamic Module
>> > stuff with OSGi as you can import the cxf stuff you need in the
>> > spring module and the bus gets wired up correctly.   (in 2.0.6/2.1,
>> > we even added a cxf-all.xml that you can import to grab everything,
>> > but thats probably more than you need)
>> >
>> >  I'm not sure if anyone not using spring-dm has gotten anything to
>> > work. One option MAY be to call SpringBusFactory.createBus()
>> > yourself first to cause the Bus to be created with spring.  Not sure
>> > if that works though as I'm not sure if it will find all the spring
>> > config files or not.
>> >
>> >  Dan
>> >
>> >  On Tuesday 29 April 2008, Dave Brosius wrote:
>> >  > OK, this code is failing in OSGI
>> >  >
>> >  > BusFactory.getBusFactoryClass
>> >  >
>> >  > specifically, it tries to load the file
>> >  >
>> >  > META-INF/services/org.apache.cxf.bus.factory
>> >  >
>> >  > and fails.
>> >  >
>> >  > [CODE]
>> >  > private static String getBusFactoryClass(ClassLoader classLoader)
>> >  > {
>> >  >
>> >  >         String busFactoryClass = null;
>> >  >         String busFactoryCondition = null;
>> >  >
>> >  >         // next check system properties
>> >  >         busFactoryClass =
>> >  > System.getProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME); if
>> >  > (isValidBusFactoryClass(busFactoryClass)) {
>> >  >             return busFactoryClass;
>> >  >         }
>> >  >
>> >  >         try {
>> >  >             // next, check for the services stuff in the jar file
>> >  >             String serviceId = "META-INF/services/" +
>> >  > BusFactory.BUS_FACTORY_PROPERTY_NAME; InputStream is = null;
>> >  >
>> >  >             if (classLoader == null) {
>> >  >                 classLoader =
>> >  > Thread.currentThread().getContextClassLoader(); }
>> >  >
>> >  >             if (classLoader == null) {
>> >  >                 is =
>> >  > ClassLoader.getSystemResourceAsStream(serviceId); } else {
>> >  >                 is = classLoader.getResourceAsStream(serviceId);
>> >  >             }
>> >  >             if (is != null) {
>> >  >                 BufferedReader rd = new BufferedReader(new
>> >  > InputStreamReader(is, "UTF-8")); busFactoryClass = rd.readLine();
>> >  >                 busFactoryCondition = rd.readLine();
>> >  >                 rd.close();
>> >  >             }
>> >  >             if (isValidBusFactoryClass(busFactoryClass)) {
>> >  >                 if (busFactoryCondition != null) {
>> >  >                     try {
>> >  >                        
>> >  > classLoader.loadClass(busFactoryCondition); return
>> >  > busFactoryClass;
>> >  >                     } catch (ClassNotFoundException e) {
>> >  >                         return DEFAULT_BUS_FACTORY;
>> >  >                     }
>> >  >                 } else {
>> >  >                     return busFactoryClass;
>> >  >                 }
>> >  >             }
>> >  >
>> >  >             // otherwise use default
>> >  >             busFactoryClass = BusFactory.DEFAULT_BUS_FACTORY;
>> >  >             return busFactoryClass;
>> >  >         } catch (Exception ex) {
>> >  >             LogUtils.log(LOG, Level.SEVERE,
>> >  > "FAILED_TO_DETERMINE_BUS_FACTORY_EXC", ex); }
>> >  >         return busFactoryClass;
>> >  >     }
>> >  > [/CODE]
>> >  >
>> >  >
>> >  > -----Original Message-----
>> >  > From: Dave Brosius <db...@apache.org>
>> >  > Sent: Tuesday, April 29, 2008 6:27pm
>> >  > To: users@cxf.apache.org
>> >  > Cc: dave@mebigfatguy.com
>> >  > Subject: RE: cxf Autowiring in OSGI
>> >  >
>> >  > Here's the difference: Can anyone help me with why this is so?
>> >  >
>> >  > In OSGI, createBus creates a CXFBusFactory
>> >  >
>> >  > Thread [SpringOsgiExtenderThread-2] (Suspended)
>> >  >       CXFBusFactory.createBus() line: 32
>> >  >       BusFactory.getDefaultBus(boolean) line: 69
>> >  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>> >  >       BusFactory.getThreadDefaultBus() line: 97
>> >  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus()
>> >  > line: 73
>> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initiali
>> >  >zeSe rviceFactory() line: 143
>> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEn
>> >  >dpoin t() line: 73
>> >  > JaxWsServerFactoryBean(ServerFactoryBean).create() line: 113
>> >  > JaxWsServerFactoryBean.create() line: 160
>> >  >       EchoInstaller.init() line: 23
>> >  >       NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
>> >  > line: not available [native method]
>> >  > NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
>> >  >       DelegatingMethodAccessorImpl.invoke(Object, Object[]) line:
>> >  > 25 Method.invoke(Object, Object...) line: 585
>> >  >      
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).in
>> >  >voke CustomInitMethod(String, Object, String, boolean) line: 1378
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).in
>> >  >vokeI nitMethods(String, Object, RootBeanDefinition) line: 1339
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).in
>> >  >itial izeBean(String, Object, RootBeanDefinition) line: 1299
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).do
>> >  >Creat eBean(String, RootBeanDefinition, Object[]) line: 463
>> >  > AbstractAutowireCapableBeanFactory$1.run() line: 404
>> >  >       AccessController.doPrivileged(PrivilegedAction<T>) line:
>> >  > not available [native method]
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).cr
>> >  >eateB ean(String, RootBeanDefinition, Object[]) line: 375
>> >  > AbstractBeanFactory$1.getObject() line: 263
>> >  >      
>> >  > DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingl
>> >  >eton (String, ObjectFactory) line: 170
>> >  > DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
>> >  > Class, Object[], boolean) line: 260
>> >  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String,
>> >  > Class, Object[]) line: 184
>> >  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String)
>> >  > line: 163 DefaultListableBeanFactory.preInstantiateSingletons()
>> >  > line: 430
>> >  > OsgiBundleXmlApplicationContext(AbstractApplicationContext).finis
>> >  >hBean FactoryInitialization(ConfigurableListableBeanFactory) line:
>> >  > 729
>> >  > OsgiBundleXmlApplicationContext(AbstractDelegatedExecutionApplica
>> >  >tionC ontext).completeRefresh() line: 268
>> >  > DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.ru
>> >  >n() line: 142
>> >  > DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.ru
>> >  >n() line: 142 Thread.run() line: 595
>> >  >
>> >  >
>> >  > In standard mode, createBus creates a SpringBusFactory
>> >  >
>> >  > Thread [main] (Suspended (breakpoint at line 54 in
>> >  > SpringBusFactory)) SpringBusFactory.createBus() line: 54
>> >  >       BusFactory.getDefaultBus(boolean) line: 69
>> >  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>> >  >       BusFactory.getThreadDefaultBus() line: 97
>> >  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus()
>> >  > line: 73
>> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initiali
>> >  >zeSe rviceFactory() line: 143
>> >  > JaxWsServerFactoryBean(ServerFactoryBean).initializeServiceFactor
>> >  >y() line: 149
>> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEn
>> >  >dpoin t() line: 73
>> >  > JaxWsServerFactoryBean(ServerFactoryBean).create() line: 113
>> >  > JaxWsServerFactoryBean.create() line: 160
>> >  >       Main.main(String[]) line: 19
>> >  >
>> >  >
>> >  >
>> >  >
>> >  > -----Original Message-----
>> >  > From: Dave Brosius <db...@apache.org>
>> >  > Sent: Tuesday, April 29, 2008 6:15pm
>> >  > To: users@cxf.apache.org
>> >  > Cc: dave@mebigfatguy.com
>> >  > Subject: cxf Autowiring in OSGI
>> >  >
>> >  > I am having trouble getting cxf to work in osgi. The problem is
>> >  > that it appears that there are no factories registered for the
>> >  > various namespaces needed such as
>> >  > http://schemas.xmlsoap.org/soap/http
>> >  >
>> >  >
>> >  > When run in normal mode (not osgi), I see these namespaces being
>> >  > registered (in the below stack trace). In OSGI this isn't
>> >  > happening and so it fails in
>> >  > JaxWsServerFactoryBean.createBindingInfo. Does anyone have any
>> >  > ideas about how to fix this?
>> >  >
>> >  >
>> >  > [CODE]
>> >  > Thread [main] (Suspended (breakpoint at line 79 in
>> >  > DestinationFactoryManagerImpl))
>> >  > DestinationFactoryManagerImpl.registerDestinationFactory(String,
>> >  > DestinationFactory) line: 79
>> >  > JettyHTTPTransportFactory.finalizeConfig() line: 68
>> >  >       NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
>> >  > line: not available [native method]
>> >  > NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
>> >  >       DelegatingMethodAccessorImpl.invoke(Object, Object[]) line:
>> >  > 25 Method.invoke(Object, Object...) line: 585
>> >  >       ResourceInjector.invokePostConstruct() line: 305
>> >  >       ResourceInjector.construct(Object) line: 86
>> >  >      
>> >  > Jsr250BeanPostProcessor.postProcessAfterInitialization(Object,
>> >  > String) line: 58
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).ap
>> >  >plyBe anPostProcessorsAfterInitialization(Object, String) line:
>> >  > 357
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).in
>> >  >itial izeBean(String, Object, RootBeanDefinition) line: 1308
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).do
>> >  >Creat eBean(String, RootBeanDefinition, Object[]) line: 463
>> >  > AbstractAutowireCapableBeanFactory$1.run() line: 404
>> >  >       AccessController.doPrivileged(PrivilegedAction<T>) line:
>> >  > not available [native method]
>> >  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).cr
>> >  >eateB
>> > >
>> > >ean(String, RootBeanDefinition, Object[]) line: 375
>> > >
>> >  > AbstractBeanFactory$1.getObject() line: 263
>> >  >      
>> >  > DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingl
>> >  >eton (String, ObjectFactory) line: 170
>> >  > DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
>> >  > Class, Object[], boolean) line: 260
>> >  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String,
>> >  > Class, Object[]) line: 184
>> >  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String)
>> >  > line: 163 DefaultListableBeanFactory.preInstantiateSingletons()
>> >  > line: 430
>> >  > BusApplicationContext(AbstractApplicationContext).finishBeanFacto
>> >  >ryIni tialization(ConfigurableListableBeanFactory) line: 729
>> >  > BusApplicationContext(AbstractApplicationContext).refresh() line:
>> >  > 381 BusApplicationContext.<init>(String[], boolean,
>> >  > ApplicationContext) line: 86 SpringBusFactory.createBus(String[],
>> >  > boolean) line: 93 SpringBusFactory.createBus(String, boolean)
>> >  > line: 87 SpringBusFactory.createBus(String) line: 65
>> >  >       SpringBusFactory.createBus() line: 54
>> >  >       BusFactory.getDefaultBus(boolean) line: 69
>> >  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>> >  >       BusFactory.getThreadDefaultBus() line: 97
>> >  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus()
>> >  > line: 73
>> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initiali
>> >  >zeSe
>> > >
>> > >rviceFactory() line: 143
>> > >
>> >  > JaxWsServerFactoryBean(ServerFactoryBean).initializeServiceFactor
>> >  >y() line: 149
>> >  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEn
>> >  >dpoin
>> > >
>> > >t() line: 73 JaxWsServerFactoryBean(ServerFactoryBean).create() 
> line:
>> >  > 113 JaxWsServerFactoryBean.create() line: 160
>> >  >       Main.main(String[]) line: 19
>> >  > [/CODE]
>> >
>> >  --
>> >  J. Daniel Kulp
>> >  Principal Engineer, IONA
>> >  dkulp@apache.org
>> >  http://www.dankulp.com/blog
> 
> 
> 
> -- 
> J. Daniel Kulp
> Principal Engineer, IONA
> dkulp@apache.org
> http://www.dankulp.com/blog
> 
> 

-- 
View this message in context: http://www.nabble.com/cxf-Autowiring-in-OSGI-tp16971724p16992318.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: cxf Autowiring in OSGI

Posted by Peter Gardfjell <pe...@gmail.com>.

Hi guys,

I have actually packaged CXF (and a subset of its dependencies) as an OSGi
bundle and used it from another (service) bundle that is not managed by
Spring DM. As far as I can tell, everything works well. I used the Bnd
bundling tool to generate the bundle and its OSGi manifest headers. Or,
rather, I used the maven-bundle-plugin (which is a Maven plugin that wraps
the Bnd tool). Initially, I also experienced problems similar to the one
described by Dave. As it turned out, the problems were caused by my bundle
not making META-INF/cxf and META-INF/services available to other bundles.
Hence, I needed to add META-INF.cxf and META-INF.services to the CXF
bundle's Export-Package manifest header.

Although I intend to use Spring DM, I have only tested it with a service
bundle that was _not_ wired up by Spring DM. That is, I register my web
service with the (standard JAX-WS) Endpoint.publish() method. CXF fires up
its engine, the service is published, and I can invoke it from client code.
Everything seems to be working just fine. However, I haven't tested it
extensively yet.

For what it's worth, the maven build file (pom.xml) is provided below. As
you can see, I have chosen to strip down the CXF bundle by excluding some of
its dependencies that I either did not need or chose to provide in separate
OSGi bundles. I guess the instructions passed to the maven-bundle-plugin may
be of interest. (As a side-note, I looked at the ServiceMix bundling of CXF
when I wrote this build file). As I'm a novice, both when it comes to OSGi
and maven, I would appreciate if you would care to comment any potential
problems you see with the bundling.

cheers, Peter

-------------------------------
<?xml version="1.0"?>
<project>

  <!-- Generates an OSGi bundle for the Apache CXF implementation
       of the JAX-WS specification. The build works but generates
       build errors due to (forced) classpath entries that are not
       "approved" by the Bnd tool. This error is, however, 
       supressed to make sure that a bundle is created anyway. -->

  <modelVersion>4.0.0</modelVersion>
  <groupId>cxf.osgi</groupId>
  <artifactId>cxf.osgi</artifactId>
  <name>Apache CXF OSGi bundle</name>
  <version>2.1</version>
  <packaging>bundle</packaging>

  <dependencies>
      <dependency>
          <groupId>org.apache.cxf</groupId>
          <artifactId>cxf-bundle</artifactId>
          <version>2.1</version>
          <exclusions>
              <!-- No WS-Security support -->
              <exclusion>
                  <groupId>bouncycastle</groupId>
                  <artifactId>bcprov-jdk14</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>xalan</groupId>
                  <artifactId>xalan</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>org.apache.ws.security</groupId>
                  <artifactId>wss4j</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>xml-security</groupId>
                  <artifactId>xmlsec</artifactId>
              </exclusion>
              <!-- Exclude log4j (provided by Spring DM) -->
              <exclusion>
                  <groupId>log4j</groupId>
                  <artifactId>log4j</artifactId>
              </exclusion>             
              <!-- Exclude spring (provided by platform) -->
              <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-beans</artifactId>
              </exclusion>             
              <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-context</artifactId>
              </exclusion>             
              <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-web</artifactId>
              </exclusion>             
              <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-core</artifactId>
              </exclusion>             
              <!-- No Aegis support -->
              <exclusion>
                  <groupId>jaxen</groupId>
                  <artifactId>jaxen</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>stax-utils</groupId>
                  <artifactId>stax-utils</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>jdom</groupId>
                  <artifactId>jdom</artifactId>
              </exclusion>
              <!-- No JAX-RS support included -->
              <exclusion>
                  <groupId>javax.ws.rs</groupId>
                  <artifactId>jsr311-api</artifactId>
              </exclusion>             
              <exclusion>
                  <groupId>org.codehaus.jettison</groupId>
                  <artifactId>jettison</artifactId>
              </exclusion>             
              <exclusion>
                  <groupId>org.apache.abdera</groupId>
                  <artifactId>abdera-core</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>org.apache.abdera</groupId>
                  <artifactId>abdera-extensions-main</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>org.apache.abdera</groupId>
                  <artifactId>abdera-parser</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>org.apache.abdera</groupId>
                  <artifactId>abdera-server</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>org.apache.abdera</groupId>
                  <artifactId>abdera-extensions-html</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>org.apache.abdera</groupId>
                  <artifactId>abdera-extensions-json</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>org.apache.abdera</groupId>
                  <artifactId>abdera-i18n</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>org.apache.ws.commons.axiom</groupId>
                  <artifactId>axiom-api</artifactId>
              </exclusion>              
              <exclusion>
                  <groupId>org.apache.ws.commons.axiom</groupId>
                  <artifactId>axiom-impl</artifactId>
              </exclusion>              
              <!-- Exclude JMS transport support -->
              <exclusion>
                  <groupId>org.apache.geronimo.specs</groupId>
                  <artifactId>geronimo-jms_1.1_spec</artifactId>
              </exclusion>                            
              <!-- Exclude CORBA support -->
              <exclusion>
                  <groupId>antlr</groupId>
                  <artifactId>antlr</artifactId>
              </exclusion>                            
              <!-- Exclude dependencies needed for Java2WSDL and WSDL2Java
-->
              <exclusion>
                  <groupId>velocity</groupId>
                  <artifactId>velocity</artifactId>
              </exclusion>                                          
              <exclusion>
                  <groupId>velocity</groupId>
                  <artifactId>velocity-dep</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>com.sun.xml.bind</groupId>
                  <artifactId>jaxb-xjc</artifactId>
              </exclusion>
              <!-- Exclude xmlbeans dependency -->
              <exclusion>
                  <groupId>org.apache.xmlbeans</groupId>
                  <artifactId>xmlbeans</artifactId>
              </exclusion>              
              <!-- Exclude mozilla javascript lib -->
              <exclusion>
                  <groupId>rhino</groupId>
                  <artifactId>js</artifactId>
              </exclusion>              
              <!-- Exclude ant lib -->
              <exclusion>
                  <groupId>ant</groupId>
                  <artifactId>ant</artifactId>
              </exclusion>              
              <exclusion>
                  <groupId>ant</groupId>
                  <artifactId>ant-nodeps</artifactId>
              </exclusion>              
              <!-- Exclude commons-logging (provide as a separate target
platform bundle) -->
              <exclusion>
                  <groupId>commons-logging</groupId>
                  <artifactId>commons-logging</artifactId>
              </exclusion>              
              <!-- Exclude jetty (provide as a target platform bundle
instead) -->
              <exclusion>
                  <groupId>org.mortbay.jetty</groupId>
                  <artifactId>jetty</artifactId>
              </exclusion>                            
              <exclusion>
                  <groupId>org.mortbay.jetty</groupId>
                  <artifactId>jetty-util</artifactId>
              </exclusion>                            
              <!-- Exclude asm (provided via Spring DM as a separate bundle
in the target platform) -->
              <exclusion>
                  <groupId>asm</groupId>
                  <artifactId>asm</artifactId>
              </exclusion>                            
              <!-- Exclude aopalliance (provided via Spring DM as a separate
bundle in the target platform) -->
              <exclusion>
                  <groupId>aopalliance</groupId>
                  <artifactId>aopalliance</artifactId>
              </exclusion>                            
          </exclusions>
      </dependency>
  </dependencies>

  <!-- TODO: take a look at what repositories should be used. -->
  <repositories>
    <!-- Default repository -->
    <repository>
       <id>central</id>
       <name>Default maven repo</name>
       <url>http://repo1.maven.org/maven2</url>
    </repository>
    <repository>    
      <id>apache.org.snapshot</id>
      <name>apache.org.snapshot</name>
      <url>http://people.apache.org/repo/m2-snapshot-repository</url>
    </repository>  
    <repository>    
      <id>apache.org.incubator</id>
      <name>apache.org.incubator</name>
      <url>http://people.apache.org/repo/m2-incubating-repository</url>
    </repository>  
    <repository>
        <id>java.net</id>
        <name>java.net Maven Repository</name>
        <url>http://download.java.net/maven/1/</url>
        <layout>legacy</layout>
        <releases>
             <enabled>true</enabled>
        </releases>
        <snapshots>
           <enabled>false</enabled>
        </snapshots>
    </repository>
    <!-- To get jsr173.jar and jsr173-ri.jar -->
    <repository>    
      <id>servicemix.repository</id>
      <name>servicemix.repository</name>
      <url>http://svn.apache.org/repos/asf/servicemix/m2-repo</url>
    </repository>  
  </repositories>

  <properties>
    <!-- Bundle manifest properties -->
    <bundle.symbolic.name>${groupId}</bundle.symbolic.name>
    <bundle.description>Apache CXF OSGi bundle</bundle.description>
    <!-- Need to export META-INF/cxf directory to make CXF configuration 
         files available. Also, META-INF/services, which contain
         service provider declarations, needs to be exported. -->
    <export.package>!1.0*, javax.jws*;version=2.0,
*;-split-package:=merge-first, '=META-INF.cxf',
'=META-INF.services'</export.package>
    <import.package>org.apache.commons.logging*, org.xml.*, org.w3c*,
org.mortbay*, *;resolution:=optional</import.package>
    <dynamic.import.package>*</dynamic.import.package>
  </properties>

  <build>
    <plugins>
      <!-- maven-bundle-plugin configuration -->
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>1.4.0</version>
        <extensions>true</extensions>
        <configuration>
          <manifestLocation>META-INF</manifestLocation>
          <instructions>
           
<Bundle-SymbolicName>${bundle.symbolic.name}</Bundle-SymbolicName>
            <Bundle-Description>${bundle.description}</Bundle-Description>
            <Bundle-Activator>${bundle.activator.class}</Bundle-Activator>
            <Export-Package>${export.package}</Export-Package>
            <Private-Package>${private.package}</Private-Package>
            <Import-Package>${import.package}</Import-Package>
           
<DynamicImport-Package>${dynamic.import.package}</DynamicImport-Package>
            <!-- The bundle plugin does not like us explicitly adding
                 META-INF/cxf and META-INF/services to the bundle's
                 set of exported packages. This instruction prevents
                 the bundling from failing. -->
            <_failok>true</_failok>
          </instructions>
        </configuration>
      </plugin>

      <!-- configure manifest generation plugin -->
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <executions>
          <execution>
            <id>bundle-manifest</id>
            <phase>process-classes</phase>
            <goals>
              <goal>manifest</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>    


</project>








gnodet wrote:
> 
> Here's what we came up with so far:
>    
> http://servicemix.apache.org/SMX4/cxf-examples.html#CXFexamples-Insidetheexample
> 
> if you really want to use the non spring configuration, the best way
> to avoid classloader issues may be to embed cxf and its dependencies
> inside a single bundle along with your services.
> 
> On Wed, Apr 30, 2008 at 4:06 PM, Daniel Kulp <dk...@apache.org> wrote:
>>
>>  Dave,
>>
>>
>>  Guillaume Nodet definitely has more experience with the OSGi stuff.  In
>>  generaly, we've seen success using the Spring Dynamic Module stuff with
>>  OSGi as you can import the cxf stuff you need in the spring module and
>>  the bus gets wired up correctly.   (in 2.0.6/2.1, we even added a
>>  cxf-all.xml that you can import to grab everything, but thats probably
>>  more than you need)
>>
>>  I'm not sure if anyone not using spring-dm has gotten anything to work.
>>  One option MAY be to call SpringBusFactory.createBus() yourself first to
>>  cause the Bus to be created with spring.  Not sure if that works though
>>  as I'm not sure if it will find all the spring config files or not.
>>
>>  Dan
>>
>>
>>
>>
>>
>>  On Tuesday 29 April 2008, Dave Brosius wrote:
>>  > OK, this code is failing in OSGI
>>  >
>>  > BusFactory.getBusFactoryClass
>>  >
>>  > specifically, it tries to load the file
>>  >
>>  > META-INF/services/org.apache.cxf.bus.factory
>>  >
>>  > and fails.
>>  >
>>  > [CODE]
>>  > private static String getBusFactoryClass(ClassLoader classLoader) {
>>  >
>>  >         String busFactoryClass = null;
>>  >         String busFactoryCondition = null;
>>  >
>>  >         // next check system properties
>>  >         busFactoryClass =
>>  > System.getProperty(BusFactory.BUS_FACTORY_PROPERTY_NAME); if
>>  > (isValidBusFactoryClass(busFactoryClass)) {
>>  >             return busFactoryClass;
>>  >         }
>>  >
>>  >         try {
>>  >             // next, check for the services stuff in the jar file
>>  >             String serviceId = "META-INF/services/" +
>>  > BusFactory.BUS_FACTORY_PROPERTY_NAME; InputStream is = null;
>>  >
>>  >             if (classLoader == null) {
>>  >                 classLoader =
>>  > Thread.currentThread().getContextClassLoader(); }
>>  >
>>  >             if (classLoader == null) {
>>  >                 is = ClassLoader.getSystemResourceAsStream(serviceId);
>>  >             } else {
>>  >                 is = classLoader.getResourceAsStream(serviceId);
>>  >             }
>>  >             if (is != null) {
>>  >                 BufferedReader rd = new BufferedReader(new
>>  > InputStreamReader(is, "UTF-8")); busFactoryClass = rd.readLine();
>>  >                 busFactoryCondition = rd.readLine();
>>  >                 rd.close();
>>  >             }
>>  >             if (isValidBusFactoryClass(busFactoryClass)) {
>>  >                 if (busFactoryCondition != null) {
>>  >                     try {
>>  >                         classLoader.loadClass(busFactoryCondition);
>>  >                         return busFactoryClass;
>>  >                     } catch (ClassNotFoundException e) {
>>  >                         return DEFAULT_BUS_FACTORY;
>>  >                     }
>>  >                 } else {
>>  >                     return busFactoryClass;
>>  >                 }
>>  >             }
>>  >
>>  >             // otherwise use default
>>  >             busFactoryClass = BusFactory.DEFAULT_BUS_FACTORY;
>>  >             return busFactoryClass;
>>  >         } catch (Exception ex) {
>>  >             LogUtils.log(LOG, Level.SEVERE,
>>  > "FAILED_TO_DETERMINE_BUS_FACTORY_EXC", ex); }
>>  >         return busFactoryClass;
>>  >     }
>>  > [/CODE]
>>  >
>>  >
>>  > -----Original Message-----
>>  > From: Dave Brosius <db...@apache.org>
>>  > Sent: Tuesday, April 29, 2008 6:27pm
>>  > To: users@cxf.apache.org
>>  > Cc: dave@mebigfatguy.com
>>  > Subject: RE: cxf Autowiring in OSGI
>>  >
>>  > Here's the difference: Can anyone help me with why this is so?
>>  >
>>  > In OSGI, createBus creates a CXFBusFactory
>>  >
>>  > Thread [SpringOsgiExtenderThread-2] (Suspended)
>>  >       CXFBusFactory.createBus() line: 32
>>  >       BusFactory.getDefaultBus(boolean) line: 69
>>  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>>  >       BusFactory.getThreadDefaultBus() line: 97
>>  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus() line:
>> 73
>>  >      
>> JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initializeSe
>>  >rviceFactory() line: 143
>>  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEndpoin
>>  >t() line: 73 JaxWsServerFactoryBean(ServerFactoryBean).create() line:
>>  > 113 JaxWsServerFactoryBean.create() line: 160
>>  >       EchoInstaller.init() line: 23
>>  >       NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line:
>> not
>>  > available [native method] NativeMethodAccessorImpl.invoke(Object,
>>  > Object[]) line: 39
>>  >       DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
>>  >       Method.invoke(Object, Object...) line: 585
>>  >      
>> DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).invoke
>>  >CustomInitMethod(String, Object, String, boolean) line: 1378
>>  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).invokeI
>>  >nitMethods(String, Object, RootBeanDefinition) line: 1339
>>  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).initial
>>  >izeBean(String, Object, RootBeanDefinition) line: 1299
>>  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreat
>>  >eBean(String, RootBeanDefinition, Object[]) line: 463
>>  > AbstractAutowireCapableBeanFactory$1.run() line: 404
>>  >       AccessController.doPrivileged(PrivilegedAction<T>) line: not
>>  > available [native method]
>>  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createB
>>  >ean(String, RootBeanDefinition, Object[]) line: 375
>>  > AbstractBeanFactory$1.getObject() line: 263
>>  >      
>> DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton
>>  >(String, ObjectFactory) line: 170
>>  > DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
>>  > Class, Object[], boolean) line: 260
>>  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class,
>>  > Object[]) line: 184
>>  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line:
>>  > 163 DefaultListableBeanFactory.preInstantiateSingletons() line: 430
>>  > OsgiBundleXmlApplicationContext(AbstractApplicationContext).finishBean
>>  >FactoryInitialization(ConfigurableListableBeanFactory) line: 729
>>  > OsgiBundleXmlApplicationContext(AbstractDelegatedExecutionApplicationC
>>  >ontext).completeRefresh() line: 268
>>  > DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run()
>>  > line: 142
>>  > DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run()
>>  > line: 142 Thread.run() line: 595
>>  >
>>  >
>>  > In standard mode, createBus creates a SpringBusFactory
>>  >
>>  > Thread [main] (Suspended (breakpoint at line 54 in SpringBusFactory))
>>  >       SpringBusFactory.createBus() line: 54
>>  >       BusFactory.getDefaultBus(boolean) line: 69
>>  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>>  >       BusFactory.getThreadDefaultBus() line: 97
>>  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus() line:
>> 73
>>  >      
>> JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initializeSe
>>  >rviceFactory() line: 143
>>  > JaxWsServerFactoryBean(ServerFactoryBean).initializeServiceFactory()
>>  > line: 149
>>  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEndpoin
>>  >t() line: 73 JaxWsServerFactoryBean(ServerFactoryBean).create() line:
>>  > 113 JaxWsServerFactoryBean.create() line: 160
>>  >       Main.main(String[]) line: 19
>>  >
>>  >
>>  >
>>  >
>>  > -----Original Message-----
>>  > From: Dave Brosius <db...@apache.org>
>>  > Sent: Tuesday, April 29, 2008 6:15pm
>>  > To: users@cxf.apache.org
>>  > Cc: dave@mebigfatguy.com
>>  > Subject: cxf Autowiring in OSGI
>>  >
>>  > I am having trouble getting cxf to work in osgi. The problem is that
>>  > it appears that there are no factories registered for the various
>>  > namespaces needed such as http://schemas.xmlsoap.org/soap/http
>>  >
>>  >
>>  > When run in normal mode (not osgi), I see these namespaces being
>>  > registered (in the below stack trace). In OSGI this isn't happening
>>  > and so it fails in JaxWsServerFactoryBean.createBindingInfo. Does
>>  > anyone have any ideas about how to fix this?
>>  >
>>  >
>>  > [CODE]
>>  > Thread [main] (Suspended (breakpoint at line 79 in
>>  > DestinationFactoryManagerImpl))
>>  > DestinationFactoryManagerImpl.registerDestinationFactory(String,
>>  > DestinationFactory) line: 79
>>  > JettyHTTPTransportFactory.finalizeConfig() line: 68
>>  >       NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line:
>> not
>>  > available [native method] NativeMethodAccessorImpl.invoke(Object,
>>  > Object[]) line: 39
>>  >       DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
>>  >       Method.invoke(Object, Object...) line: 585
>>  >       ResourceInjector.invokePostConstruct() line: 305
>>  >       ResourceInjector.construct(Object) line: 86
>>  >       Jsr250BeanPostProcessor.postProcessAfterInitialization(Object,
>>  > String) line: 58
>>  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyBe
>>  >anPostProcessorsAfterInitialization(Object, String) line: 357
>>  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).initial
>>  >izeBean(String, Object, RootBeanDefinition) line: 1308
>>  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreat
>>  >eBean(String, RootBeanDefinition, Object[]) line: 463
>>  > AbstractAutowireCapableBeanFactory$1.run() line: 404
>>  >       AccessController.doPrivileged(PrivilegedAction<T>) line: not
>>  > available [native method]
>>  > DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createB
>>
>> >ean(String, RootBeanDefinition, Object[]) line: 375
>>  > AbstractBeanFactory$1.getObject() line: 263
>>  >      
>> DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton
>>  >(String, ObjectFactory) line: 170
>>  > DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
>>  > Class, Object[], boolean) line: 260
>>  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class,
>>  > Object[]) line: 184
>>  > DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line:
>>  > 163 DefaultListableBeanFactory.preInstantiateSingletons() line: 430
>>  > BusApplicationContext(AbstractApplicationContext).finishBeanFactoryIni
>>  >tialization(ConfigurableListableBeanFactory) line: 729
>>  > BusApplicationContext(AbstractApplicationContext).refresh() line: 381
>>  > BusApplicationContext.<init>(String[], boolean, ApplicationContext)
>>  > line: 86 SpringBusFactory.createBus(String[], boolean) line: 93
>>  >       SpringBusFactory.createBus(String, boolean) line: 87
>>  >       SpringBusFactory.createBus(String) line: 65
>>  >       SpringBusFactory.createBus() line: 54
>>  >       BusFactory.getDefaultBus(boolean) line: 69
>>  >       BusFactory.getThreadDefaultBus(boolean) line: 106
>>  >       BusFactory.getThreadDefaultBus() line: 97
>>  >       JaxWsServerFactoryBean(AbstractEndpointFactory).getBus() line:
>> 73
>>  >      
>> JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).initializeSe
>>
>> >rviceFactory() line: 143
>>  > JaxWsServerFactoryBean(ServerFactoryBean).initializeServiceFactory()
>>  > line: 149
>>  > JaxWsServerFactoryBean(AbstractWSDLBasedEndpointFactory).createEndpoin
>>
>>
>> >t() line: 73 JaxWsServerFactoryBean(ServerFactoryBean).create() line:
>>  > 113 JaxWsServerFactoryBean.create() line: 160
>>  >       Main.main(String[]) line: 19
>>  > [/CODE]
>>
>>
>>
>>  --
>>  J. Daniel Kulp
>>  Principal Engineer, IONA
>>  dkulp@apache.org
>>  http://www.dankulp.com/blog
>>
> 
> 
> 
> -- 
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> 
> 

-- 
View this message in context: http://www.nabble.com/cxf-Autowiring-in-OSGI-tp16971724p17023794.html
Sent from the cxf-user mailing list archive at Nabble.com.