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.
