[ 
https://issues.apache.org/jira/browse/CXF-3771?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13092597#comment-13092597
 ] 

Freeman Fang commented on CXF-3771:
-----------------------------------

Hi Barry,

The error is from that your customer bundle use DynamicImport-Package *, 
DynamicImport isn't a best practice in OSGi world, it can cause uncertain 
result in lots of cases and we should avoid using it as much as possible. You 
need figure out what's the necessary Import-Package yourself, but not simply 
use DynamicImport-Package *. 

Your Import-Package part should be like
<Import-Package>
                            javax.jws*;version="[1.0-MR1,3)",
                                                        
javax.xml.ws*;version="[2.2.0,3)",
                            javax.wsdl,
                            javax.xml.namespace,
                            META-INF.cxf,
                            META-INF.cxf.osgi,
                            org.slf4j,
                            net.sf.cglib.reflect,
                            net.sf.cglib.proxy,                            
org.aopalliance.aop,
                            net.sf.cglib.core,
                            org.springframework.aop,
                            org.springframework.aop.framework,
                            org.springframework.aop.scope,
                            org.apache.cxf.bus,                            
org.apache.cxf.bus.spring,
                            org.apache.cxf.bus.resource,
                            org.apache.cxf.configuration.spring,
                            org.apache.cxf.resource,
                            org.apache.cxf.transport.http,
                            org.springframework.beans.factory.config
                        </Import-Package>
and then you can deploy your customer bundle successfully.

Freeman

