采用CXF框架发布WebService

1. CXF介绍 :soa的框架
    * cxf 是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,并且捐给了apache  
    * CxF的核心是org.apache.cxf.Bus(总线),类似于Spring的 ApplicationContext
    * CXF默认是依赖于Spring的
    * Apache CXF 发行包中的jar,如果全部放到lib中,需要 JDK1.6 及以上,否则会报JAX-WS版本不一致的问题

    * CXF 内置了Jetty服务器 ,它是servlet容器,好比tomcat


  2.CXF特点
    1. 与Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty 
    2. 支持注解的方式来发布webservice
    3. 能够显示一个webservice的服务列表
    4. 能够添加拦截器:输入拦截器、输出拦截器 :

         输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器


1. ServerFactoryBean
*    - 不设置注解也可以发布webservice服务, 不支持注解

*    - 不支持拦截器的添加

2. JaxWsServerFactoryBean
*    - 支持注解

*    - 可以添加拦截器

 3. webservice 访问流程:
*    1. 检测本地代理描述的wsdl是否与服务端的wsdl一致 ,俗称为握手
*    2. 通过soap协议实现通信 ,采用的是post请求 , 数据封装在满足soap规约的xml中
*    3. 返回数据 同样采用的是soap通信,  数据封装在满足soap规约的xml中



步骤一:我们首先要导入CXF发布webService需要的jar包

采用CXF框架发布WebService


步骤二:编写接口及其实现类(这里用的是获取语言的接口LanguageService,实现类LanguageServiceImp)


采用CXF框架发布WebService

采用CXF框架发布WebService

采用CXF框架发布WebService


以上我们可以看到,我们可以不用采取@WebService()注解的方式来指定提供服务的接口,因为bean.setServiceClass()已经为我们指定了。以及bean.setServiceBean()为我们指定了服务实现的bean。


查看wsdl文件


采用CXF框架发布WebService


以上我们采用的ServerFactoryBean的方式来获取服务器工厂实例。通过操作发现,我们无法对wsdl文件通过注解进行修改。(修改无效)

所以我们要通过JaxWsServerFactoryBean工厂类来获取实例便可以利用注解对wsdl文件进行修改。

同时,我们也可以通过JaxWsServerFactoryBean的实例bean设置日志输入输出的拦截器

采用CXF框架发布WebService

采用CXF框架发布WebService

首先我们可以看到wsdl文件被我们通过注解的方式修改了

采用CXF框架发布WebService



步骤三:我们将发布好的wsdl文件进行导出生成.class文件。


采用CXF框架发布WebService

采用CXF框架发布WebService

采用CXF框架发布WebService


步骤四:将生成好的.class文件导成jar包


采用CXF框架发布WebService

采用CXF框架发布WebService


步骤五:建立一个新项目,模拟客户端,并将该jar文件导入lib下,对发布的webservice进行测试(获取Language)


采用CXF框架发布WebService

采用CXF框架发布WebService

启动服务器端(发布WebService的项目)然后启动客户端(LanguageTest)

采用CXF框架发布WebService


同时因为我们在JaxWsServerFactoryBean中设置了日志拦截器,所以我们在查看wsdl文件和进行获取language的时候都会有日志信息进行输出。

采用CXF框架发布WebService

采用CXF框架发布WebService


我们每次调用服务的时候,webservice都会检验本地代理的wsdl文件是否与服务器端的wsdl文件是否一致。然后通过soap实现通信。我们采用的是post请求 , 数据封装在满足soap规约的xml中


采用CXF框架发布WebService

采用CXF框架发布WebService