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小时内删除。