CXF框架的使用

CXF框架的使用

- CXF是什么?
Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 是一个开源的 Services 框架,这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。
- 使用准备
安装、配置、准备minijar包
- 实现步骤
1 服务端
创建项目并且导入jar
准备本地服务接口及实现类
标记为远程服务
使用cxf的语法发布服务
测试
2 客户端
创建项目并且导入jar
使用wsdl生生成本地服接口
获取本地代理对象
完成远程调用
wsdl2java -d . -p com.jbzhang.ws.cxfclient http://192.168.1.11:8888/hello?wsdl

  • 关于拦截器

什么是拦截器?
就是在客户端访问服务端的时候,在期间添加拦截器完成一些额外的功能。CXF已经提供了一些日志拦截器,可以直接使用。
使用自带的日志拦截器:LoggingInInterceptor 信息输入时的拦截器-请求
LoggingOutInterceptor 信息输出时的拦截器-响应

那么拦截器如何使用?使用的时机是什么?如下图所示:

在这里插入图片描述

为什么做权限拦截?
为了控制远程服务的访问权限
怎么做?
1.用户在运营平台注册用户,并且申请对应接口的访问权限-这个用户就拥有了权限
2.用户访问服务时需携带用户信息到服务端,权限出去拦截器携带客户信息
3.服务端获取用户信息是否有权限,权限的进来拦截器获取客户信息,判断是否有权限

权限拦截器和日志拦截器是否有顺序?
1.对于客户端日志拦截器应在最后,确保后面有拦截器改了soap修改而日志拦截器没有打印出来。
2.对于服务端日志拦截器应在最前,确保前面不会有拦截器修改SOAP消息。

怎么确保顺序?
创建拦截器时,要为拦截器制定对应的阶段,通过拦截器的不同阶段来控制对应的顺序
随着程序的执行,到达对应阶段的时候,就调用对应的拦截器。

创建一个自定义拦截器的步骤:
1.创建一个自定义的拦截器类,继承 AbstractPhaseInterceptor
2.给自定义拦截器实现逻辑
3.把拦截器添加到服务端或者客户端

/***********************************************************************************/
下面是一个可以用于练习建立客户端的网站:
http://www.webxml.com.cn/zh_cn/web_services.aspx

创建一个中英文翻译的客户端:
wsdl2java -d . -p com.jbzhang.ws.cxftranslateclient http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl

执行以上命令报错:
WSDLToJava Error: http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl [19,19]: undefined element declaration ‘s:schema’
http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl [105,13]: undefined element declaration ‘s:schema’
只能另存在本地,删除 ‘s:schema’ 的引用
执行如下命令:
wsimport -keep C:\Users\Admin\Desktop\EnglishChinese.asmx.xml

会生成具体的代码

此处练习的源码已上传至github,链接如下
https://github.com/OsiyeA/The-Code-of-WebService.git

猜你喜欢

转载自blog.csdn.net/weixin_39446297/article/details/105475802