Hello,

I am trying to create a wsdl-first web service as OSGi bundle.

To start I am using the wsdl-first CustomerService example
from CXF. I created the web service source code with
'wsdl2java -wsdlLocation CustomerService.wsdl -d src\java -server -impl
src\resource\CustomerService.wsdl',
implemented some testing stuff in the stubs and packed the project as
OSGi-enabled Jar.  After a lot try and error, I managed to get a deployable
bundle that starts the web service. That means, I can request the wsdl with
my
browser.

But when I build the client with wsdl2java and try to invoke some methods of
the
service, I get Exceptions (see below).

I am using the following environment:
CXF 2.2.9
CXF DOSGi ri-1.2
Spring DM for OSGi 1.2.1
Equinox 3.3
Sun Java 1.6.0_21


This is my MANIFEST.MF (the next step will be to use Spring instead of the
Activator):
> Manifest-Version: 1.0
> Bundle-ManifestVersion: 2
> Bundle-Name: CustomerServiceServer
> Bundle-SymbolicName: CustomerServiceServer
> Bundle-Version: 0.9.9.alpha
> Import-Package: org.osgi.framework;version="1.3.0",
>  javax.imageio,
>  javax.management,
>  javax.management.modelmbean,
>  javax.xml.datatype,
>  javax.xml.namespace,
>  javax.xml.parsers,
>  javax.xml.stream,
>  javax.xml.stream.events,
>  javax.xml.transform,
>  javax.xml.transform.sax,
>  javax.xml.transform.dom,
>  javax.xml.ws,
>  javax.xml.ws.wsaddressing,
>  javax.xml.ws.spi,
>  javax.jws,
>  javax.wsdl,
>  org.w3c.dom,
>  org.xml.sax,
>  org.mortbay.jetty.handler,
>  org.apache.cxf.jaxws.spi,
>  META-INF.cxf,
>  META-INF.cxf.osgi,
>  org.apache.cxf.wsdl,
>  org.apache.cxf.wsdl11,
>  org.apache.cxf.phase,
>  org.apache.cxf.workqueue,
>  org.apache.cxf.buslifecycle,
>  org.apache.cxf.endpoint,
>  org.apache.cxf.headers,
>  org.apache.cxf.catalog,
>  org.apache.cxf.binding.soap,
>  org.apache.cxf.transport.http.policy,
>  org.apache.cxf.transport.http,
>  org.apache.cxf.transport.http_jetty,
>  org.apache.cxf.transports.http,
>  org.apache.cxf.management,
>  org.apache.cxf.management.jmx,
>  org.apache.cxf.binding,
>  org.apache.cxf.binding.soap.spring,
>  org.apache.cxf.transport,
>  org.apache.cxf.bus, 
>  org.apache.cxf.bus.spring,
>  org.apache.cxf.bus.resource, 
>  org.apache.cxf.configuration.spring, 
>  org.apache.cxf.resource,
>  org.springframework.beans.factory.config;version=2.5.6
> Bundle-RequiredExecutionEnvironment: JavaSE-1.6
> Bundle-Activator: com.example.customerservice.osgi.Activator


