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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
> > Sent: Tuesday, April 29, 2008 6:27pm
> > To: [email protected]
> > Cc: [EMAIL PROTECTED]
> > 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 <[EMAIL PROTECTED]>
> > Sent: Tuesday, April 29, 2008 6:15pm
> > To: [email protected]
> > Cc: [EMAIL PROTECTED]
> > 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
> [EMAIL PROTECTED]
> http://www.dankulp.com/blog
>
--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/