上一章节,讲解了如何使用构建服务。其实,创建的方式有很多的,今天来看看如何使用来构建及调用服务。
- 前言
- 一点知识
- 何为Apache-CXF
- 关于JAX-WS规范
- 常用注解介绍
- SpringBoot整合CXF实例
- 服务端构建
- 客户端调用
- 异常捕获
- 自定义拦截器
- 服务端拦截器
- 客户端拦截器
- 参考资料
- 总结
- 最后
- 老生常谈
是一个开源的框架,帮助您利用编程 API 来构建和开发Services,像、。这些可以支持多种协议,比如:、、或者,并且可以在多种传输协议上运行,比如:、 或者,CXF大大简化了 Services 的创建,同时它可以天然地和Spring进行无缝集成。
以下是官网给出的介绍:https://github.com/apache/cxf
最常用的是使用开发。本身是基于规范来实现的。当然,本身也实现了规范来实现。
全称:。是一种编程模型,它通过支持将基于注释的标准模型用于开发应用程序和客户机来简化应用程序开发。
是Java程序设计语言一个用来创建Web服务的API。
- 在服务器端,用户只需要通过语言定义远程调用所需要实现的接口,并提供相关的实现,通过调用的服务发布接口就可以将其发布为接口。
- 在客户端,用户可以通过的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。当然也提供了一组针对底层消息进行操作的API调用,你可以通过直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。
常用注解介绍
提供了一系列的注解,可以对的接口规范化。以下介绍下最常用的几个注解。
- @WebService:用于将Java类标记为实现或者将服务端点接口 (SEI) 标记为实现接口。
其包含的属性有:- name:此属性的值包含XML Web Service的名称。在默认情况下,该值是实现XML Web Service的类的名称,wsdl:portType 的名称。缺省值为 Java 类的简单名称 + Service。(字符串)
- targetNamespace:默认的值为 "http://包名/" ,可以通过此变量指定一个自定义的targetNamespace值。
- serviceName:对外发布的服务名,指定的服务名称:wsdl:service。缺省值为 Java 类的简单名称 + Service。(字符串)
- endpointInterface:
- portName:wsdl:portName的值。缺省值为
- wsdlLocation:指定用于定义 Web Service 的 WSDL 文档的 Web 地址
- @WebMethod:表示作为一项操作的方法。仅支持在使用注解的类上使用注解。
- operationName:指定与此方法相匹配的wsdl:operation 的名称。缺省值为 Java 方法的名称。(字符串)
- action:定义此操作的行为。对于 SOAP 绑定,此值将确定 SOAPAction 头的值。缺省值为 Java 方法的名称。(字符串)
- exclude:指定是否从 Web Service 中排除某一方法。缺省值为 false。(布尔值)
- @WebParam:用于定制从单个参数至消息部件和元素的映射。
其他注解,可以查看:WebService注解总结
为了有个直观感受,大家可以看看以下这个wsdl文件,对应以上各注解属性的值(加了前缀)。
标记的有点花,⊙﹏⊙‖∣。大家可以自己对照下。
接下来,我们以一个简单的示例来演示下,如何发布服务及如何进行服务调用。
创建一个工程:.
0.引入CXF的POM文件
性别枚举类
接口类
接口实现类
注意:相关注解可以查看章节:常用注解介绍
主要是接口实现类的对应属性值都要wsdl文件的映射关系。
2.创建常量类,配置类,设置访问uri路径等。
注意事项:
- 配置时,需要注意设置方法的名称或者bean的名称时,不要和默认的类重名了,会导致原先的接口无法使用,因为被覆盖了。
- 修改访问的路径可以通过设置来修改,但同时,要注意需要设置bean的名称为,不然会造成注册多个的。具体原因可查看自动配置类:。
所以,修改访问路径还可以通过配置项:来设置。其默认的访问url为:
3.创建启动类,同时启动应用。
启动后,可以从控制台看见可以访问的url路径信息。
访问:http://127.0.0.1:8080/ws/author?wsdl ,验证是否发布成功。
自此,发布成功了。
创建一个客户端工程:。
0.引入cxf依赖。
1.创建文件,同时利用插件:创建相关类。
将文件,放入目录下。之后执行:命令,就会自动创建相应的类文件了。拷贝相应的类文件至目录下即可。或者直接指定也是可以的。
2.创建调用的配置类,这里演示两种方式。
其实,最后都是使用进行调用的。
3.创建控制层,进行调用示例。
4.编写启动类,同时制定应用端口为:8090。
端口号配置:
5.启动应用,依次访问。查看是否调用成功。
http://127.0.0.1:8090/cxf/getauthorstring?authorName=oKong
http://127.0.0.1:8090/cxf//getauthorlist?authorName=oKong
动态工厂方式调用:
http://127.0.0.1:8090/cxf/dynamic/getAuthorList?authorName=oKong
其他的就不一一贴图了,可自行访问下。
异常捕获
发生异常时,会统一抛出:类的,所以想要捕获异常,可以在统一异常里面进行捕获,关于统一异常处理,可以查看文章:第八章:统一异常、数据校验处理。
CXF的拦截器分为两种:和。显而易见,可以处理soap请求消息,可以处理soap响应消息。其拦截器都继承至接口类,而且,本身也自带了很多的拦截器,可以自行添加看看,比如日志拦截器之类的:和。
请求流程图:
拦截器链的阶段:
输入拦截器链有如下几个阶段,这些阶段按照在拦截器链中的先后顺序排列。
输出拦截器链有如下几个阶段,这些阶段按照在拦截器链中的先后顺序排列。
具体名称,可查看:。
现在,我们自定义个实现拦截器,实现请求时header需要带上特定参数,或者大家可不写一些安全校验的自定义拦截器,本例只是简单的示例。
服务端拦截器
1.检验拦截器:
2.Endpoint中加入拦截器配置。
客户端拦截器
1.编写拦截器。
这里需要注意:
- 设置header时,默认是对象。
- 自定义对象时,可设置类来解析(未尝试,只是看了一眼源码,里面有此逻辑,有兴趣的同学可以自行试试)。
重新启动后,再次请求就可以看见相关日志输出了,可以试着不设置token,看看有拦截。
异常请求:
- http://cxf.apache.org/docs/springboot.html
- https://www.code996.cn/post/2017/cxf-interceptor/
本章节主要简单介绍了的使用。这文章示例写下来,我发现比更简单呀,也更让人容易理解、逻辑比较清晰,而且也能设置一些差异化的东西。不知道是不是真的对了解的不够呀,没有发现的优点呀。自此,关于的文章就暂时告一段落了。
目前互联网上很多大佬都有系列教程,如有雷同,请多多包涵了。原创不易,码字不易,还希望大家多多支持。若文中有所错误之处,还望提出,谢谢。
- 个人:
- 微信公众号:
个人博客:http://blog.lqdev.cn
完整示例:https://github.com/xie/spring-boot-learning/tree/master/chapter-34
原文地址:http://blog.lqdev.cn/2018/11/12/springboot/chapter-thirty-four/
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/12325.html