This is my Equinox configuration. I am using a mixture of bundles from CXF
DOSGi and Spring DM:
> osgi.bundles=com.springsource.org.aopalliance-1.0.0....@start, \
>  com.springsource.slf4j.api-1.5.0....@start, \
>  com.springsource.slf4j.log4j-1.5.0.jar, \
>  com.springsource.slf4j.org.apache.commons.logging-1.5.0....@start, \
>  log4j.osgi-1.2.15-snapshot....@start, \
>  org.eclipse.equinox.common_3.3.0.v20070426....@start, \
>  org.eclipse.osgi.services_3.1.200.v20070605....@start, \
>  org.eclipse.osgi_3.3.0.v20070530....@start, \
>  org.springframework.aop-2.5.6.sec01....@start, \
>  org.springframework.beans-2.5.6.sec01....@start, \
>  org.springframework.context-2.5.6.sec01....@start, \
>  org.springframework.core-2.5.6.sec01....@start, \
>  spring-osgi-core-1.2.1....@start, \
>  spring-osgi-extender-1.2.1....@start, \
>  spring-osgi-io-1.2.1....@start, \
>  org.apache.servicemix.bundles.asm-2.2.3_1....@start, \
>  org.apache.servicemix.bundles.commons-pool-1.5.4_1....@start, \
>  org.apache.servicemix.bundles.jaxb-impl-2.1.6_1....@start, \
>  org.apache.servicemix.bundles.neethi-2.0.4_1....@start, \
>  org.apache.servicemix.bundles.wsdl4j-1.6.1_1....@start, \
>  org.apache.servicemix.bundles.xmlresolver-1.2_1....@start, \
>  org.apache.servicemix.bundles.xmlschema-1.4.3_1....@start, \
>  org.apache.servicemix.specs.jaxb-api-2.1-1.3.0....@start, \
>  org.apache.servicemix.specs.jaxws-api-2.1-1.3.0....@start, \
>  org.apache.servicemix.specs.saaj-api-1.3-1.3.0....@start, \
>  org.apache.servicemix.specs.stax-api-1.0-1.3.0....@start, \
>  geronimo-activation_1.1_spec-1.0.2....@start, \
>  geronimo-annotation_1.0_spec-1.1.1....@start, \
>  geronimo-javamail_1.4_spec-1.2....@start, \
>  geronimo-ws-metadata_2.0_spec-1.1.2....@start, \
>  cxf-bundle-minimal-2.2.9....@start, \
>  com.springsource.javax.servlet-2.5.0....@start, \
>  jetty-6.1.21....@start, \
>  jetty-util-6.1.21....@start, \
>  org.springframework.osgi.log4j.config_1.0.0.jar, \
>  customerservice....@start
> 
> org.osgi.framework.system.packages= \
>  javax.imageio, \
>  javax.imageio.stream, \
>  javax.management, \
>  javax.management.modelmbean, \
>  javax.management.remote, \
>  javax.naming, \
>  javax.net.ssl, \
>  javax.security.auth, \
>  javax.security.auth.callback, \
>  javax.security.auth.x500, \
>  javax.security.cert, \
>  javax.transaction.xa, \
>  javax.xml.datatype, \
>  javax.xml.namespace, \
>  javax.xml.parsers, \
>  javax.xml.stream, \
>  javax.xml.transform, \
>  javax.xml.transform.dom, \
>  javax.xml.transform.sax, \
>  javax.xml.transform.stream, \
>  javax.xml.validation, \
>  javax.xml.ws.spi, \
>  javax.xml.xpath, \
>  org.w3c.dom, \
>  org.w3c.dom.bootstrap, \
>  org.w3c.dom.ls, \
>  org.xml.sax, \
>  org.xml.sax.ext, \
>  org.xml.sax.helpers
> 
> org.osgi.framework.bootdelegation= \
>  javax.xml.bind, \
>  javax.xml.ws
> # javax.xml.bind.attachment
> # org.apache.cxf.jaxb.attachment
> 
> eclipse.ignoreApp=true


Equinox is started as follow:
> java -Djavax.xml.ws.spi.Provider="org.apache.cxf.jaxws.spi.ProviderImpl"
> -jar org.eclipse.osgi_3.3.0.v20070530.jar -console -clean


When I start OSGi, the CustomerService is started automatically and the web
service is available. The wsdl is also in the folder where I start equinox.
I failed to have it read from classpath within the Jar. I can request the
wsdl by browser with http://localhost:9090/CustomerServicePort?wsdl.
The only thing I could see in the log that does not work proper is:
> org.springframework.beans.factory.BeanDefinitionStoreException:
> IOException parsing XML document from class path resource
> [META-INF/cxf/cxf.xml]; nest
> ed 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.BusFactory.getDefaultBus(BusFactory.java:69)
>         at
> org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:106)
>         at
> org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:97)
>         at
> org.apache.cxf.jaxws.spi.ProviderImpl.createEndpoint(ProviderImpl.java:86)
>         at
> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:109)
>         at javax.xml.ws.Endpoint.publish(Unknown Source)
>         at
> com.example.customerservice.CustomerService_CustomerServicePort_Server.<init>(CustomerService_CustomerServicePort_Server.java:19)
>         at
> com.example.customerservice.osgi.Activator.start(Activator.java:37)
>         at
> org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:999)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at
> org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993)
>         at
> org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)
>         at
> org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
>         at
> org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:350)
>         at
> org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1118)
>         at
> org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:634)
>         at
> org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:508)
>         at
> org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:282)
>         at
> org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:468)
>         at
> org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195)
>         at
> org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:297)
> Caused by: java.io.FileNotFoundException: class path resource
> [META-INF/cxf/cxf.xml] cannot be opened because it does not exist
>         at
> org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:143)
>         at
> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
>         ... 35 more


