采用CXF框架发布WebService
* 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
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包
步骤二:编写接口及其实现类(这里用的是获取语言的接口LanguageService,实现类LanguageServiceImp)
以上我们可以看到,我们可以不用采取@WebService()注解的方式来指定提供服务的接口,因为bean.setServiceClass()已经为我们指定了。以及bean.setServiceBean()为我们指定了服务实现的bean。
查看wsdl文件
以上我们采用的ServerFactoryBean的方式来获取服务器工厂实例。通过操作发现,我们无法对wsdl文件通过注解进行修改。(修改无效)
所以我们要通过JaxWsServerFactoryBean工厂类来获取实例便可以利用注解对wsdl文件进行修改。
同时,我们也可以通过JaxWsServerFactoryBean的实例bean设置日志输入输出的拦截器
首先我们可以看到wsdl文件被我们通过注解的方式修改了
步骤三:我们将发布好的wsdl文件进行导出生成.class文件。
步骤四:将生成好的.class文件导成jar包
步骤五:建立一个新项目,模拟客户端,并将该jar文件导入lib下,对发布的webservice进行测试(获取Language)
启动服务器端(发布WebService的项目)然后启动客户端(LanguageTest)
同时因为我们在JaxWsServerFactoryBean中设置了日志拦截器,所以我们在查看wsdl文件和进行获取language的时候都会有日志信息进行输出。
我们每次调用服务的时候,webservice都会检验本地代理的wsdl文件是否与服务器端的wsdl文件是否一致。然后通过soap实现通信。我们采用的是post请求 , 数据封装在满足soap规约的xml中