I'm trying to allow for manual creation of JAX-RS endpoints in OSGI without
the DOSGI jars. I've added a "Require-Bundle:
org.apache.cxf.bundle-minimal" header to my bundle, and I create the
endpoint like this:
CXFNonSpringServlet cxf = new CXFNonSpringServlet();
httpService.registerServlet(alias, cxf, new Hashtable<String, String>(),
httpContext);
Bus bus = cxf.getBus();
JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
factory.setBus(bus);
factory.setServiceClass(service.getClass());
factory.setResourceProvider(service.getClass(), new
SingletonResourceProvider(service));
factory.setAddress("/");
ClassLoader bundleClassLoader =
Thread.currentThread().getContextClassLoader();
ClassLoader delegateClassLoader =
JAXRSServerFactoryBean.class.getClassLoader();
try {
Thread.currentThread().setContextClassLoader(delegateClassLoader);
factory.create();
} finally {
Thread.currentThread().setContextClassLoader(bundleClassLoader);
}
This seems to function, but I get the following stack trace when I register
the servlet:
09:36:28 WARN (CXFNonSpringServlet:45) - Initial attempt to crate
application context was unsuccessful.
org.springframework.beans.factory.BeanDefinitionStoreException: IOException
parsing XML document from class path resource [META-INF/cxf/cxf.xml]; nested
exception is java.io.FileNotFoundException: class path resource
[META-INF/cxf/cxf.xml] cannot be opened because it does not exist
at
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:349)
at
org.apache.cxf.bus.spring.ControlledValidationXmlBeanDefinitionReader.loadBeanDefinitions(ControlledValidationXmlBeanDefinitionReader.java:131)
at
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at
org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:109)
at
org.apache.cxf.bus.spring.BusApplicationContext.loadBeanDefinitions(BusApplicationContext.java:262)
at
org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
at
org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at
org.apache.cxf.bus.spring.BusApplicationContext.<init>(BusApplicationContext.java:91)
at
org.apache.cxf.bus.spring.SpringBusFactory.createApplicationContext(SpringBusFactory.java:102)
at
org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:93)
at
org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:86)
at
org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:64)
at
org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:53)
at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.loadBusNoConfig(CXFNonSpringServlet.java:45)
at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.loadBus(CXFNonSpringServlet.java:38)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.init(AbstractCXFServlet.java:78)
at
org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:431)
I'm using cxf-bundle-minimal 2.2.7. Importing the META-INF.cxf package
don't seem to help. Any ideas?
Thanks,
Josh