But when I try to invoke a method with the client, I get the following
exception within the server:
> 31719 [16001...@qtp-30476335-0
> begin_of_the_skype_highlighting              0476335-0      end_of_the_skype_highlighting
> begin_of_the_skype_highlighting              0476335-0      end_of_the_skype_highlighting]
> WARN  org.apache.cxf.phase.PhaseInterceptorChain  - Interceptor for
> {http://customerservice.example.com/}CustomerServi
> ceService#{http://customerservice.example.com/}getCustomersByName has
> thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: Unmarshalling Error: loader constraint
> violation: loader (instance of <bootloader>) previously initiated loading
> for
>  a different type with name
> "javax/xml/bind/attachment/AttachmentUnmarshaller"
>         at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:780)
>         at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:624)
>         at
> org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128)
>         at
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109)
>         at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
>         at
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
>         at
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:312)
>         at
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:276)
>         at
> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70)
>         at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
>         at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
>         at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>         at org.mortbay.jetty.Server.handle(Server.java:326)
>         at
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
>         at
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:930)
>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:747)
>         at
> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
>         at
> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
>         at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
>         at
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> Caused by: java.lang.LinkageError: loader constraint violation: loader
> (instance of <bootloader>) previously initiated loading for a different
> type wi
> th name "javax/xml/bind/attachment/AttachmentUnmarshaller"
>         at
> com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshallerHandler(Unknown
> Source)
>         at
> com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown
> Source)
>         at
> com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown
> Source)
>         at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:755)
>         ... 19 more
> 32141 [15470...@qtp-30476335-1 - Acceptor0
> selectchannelconnec...@localhost:9090] INFO  org.mortbay.log  - seeing JVM
> BUG(s) - cancelling interestOps=
> =0


When I add javax.xml.bind.attachment (and org.apache.cxf.jaxb.attachment) to
org.osgi.framework.bootdelegation, I get the following error:
> 8109 [32697...@qtp-14875627-0] ERROR org.mortbay.log  -
> /CustomerServicePort
> java.lang.LinkageError: loader constraint violation: when resolving
> overridden method
> "org.apache.cxf.jaxb.attachment.JAXBAttachmentUnmarshaller.getAt
> tachmentAsDataHandler(Ljava/lang/String;)Ljavax/activation/DataHandler;"
> the class loader (instance of
> org/eclipse/osgi/internal/baseadaptor/DefaultCl
> assLoader) of the current class,
> org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller, and its
> superclass loader (instance of <bootloader>), have
>  different Class objects for the type javax/activation/DataHandler used in
> the signature
>         at
> org.apache.cxf.jaxb.JAXBDataBase.getAttachmentUnmarshaller(JAXBDataBase.java:78)
>         at
> org.apache.cxf.jaxb.io.DataReaderImpl.createUnmarshaller(DataReaderImpl.java:92)
>         at
> org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128)
>         at
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109)
>         at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
>         at
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
>         at
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:312)
>         at
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:276)
>         at
> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70)
>         at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
>         at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
>         at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>         at org.mortbay.jetty.Server.handle(Server.java:326)
>         at
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
>         at
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:930)
>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:747)
>         at
> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
>         at
> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
>         at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
>         at
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)


I am very grateful for any help.

Best Regards,
Markus

-- 
View this message in context: 
http://cxf.547215.n5.nabble.com/WSDL-first-CustomServer-example-as-OSGi-bundle-tp3208411p3208411.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to