cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Barry Hathaway (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CXF-3771) Excluded service methods not excluded in OSGi
Date Sat, 27 Aug 2011 19:56:38 GMT
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

        

Mime
View raw message