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.
