You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Freeman Fang (JIRA)" <ji...@apache.org> on 2011/08/28 03:43:37 UTC

[jira] [Issue Comment Edited] (CXF-3771) Excluded service methods not excluded in OSGi

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

Freeman Fang edited comment on CXF-3771 at 8/28/11 1:42 AM:
------------------------------------------------------------

Hi,

To know how you package the bundle is more important here.
e.g., what your pom.xml looks like, did you embed 3rd part jar in your bundle which should be there. That's important 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

      was (Author: ffang):
    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