Hi Markus,

I also had this problem. You need to import all annotation packages in your 
bundle. So simply look at the import statements in your generated code and make 
sure you also import these in the manifest.

Best Regards

Christian





Christian Schneider
Informationsverarbeitung
Business Solutions
Handel und Dispatching

Tel : +49-(0)721-63-15482

EnBW Systeme Infrastruktur Support GmbH
Sitz der Gesellschaft: Karlsruhe
Handelsregister: Amtsgericht Mannheim ­ HRB 108550
Vorsitzender des Aufsichtsrats: Dr. Bernhard Beck
Geschäftsführer: Jochen Adenau, Hans-Günther Meier


-----Ursprüngliche Nachricht-----
Von: Markus [mailto:[email protected]]
Gesendet: Dienstag, 12. Oktober 2010 07:12
An: [email protected]
Betreff: WSDL-first CustomServer example as OSGi bundle


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