java - Exposing an EJB project as SOAP WebService in another project -
i have 2 different java projects (in eclipse), 1 of them required jpa implementation accessing db, classes encapsulate work beans tagged @stateless , @localbean. second project wants soap web service implementation offering methods, classes have call beans
speaking code, on project must soap implementation have like:
package implementacion; import javax.ejb.stateless; import javax.jws.webservice; @stateless @webservice(targetnamespace = "http://implementacion/", portname = "testport", servicename = "testservice") public class test { @ejb private languagebo lbo; public test(){ } public string sayhello() { return "hello world"; } public string saybye() { return "bye world"; } public wscollectionresult getalllanguages() { return lbo.getalllanguages(); } }
my web.xml:
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>soapborrar</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <description>apache cxf endpoint</description> <display-name>cxf</display-name> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.cxfservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>60</session-timeout> </session-config> <context-param> <param-name>contextconfiglocation</param-name> <param-value>web-inf/cxf-beans.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> </web-app>
my cxf-beans.xml (ws implementation inside package "implementation", , called test):
<?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" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.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" /> <jaxws:endpoint id="test" implementor="implementation.test" wsdllocation="wsdl/test.wsdl" address="/test"> <jaxws:features> <bean class="org.apache.cxf.feature.loggingfeature" /> </jaxws:features> </jaxws:endpoint> </beans>
i have tried implement webservice @stateless , nothing, have still exceptions during deployment:
grave: context initialization failed org.springframework.beans.factory.beancreationexception: error creating bean name 'test': invocation of init method failed; nested exception javax.xml.ws.webserviceexception: java.lang.classcastexception: cannot cast com.sun.proxy.$proxy91 org.apache.cxf.binding.soap.wsdl.extensions.soapbinding @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1422) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:518) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:455) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:293) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:290) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:192) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:585) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:895) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:425) @ org.springframework.web.context.contextloader.createwebapplicationcontext(contextloader.java:282) @ org.springframework.web.context.contextloader.initwebapplicationcontext(contextloader.java:204) @ org.springframework.web.context.contextloaderlistener.contextinitialized(contextloaderlistener.java:47) @ org.apache.catalina.core.standardcontext.listenerstart(standardcontext.java:4939) @ org.apache.catalina.core.standardcontext.startinternal(standardcontext.java:5434) @ org.apache.catalina.util.lifecyclebase.start(lifecyclebase.java:150) @ org.apache.catalina.core.containerbase$startchild.call(containerbase.java:1559) @ org.apache.catalina.core.containerbase$startchild.call(containerbase.java:1549) @ java.util.concurrent.futuretask.run(futuretask.java:262) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) @ java.lang.thread.run(thread.java:744) caused by: javax.xml.ws.webserviceexception: java.lang.classcastexception: cannot cast com.sun.proxy.$proxy91 org.apache.cxf.binding.soap.wsdl.extensions.soapbinding @ org.apache.cxf.jaxws.endpointimpl.dopublish(endpointimpl.java:371) @ org.apache.cxf.jaxws.endpointimpl.publish(endpointimpl.java:251) @ org.apache.cxf.jaxws.endpointimpl.publish(endpointimpl.java:539) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokecustominitmethod(abstractautowirecapablebeanfactory.java:1546) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1487) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1419) ... 21 more caused by: java.lang.classcastexception: cannot cast com.sun.proxy.$proxy91 org.apache.cxf.binding.soap.wsdl.extensions.soapbinding @ java.lang.class.cast(class.java:3094) @ org.apache.cxf.binding.soap.soapbindingutil.getproxy(soapbindingutil.java:104) @ org.apache.cxf.binding.soap.soapbindingutil.getsoapbinding(soapbindingutil.java:275) @ org.apache.cxf.binding.soap.soapbindingutil.getsoapbinding(soapbindingutil.java:267) @ org.apache.cxf.binding.soap.soapbindingfactory.createbindinginfo(soapbindingfactory.java:676) @ org.apache.cxf.wsdl11.wsdlservicebuilder.buildbinding(wsdlservicebuilder.java:486) @ org.apache.cxf.wsdl11.wsdlservicebuilder.buildservices(wsdlservicebuilder.java:354) @ org.apache.cxf.wsdl11.wsdlservicebuilder.buildservices(wsdlservicebuilder.java:203) @ org.apache.cxf.wsdl11.wsdlservicefactory.create(wsdlservicefactory.java:175) @ org.apache.cxf.service.factory.reflectionservicefactorybean.buildservicefromwsdl(reflectionservicefactorybean.java:428) @ org.apache.cxf.service.factory.reflectionservicefactorybean.initializeservicemodel(reflectionservicefactorybean.java:548) @ org.apache.cxf.service.factory.reflectionservicefactorybean.create(reflectionservicefactorybean.java:265) @ org.apache.cxf.jaxws.support.jaxwsservicefactorybean.create(jaxwsservicefactorybean.java:215) @ org.apache.cxf.frontend.abstractwsdlbasedendpointfactory.createendpoint(abstractwsdlbasedendpointfactory.java:102) @ org.apache.cxf.frontend.serverfactorybean.create(serverfactorybean.java:159) @ org.apache.cxf.jaxws.jaxwsserverfactorybean.create(jaxwsserverfactorybean.java:211) @ org.apache.cxf.jaxws.endpointimpl.getserver(endpointimpl.java:456) @ org.apache.cxf.jaxws.endpointimpl.dopublish(endpointimpl.java:334) ... 30 more mar 21, 2014 2:21:44 pm org.apache.catalina.core.standardcontext listenerstart grave: excepción enviando evento inicializado de contexto instancia de escuchador de clase org.springframework.web.context.contextloaderlistener org.springframework.beans.factory.beancreationexception: error creating bean name 'test': invocation of init method failed; nested exception javax.xml.ws.webserviceexception: java.lang.classcastexception: cannot cast com.sun.proxy.$proxy91 org.apache.cxf.binding.soap.wsdl.extensions.soapbinding @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1422) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:518) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:455) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:293) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:290) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:192) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:585) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:895) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:425) @ org.springframework.web.context.contextloader.createwebapplicationcontext(contextloader.java:282) @ org.springframework.web.context.contextloader.initwebapplicationcontext(contextloader.java:204) @ org.springframework.web.context.contextloaderlistener.contextinitialized(contextloaderlistener.java:47) @ org.apache.catalina.core.standardcontext.listenerstart(standardcontext.java:4939) @ org.apache.catalina.core.standardcontext.startinternal(standardcontext.java:5434) @ org.apache.catalina.util.lifecyclebase.start(lifecyclebase.java:150) @ org.apache.catalina.core.containerbase$startchild.call(containerbase.java:1559) @ org.apache.catalina.core.containerbase$startchild.call(containerbase.java:1549) @ java.util.concurrent.futuretask.run(futuretask.java:262) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) @ java.lang.thread.run(thread.java:744) caused by: javax.xml.ws.webserviceexception: java.lang.classcastexception: cannot cast com.sun.proxy.$proxy91 org.apache.cxf.binding.soap.wsdl.extensions.soapbinding @ org.apache.cxf.jaxws.endpointimpl.dopublish(endpointimpl.java:371) @ org.apache.cxf.jaxws.endpointimpl.publish(endpointimpl.java:251) @ org.apache.cxf.jaxws.endpointimpl.publish(endpointimpl.java:539) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokecustominitmethod(abstractautowirecapablebeanfactory.java:1546) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1487) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1419) ... 21 more caused by: java.lang.classcastexception: cannot cast com.sun.proxy.$proxy91 org.apache.cxf.binding.soap.wsdl.extensions.soapbinding @ java.lang.class.cast(class.java:3094) @ org.apache.cxf.binding.soap.soapbindingutil.getproxy(soapbindingutil.java:104) @ org.apache.cxf.binding.soap.soapbindingutil.getsoapbinding(soapbindingutil.java:275) @ org.apache.cxf.binding.soap.soapbindingutil.getsoapbinding(soapbindingutil.java:267) @ org.apache.cxf.binding.soap.soapbindingfactory.createbindinginfo(soapbindingfactory.java:676) @ org.apache.cxf.wsdl11.wsdlservicebuilder.buildbinding(wsdlservicebuilder.java:486) @ org.apache.cxf.wsdl11.wsdlservicebuilder.buildservices(wsdlservicebuilder.java:354) @ org.apache.cxf.wsdl11.wsdlservicebuilder.buildservices(wsdlservicebuilder.java:203) @ org.apache.cxf.wsdl11.wsdlservicefactory.create(wsdlservicefactory.java:175) @ org.apache.cxf.service.factory.reflectionservicefactorybean.buildservicefromwsdl(reflectionservicefactorybean.java:428) @ org.apache.cxf.service.factory.reflectionservicefactorybean.initializeservicemodel(reflectionservicefactorybean.java:548) @ org.apache.cxf.service.factory.reflectionservicefactorybean.create(reflectionservicefactorybean.java:265) @ org.apache.cxf.jaxws.support.jaxwsservicefactorybean.create(jaxwsservicefactorybean.java:215) @ org.apache.cxf.frontend.abstractwsdlbasedendpointfactory.createendpoint(abstractwsdlbasedendpointfactory.java:102) @ org.apache.cxf.frontend.serverfactorybean.create(serverfactorybean.java:159) @ org.apache.cxf.jaxws.jaxwsserverfactorybean.create(jaxwsserverfactorybean.java:211) @ org.apache.cxf.jaxws.endpointimpl.getserver(endpointimpl.java:456) @ org.apache.cxf.jaxws.endpointimpl.dopublish(endpointimpl.java:334) ... 30 more
what doing wrong?
i'm using apache tomee ejb server , cxf implementing ws. also, if don't use ejb (if comment @ejb private languagebo , method using it) ws works correctly, missing?
thank in advance :)
pd: i've created ws using eclipse's wizard that
pd2: i've realized if use @stateless annotation in ws implementation doesn't work
edited
my pom.xml
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>eu.superhub.wp4.policyframework-web-server</groupid> <artifactid>policyframework-web-server</artifactid> <name>superhub policyframework-web-server sip</name> <description>incorporates clients of other wp4 modules , provides web-service interface</description> <version>0.0.4-snapshot</version> <packaging>war</packaging> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.1</version> <configuration> <target>1.7</target> <source>1.7</source> </configuration> </plugin> <!-- dependency, warning message – “selected war files include web-inf/web.xml ignored” fixed--> <plugin> <artifactid>maven-war-plugin</artifactid> <version>2.3</version> <configuration> <packagingexcludes>src/main/webapp/web-inf/web.xml</packagingexcludes> </configuration> </plugin> </plugins> </build> <!-- property, character encoding warnings fixed--> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> </properties> <dependencies> <!-- own bundles dependencies --> <dependency> <groupid>eu.superhub.wp4.models</groupid> <artifactid>policymodel</artifactid> <version>0.0.4-snapshot</version> </dependency> <!-- rest services dependencies --> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>3.2.2.release</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>3.2.2.release</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>3.2.2.release</version> </dependency> <dependency> <groupid>org.apache.cxf</groupid> <artifactid>cxf-rt-frontend-jaxws</artifactid> <!-- <version>2.7.4</version> --> <version>2.6.9</version> </dependency> <dependency> <groupid>org.apache.cxf</groupid> <artifactid>cxf-rt-transports-http</artifactid> <!-- <version>2.7.4</version> --> <version>2.6.9</version> </dependency> <dependency> <groupid>org.apache.cxf</groupid> <artifactid>cxf-rt-frontend-jaxrs</artifactid> <!-- <version>2.7.4</version> --> <version>2.6.9</version> </dependency> <dependency> <groupid>org.apache.cxf</groupid> <artifactid>cxf-rt-rs-extension-providers</artifactid> <!-- <version>2.6.0</version> --> <version>2.6.9</version> </dependency> <dependency> <groupid>javax.xml.bind</groupid> <artifactid>jaxb-api</artifactid> <version>2.2.9</version> </dependency> <dependency> <groupid>org.codehaus.jackson</groupid> <artifactid>jackson-jaxrs</artifactid> <version>1.9.0</version> </dependency> <!-- without dependency rest service can't serialize list data types --> <dependency> <groupid>org.codehaus.jettison</groupid> <artifactid>jettison</artifactid> <version>1.3.4</version> </dependency> <!-- logger dependencies --> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-api</artifactid> <version>1.7.5</version> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version>1.7.5</version> </dependency> <!-- postgresql dependency --> <dependency> <groupid>org.postgresql</groupid> <artifactid>postgresql</artifactid> <version>9.2-1003-jdbc4</version> </dependency> <!-- junit --> <dependency> <groupid>junit</groupid> <artifactid>junit-dep</artifactid> <version>4.8.2</version> </dependency> </dependency> </dependencies> </project>
do use last tomee? deliver cxf in webapp needed use spring.
Comments
Post a Comment