您当前的位置:学院动态 > 校区新闻 > 正文

Spring整合CXF

 
时间:2017-09-10 17:00    来源:顽石科技    编辑:www.zrzxtime.com
 
Spring整合CXF
CXF是一个正式的Apache顶级项目。
Apache CXF 是一个开源的 WebService 框架,CXF 帮助您构建和开发 WebService。
CXF开发的WebService必须部署在Servlet容器下。
CXF可以用于开发WebService的服务器端 和客户端。

 
Spring整合CXF

 
 服务端
本例子实现一个简单的WebService服务端。提供一个getMoney的方法,调用将返回一个字符串。
 首先创建一个web项目
这一步不细说了,在eclipse下创建一个web项目,然后加入maven支持。
 
 在maven中加入spring和cxf的依赖
    org.springframework
    spring-web
    4.3.7.RELEASE
 
    org.apache.cxf
    cxf-rt-frontend-jaxws
    3.1.10
 
 
    org.apache.cxf
    cxf-rt-transports-http
    3.1.10
 
 
 配置web.xml文件
在web.xml文件中加入spring的监听。
    org.springframework.web.context.ContextLoaderListener
 
    contextConfigLocation
    classpath:spring.xml
 
注意:本例子将spring的入口文件命名为spring.xml,与一般惯例的applicationContext.xml命名不一致,敬请留意。
 
在web.xml文件中加入cxf的支持。
    CXFService
    org.apache.cxf.transport.servlet.CXFServlet
 
 
    CXFService
    /ws/*
 
这里看到了,CXF被部署为一个Servlet,监听的是/ws/*的路径,这个路径可以根据您项目的需要而调整。
 
 创建服务端的接口interface
@WebService(targetNamespace="com.wskj.app.ws.Bank")
public interface Bank {
     
    String getMoney(String cardNumb);
 
}
注意:
1 注解@WebService 声明是WebService的接口
2 注解中的targetNamespace声明了WebService的名字空间,这个要与客户端一致,否则访问不到。
 
 创建接口的实现类
@WebService(endpointInterface="com.wskj.app.wssvr.Bank",serviceName="bank",portName="bankPort")
public class BankImpl implements Bank {
 
    @Override
    public String getMoney(String cardNumb) {
        return "2000";
    }
 
}
这里的endpointInterface指向接口名
 
 在spring的配置文件中配置CXF
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:cxf="http://cxf.apache.org/core"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
      http://cxf.apache.org/jaxws   
          http://cxf.apache.org/schemas/jaxws.xsd
      ">
 
 
   
   
 
   
 
   
 
 
注意:这里配置的/bank/getMoney地址要加入到WebService的访问地址URL的后面。
这里的endpoint节点定义了getMoney方法被做成了WebService
 
至此就可以发布到Tomcat中,并启动了。
然后在浏览器中输入: http://localhost:8080/wssvr/ws/bank/getMoney?wsdl 可以查看到该WebService的wsdl。说明发布成功。
 
 客户端
说明:CXF的服务端需要部署在Servlet容器中,譬如Tomcat中,而客户端不需要,直接main函数启动即可。
 创建一个Java项目
在Eclipse中创建一个Java项目,注意,不是web项目。
将该Java项目加入Maven支持。
 
 在项目的pom.xml中加入Spring和CXF客户端的依赖
    org.springframework
    spring-web
    4.3.7.RELEASE
 
    org.apache.cxf
    cxf-rt-rs-client
    3.1.10
 
    org.apache.cxf
    cxf-rt-frontend-jaxws
    3.1.10
 
 
注意,这里使用的是cxf client的依赖,与服务端的依赖不同。
 
 创建接口interface
@WebService(targetNamespace="com.wskj.app.ws.Bank")
public interface Bank {
     
    String getMoney(String cardNumb);
 
}
1 作为客户端只要有接口即可,不需要实现该接口。
2 该接口一定要定义的与服务端的接口一样。
3 如果包名和类名与服务端不一致,一定要定义targetNamespace与服务端的接口一致。
 
 配置Spring的配置文件
本例子在客户端也将spring的配置文件命名为spring.xml 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:cxf="http://cxf.apache.org/core"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
      http://cxf.apache.org/jaxws   
    http://cxf.apache.org/schemas/jaxws.xsd
      ">
 
     
      address="http://localhost:8080/wssvr/ws/bank/getMoney?wsdl" />  
 
 
这个配置文件要将serviceClass属性指向客户端的接口。
address属性指向到服务端的WebService的URL地址。
 
 编写main方法测试
public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");  
        Bank bank =  ctx.getBean(Bank.class);  
        String result = bank.getMoney("1");
        System.out.println(result);  
}
可以看到,本例子是通过main方法启动的客户端。
直接写的命令行启动的spring,加载的配置文件spring.xml。
调用后,可以读到result的值为2000,正是服务端的方法返回的值。
至此,客户端运行成功。

本文为顽石科技原创
转载请注明网址:
http://www.zrzxtime.com/html/2017/xiaoquxinwen_0910/562.html