CXF 3.0.2集成测试
这两天和CXF较了半天劲,呵呵,不过CXF挺好的,提供多种的调用风格,很不错。多了不说了,记录下升级过程。
老系统中使用的也是SSH框架,但是由于年代久远,现在做第n期阶段了。其使用的是Spring1.2.x,hibernate3.1.x,webwork2.2.x,其他的jar包都是围绕这三主框架来的,不多说了。
想法1:直接集成CXF3.0版本
首先spring1.2.x版本,对于目前的一些spring配置是不支持的,经过翻阅文档自己做实验基本放弃.
想法2:单独使用CXF不与spring集成,大不了要集成spring自己再写个桥接的方法把从spring容器中获取bean,发布出来完事。
继承了f.transport.servlet.CXFNonSpringServlet 配置CXF的启动器,自己写了一个Bus的装载器。
但是悲剧发生了:
CXF要使用spring中的一个工具类进行一些操作,由于spring的版本比较低,cxf调用的接口在这里没有,直接报了方法不到的异常。
翻阅了CXF的代码,发现里面有一段是这样的Class.forName(“”)去检测spring的类是否存在,如果存在就直接使用spring的工具类了,否则使用自己的实现。悲剧吧。此路不通
想法3:两条路选择是升级项目的整体代码库,还是修改CXF的源代码,纠结了半天最终还是选择升级整体框架升级,为的是以后便利多多。
CXF3.0.2版本现在对于Spring的要求为3.2.x版本以上,这个没啥可说的。
上代码:
接口代码:cys.webservice.HellowWebservice
package cys.webservice; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import l.ws.RequestWrapper; import l.ws.ResponseWrapper; @WebService(targetNamespace = "s/", name = "HellowWebservice") publicinterface HellowWebservice { @WebMethod @RequestWrapper(localName = "hellowRequest", targetNamespace = "s/") @ResponseWrapper(localName = "hellowResponse", targetNamespace = "s/") @WebResult(name = "return", targetNamespace = "s/") public String hellow(@WebParam(name = "name", targetNamespace = "s/")String name); } |
这里使用注解配置webservice如果不配置,那么启动会异常
实现代码:cys.webservice.impl.HellowWebserviceImpl
package cys.webservice.impl; import SimpleDateFormat; import java.util.Date; import cys.webservice.HellowWebservice; publicclassHellowWebserviceImplimplements HellowWebservice{ public String hellow(String name) { webservice实现 returnnew SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+" Hellow "+name+"这里是服务器。"; } } |
先上l配置:这里贴出最小配置:
<?xmlversion="1.0"encoding="ISO-8859-1"?> <web-appxmlns="java.sun/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="java.sun/xml/ns/j2ee java.sun/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>cxftest</display-name> <description>cxftest</description> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext-*.xml</param-value> </context-param> <listener> <listener-class> org.t.ContextLoaderListener </listener-class> </listener> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>CXFService</servlet-name> <servlet-class>f.transport.servlet.CXFServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <url-pattern>/webservices/*</url-pattern> </servlet-mapping> </web-app> |
再来一个spring的配置也是最小的只有CXF的配置:l
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xmlns:aop="/schema/aop" xmlns:tx="/schema/tx" xmlns:context="/schema/context" xmlns:jaxws="/jaxws" xsi:schemaLocation=" /schema/beans /schema/beans/spring-beans-2.5.xsd /schema/tx /schema/tx/spring-tx-2.5.xsd /schema/aop /schema/aop/spring-aop-2.5.xsd /schema/context /schema/context/spring-context-2.5.xsd /jaxws /schemas/jaxws.xsd" > <importresource="classpath:META-INF/l"/> <!-- 这里是cxf2.x版本的配置,在3.0里已经没有了要去掉 <import resource="classpath:META-INF/cxf/cxf-l"/> --> <importresource="classpath:META-INF/l"/> <beanid="hellowWebservice"class="cys.webservice.impl.HellowWebserviceImpl"></bean> <!-- 这里是webservice的发布配置,implementor="#hellowWebservice" 中的#说明是从spring 中取得Bean实例--> <jaxws:endpointid="HellowWebservice" implementor="#hellowWebservice" address="/HellowWebservice"/> </beans> |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论