> Excluded service methods not excluded in OSGi
> ---------------------------------------------
>
>                 Key: CXF-3771
>                 URL: https://issues.apache.org/jira/browse/CXF-3771
>             Project: CXF
>          Issue Type: Bug
>          Components: OSGi
>    Affects Versions: 2.4.2
>         Environment: Windows XP; ServiceMix (or Talend TSF)
>            Reporter: Barry Hathaway
>            Assignee: Freeman Fang
>             Fix For: NeedMoreInfo
>
>         Attachments: cxf3771.ZIP
>
>
> I have a annotated web service consisting of an interface and an 
> implementation that works just fine under CXF running in a Tomcat container.  
> When I try to move it to an OSGi environment (either SMX or TSF) I get the 
> exception below.  The problem seems to be that the 2 excluded methods 
> getServiceNameMap and setServiceNameMap are trying to get processed by JAXB 
> when they should have been excluded and only called by Spring at bean 
> creation.
> karaf@root> Exception in thread "SpringOsgiExtenderThread-6" 
> org.springframework.beans.factory.BeanCreationException: Error creating b
> th name 'SadlService': Invocation of init method failed; nested exception is 
> javax.xml.ws.WebServiceException: org.apache.cxf.service.
> y.ServiceConstructionException
>         at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFact
> va:1420)
>         at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactor
> :519)
>         at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.
> 56)
>         at 
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
>         at 
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
>         at 
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
>         at 
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
>         at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.ja
> )
>         at 
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.j
> 5)
>         at 
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutio
> cationContext.java:69)
>         at 
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionAppli
> Context.java:355)
>         at 
> org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
>         at 
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExec
> pplicationContext.java:320)
>         at 
> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshT
> n(DependencyWaiterApplicationContextExecutor.java:132)
>         at java.lang.Thread.run(Thread.java:662)
> Caused by: javax.xml.ws.WebServiceException: 
> org.apache.cxf.service.factory.ServiceConstructionException
>         at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:350)
>         at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:239)
>         at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:509)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapable
> ctory.java:1544)
>         at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanF
> .java:1485)
>         at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFact
> va:1417)
>         ... 14 more
> Caused by: org.apache.cxf.service.factory.ServiceConstructionException
>         at 
> org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:292)
>         at 
> org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)
>         at 
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:438)
>         at 
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:682)
>         at 
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:501)
>         at 
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:241)
>         at 
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:202)
>         at 
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
>         at 
> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:157)
>         at 
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:202)
>         at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:433)
>         at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:322)
>         ... 23 more
> Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts 
> of IllegalAnnotationExceptions
> java.util.Map is an interface, and JAXB can't handle interfaces.
>         this problem is related to the following location:
>                 at java.util.Map
>                 at private java.util.Map 
> com.ge.research.sadl.sadlserver.cxf.provider.jaxws_asm.SetServiceNameMap.arg0
>                 at 
> com.ge.research.sadl.sadlserver.cxf.provider.jaxws_asm.SetServiceNameMap
> java.util.Map does not have a no-arg default constructor.
>         this problem is related to the following location:
>                 at java.util.Map
>                 at private java.util.Map 
> com.ge.research.sadl.sadlserver.cxf.provider.jaxws_asm.SetServiceNameMap.arg0
>                 at 
> com.ge.research.sadl.sadlserver.cxf.provider.jaxws_asm.SetServiceNameMap
>         at 
> com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102)
>         at 
> com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:472)
>         at 
> com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302)
>         at 
> com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140)
>         at 
> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
>         at 
> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:213)
>         at javax.xml.bind.ContextFinder.find(ContextFinder.java:387)
>         at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:618)
>         at 
> org.apache.cxf.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:258)
>         at 
> org.apache.cxf.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:167)
>         at 
> org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:418)
>         at 
> org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:290)
>         ... 34 more
> -------- Sample Code --------------
> Interface file: ISadlServiceProvider.java
> package com.ge.research.sadl.sadlserver.cxf.provider;
> import java.util.List;
> import java.util.Map;
> import javax.jws.WebMethod;
> import javax.jws.WebParam;
> import javax.jws.WebService;
> /**
>  * Interface of the SadlService which creates a SADL Server for use
>  * in a CXF environment.
>  * 
>  * @author Barry Hathaway
>  */
> @WebService(name="SadlService",targetNamespace="http://sadlserver.sadl.research.ge.com";)
> public interface ISadlServiceProvider {
>     /**
>      * Gets the service name map which translates the service name into a
>      * knowledge base identifier and model name.
>      * 
>      * @return Service name map
>      */
>     public Map<String,String[]> getServiceNameMap();
>     /**
>      * Sets the service name map which translates the service name into a
>      * knowledge base identifier and model name.
>      * 
>      * @param Service name map
>      */
>       public void setServiceNameMap(Map<String,String[]> serviceNameMap);
>     /**
>      * Gets the SADL server implementation class name
>      * 
>      * @return SadlServer class name
>      * @throws com.ge.research.sadl.sadlserver.SessionNotFoundException
>      */
>       @WebMethod(operationName="getClassName", action="urn:getClassName") 
>       public String getClassName();
> }
> -------------
> Implementation file: SadlServiceProvider.java
> package com.ge.research.sadl.sadlserver.cxf.provider;
> import java.io.BufferedWriter;
> import java.io.File;
> import java.io.FileWriter;
> import java.io.IOException;
> import java.io.InputStream;
> import java.net.URL;
> import java.util.ArrayList;
> import java.util.Arrays;
> import java.util.Iterator;
> import java.util.List;
> import java.util.Map;
> import java.util.Scanner;
> import javax.activation.DataSource;
> import javax.activation.FileDataSource;
> import javax.activation.URLDataSource;
> import javax.jws.WebMethod;
> import javax.jws.WebService;
> import org.apache.cxf.annotations.FactoryType;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
> /**
>  * Implementation of the SadlService which creates a SADL Server for use
>  * in a CXF environment.
>  * 
>  * @author Barry Hathaway
>  */
> @WebService(serviceName="SadlService",name="SadlService",targetNamespace="http://sadlserver.sadl.research.ge.com",endpointInterface="com.ge.research.sadl.sadlserver.cxf.provider.ISadlServiceProvider";)
> public class SadlServiceProvider implements ISadlServiceProvider {
>     private Logger logger = LoggerFactory.getLogger(getClass());
>     ISadlServer server = null;
>     public static final String SERVER = "server";
>     private Map<String,String[]> serviceNameMap = null;
>     /**
>      * Gets the service name map which translates the service name into a
>      * knowledge base identifier and model name.
>      * 
>      * @return Service name map
>      */
>       @WebMethod(exclude=true) 
>     public Map<String,String[]> getServiceNameMap() {
>               return serviceNameMap;
>       }
>     /**
>      * Sets the service name map which translates the service name into a
>      * knowledge base identifier and model name.
>      * 
>      * @param Service name map
>      */
>       @WebMethod(exclude=true) 
>       public void setServiceNameMap(Map<String,String[]> serviceNameMap) {
>               this.serviceNameMap = serviceNameMap;
>               Iterator<String> it = this.serviceNameMap.keySet().iterator();
>               while (it.hasNext()) {
>                       String key = it.next();
>                       String[] val = this.serviceNameMap.get(key);
>                       logger.debug("ServiceNameMap: "+ key +" = "+ val[0] +" 
> : "+ val[1]);
>               }
>               this.server.setServiceNameMap(serviceNameMap);
>       }
>     /**
>      * Default constructor
>      */
>       public SadlServiceProvider() {
>               logger.debug("constructor called");
>               // this.server = new SadlServerImpl();
>       }
>       
>     /**
>      * Gets the SADL server implementation class name
>      * 
>      * @return SadlServer class name
>      * @throws com.ge.research.sadl.sadlserver.SessionNotFoundException
>      */
>       public String getClassName() {
>               return this.getClass().getName();
>       }
> }
> -----
> beans.xml file
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans";
>       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>       xmlns:jaxws="http://cxf.apache.org/jaxws";
>       xmlns:aop="http://www.springframework.org/schema/aop";
>       xsi:schemaLocation="http://www.springframework.org/schema/beans 
> http://www.springframework.org/schema/beans/spring-beans.xsd
> http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd 
> http://www.springframework.org/schema/aop 
> http://www.springframework.org/schema/aop/spring-aop-3.0.xsd";>
>       <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-servlet.xml" /> -->
>     <import resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml" />
>       <bean id="sadlServiceProvider" scope="session" 
> class="com.ge.research.sadl.sadlserver.cxf.provider.SadlServiceProvider">
>               <aop:scoped-proxy/>
>       <property name="serviceNameMap">
>               <map>
>                       <entry key="cfm56_7_top">
>                                       <list>
>                                               
> <value>D:\projects\SADL\SadlServerV2Standalone\DataModels\InScope</value>
>                                               
> <value>http://ctp.geae.ge.com/iws/cfm56_7_top</value>
>                                       </list>
>                       </entry>
>                       <entry key="cfm56-7_full_test1">
>                                       <list>
>                                               
> <value>D:\projects\SADL\SadlServerV2Standalone\DataModels\InScope</value>
>                                               
> <value>http://ctp.geae.ge.com/iws/cfm56-7_full_test1</value>
>                                       </list>
>                       </entry>
>                       <entry key="shapes_test">
>                                       <list>
>                                               
> <value>D:\projects\SADL\SadlServerV2Standalone\DataModels\ShapesDemo</value>
>                                               
> <value>http://sadl.imp/shapes_test</value>
>                                       </list>
>                       </entry>
>                       <entry key="shapes_rules">
>                                       <list>
>                                               
> <value>D:\projects\SADL\SadlServerV2Standalone\DataModels\ShapesDemo</value>
>                                               
> <value>http://sadl.imp/shape_rules</value>
>                                       </list>
>                       </entry>
>               </map>
>       </property>
>       </bean>
>       <jaxws:endpoint 
>         id="SadlService" 
>         implementor="#sadlServiceProvider" 
>         address="/SadlService" />
>         
> </beans>

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to