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

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

Hi,

I'd like to see how you package the bundle.
e.g., what your pom.xml looks like, that's import to know if you correctly 
import necessary package with maven-bundle-plug.
If you can append a src project with pom.xml which we can build and deploy, 
that would be great.

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
>
> 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