I'm currently having problems creating and running a CXF client within
Servicemix 4. I've spent
quite some time reading posts and other information on the Internet,
and
while others have
apparently run into a similar problem, I haven't seen anything
that's in the
same context as what
I am doing. What I'm trying to do is to create a Camel component
which
among other things invokes an external web service using CXF. Using
CXF
alone is not a problem, however, getting all of Servicemix
4/Camel/OSGi/Spring DM working together is not so easy. Perhaps
someone can
shed some light on what
I am missing, or point me to a working example of something similar
to what
I am doing. I've looked
through both the Servicemix 4 and CXF examples, but none are close
enough to
what I am doing to be
of much help.
Let me start with the beans.xml file. It looks like the following:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ctx="http://www.springframework.org/schema/context"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:osgix="http://www.springframework.org/schema/osgi-compendium"
xmlns:camel-osgi="http://camel.apache.org/schema/osgi"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-
beans-2.0.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.springframework.org/schema/osgi-compendium
http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-
context.xsd
http://camel.apache.org/schema/osgi
http://camel.apache.org/schema/osgi/camel-osgi.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<!-- I added these in, but they just caused more NamespaceHandler
problems
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-http.xml" />
<import resource="classpath:META-INF/cxf/osgi/cxf-extension-
osgi.xml" />
-->
<bean id="proxyFactory"
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass"
value="com.myorg.ports.DEMOPortType"/>
<property name="address" value="http://localhost:9002/DEMO"/>
</bean>
<bean id="client" class="com.myorg.ports.DEMOPortType"
factory-bean="proxyFactory" factory-method="create"/>
<camel-osgi:camelContext xmlns="http://camel.apache.org/schema/
spring">
<route>
<from
uri="demo://route-test-demo?demoEndpointAddress=https://localhost:7443/DEMO
"
/>
<to uri="file:///C:/WSMR/C2GW/test/c2gw-pass" />
</route>
</camel-osgi:camelContext>
</beans>
My POM Import-Package are as follows:
<Import-Package>
org.apache.commons.logging,
org.apache.commons.digester;version="2.0",
org.apache.commons.configuration;version="1.6",
org.apache.commons.io;version="1.4",
javax.jws.*,
javax.xml.*,
javax.net.*,
javax.wsdl,
META-INF.cxf,
META-INF.cxf.osgi,
javax.xml.transform,
javax.xml.soap,
org.w3c.dom,
org.xml.sax,
org.apache.camel,
org.apache.camel.model,
org.apache.camel.spi,
org.apache.camel.builder,
org.apache.camel.language,
org.apache.camel.spring.handler,
org.apache.cxf,
org.apache.cxf.io,
org.apache.cxf.frontend,
org.apache.cxf.configuration.jsse,
org.apache.cxf.message,
org.apache.cxf.helpers,
org.apache.cxf.interceptor,
org.apache.cxf.binding.soap,
org.apache.cxf.binding.soap.interceptor,
org.apache.cxf.bus,
org.apache.cxf.jaxws,
org.apache.cxf.bus.resource,
org.apache.cxf.bus.spring,
org.apache.cxf.buslifecycle,
org.apache.cxf.catalog,
org.apache.cxf.configuration.spring,
org.apache.cxf.endpoint,
org.apache.cxf.headers,
org.apache.cxf.phase,
org.apache.cxf.resource,
org.apache.cxf.transport,
org.apache.cxf.transport.http,
org.apache.cxf.workqueue,
org.apache.cxf.wsdl11,
org.apache.cxf.transport.https,
org.apache.servicemix.cxf.transport.http_osgi,
org.apache.cxf.transport.http_jetty,
org.osgi.framework,
org.springframework.beans.factory.config,
*
</Import-Package>
When I start the bundle, I get the following error output on the Karaf
console:
org
.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: Unable to locate Spring NamespaceHandler for
XML
schema namespace [http://camel.apache.org/schema/osgi]
Offending resource: class path resource [META-INF/spring/beans.xml]
at
org
.springframework
.beans
.factory
.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:
68)
at
org
.springframework
.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at
org
.springframework
.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
at
org
.springframework
.beans
.factory
.xml
.BeanDefinitionParserDelegate
.error(BeanDefinitionParserDelegate.java:281)
at
org
.springframework
.beans
.factory
.xml
.BeanDefinitionParserDelegate
.parseCustomElement(BeanDefinitionParserDelegate.java:1294)
at
org
.springframework
.beans
.factory
.xml
.BeanDefinitionParserDelegate
.parseCustomElement(BeanDefinitionParserDelegate.java:1287)
at
org
.springframework
.beans
.factory
.xml
.DefaultBeanDefinitionDocumentReader
.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.jav
a:135)
at
org
.springframework
.beans
.factory
.xml
.DefaultBeanDefinitionDocumentReader
.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.
java:92)
at
org
.springframework
.beans
.factory
.xml
.XmlBeanDefinitionReader
.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
at
org
.springframework
.beans
.factory
.xml
.XmlBeanDefinitionReader
.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
at
org
.springframework
.beans
.factory
.xml
.XmlBeanDefinitionReader
.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
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
.beans
.factory
.support
.AbstractBeanDefinitionReader
.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at
org
.springframework
.beans
.factory
.support
.AbstractBeanDefinitionReader
.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at
org
.springframework
.beans
.factory
.support
.AbstractBeanDefinitionReader
.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
at
org
.springframework
.context
.support
.AbstractXmlApplicationContext
.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
at
org
.springframework
.context
.support
.AbstractXmlApplicationContext
.loadBeanDefinitions(AbstractXmlApplicationContext.java:80)
at
org
.springframework
.context
.support
.AbstractRefreshableApplicationContext
.refreshBeanFactory(AbstractRefreshableApplicationContext.jav
a:123)
at
org
.springframework
.context
.support
.AbstractApplicationContext
.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
at
org
.springframework
.context
.support
.AbstractApplicationContext.refresh(AbstractApplicationContext.java:
352)
at
org
.springframework
.context
.support
.ClassPathXmlApplicationContext
.<init>(ClassPathXmlApplicationContext.java:139)
at
org
.springframework
.context
.support
.ClassPathXmlApplicationContext
.<init>(ClassPathXmlApplicationContext.java:93)
:
:
So, one of the questions is, is the camel-spring-osgi bundle running
in
Servicemix?
Here's the output from osgi:list command:
ka...@root> list |grep -i camel
[ 98] [Active ] [ ] [ ] [ 60] camel-core
(2.2.0.fuse-01-00)
[ 100] [Active ] [ ] [ ] [ 60] camel-spring-
osgi
(2.2.0.fuse-01-00)
[ 130] [Active ] [ ] [ ] [ 60] camel-cxf
(2.2.0.fuse-01-00)
[ 156] [Active ] [ ] [ ] [ 60] camel-jms
(2.2.0.fuse-01-00)
[ 169] [Active ] [ ] [ ] [ 60] ServiceMix ::
Camel
(2010.01.0.fuse-01-00)
[ 180] [Active ] [ ] [ ] [ 60] Apache
ServiceMix
Camel Component (4.2.0.fuse-01-00)
[ 190] [Active ] [ ] [ ] [ 60] camel-jxpath
(2.2.0.fuse-01-00)
ka...@root>
So, it appears that the camel-spring-osgi bundle is present.
Perhaps I need to include additional Import-Package? But if so, do I
need to
do this for
every namespace? As I mentioned earlier when I added the additional
imports
into my
beans.xml I get additional errors with reagards to finding
NamespaceHandlers.
I've been working on this for some time now, getting a bit
frustrated and
thinking why does it
need to be so difficult? If anyone has encountered this problem and
can
explain to me how to
correct it, it would be much appreciated. Failing that, if someone
has a
working example of a
CXF client/server working in Servicemix 4, that would be appreciated
as
well.
Thanks.
-T
--
View this message in context:
http://servicemix.396122.n5.nabble.com/Servicemix-4-CXF-Unable-to-locate-Spring-NamespaceHandler-tp1842459p1842459.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.