## 前言
>上一章节,讲解了如何使用`Spring-WS`构建`WebService`服务。其实,创建`WebService`的方式有很多的,今天来看看如何使用`apache cxf`来构建及调用`WebService`服务。
* [前言](#前言)
* [一点知识](#一点知识)
* [何为Apache-CXF](#何为Apache-CXF)
* [关于JAX-WS规范](#关于JAX-WS规范)
* [常用注解介绍](#常用注解介绍)
* [SpringBoot整合CXF实例](#SpringBoot整合CXF实例)
* [服务端构建](#服务端构建)
* [客户端调用](#客户端调用)
* [异常捕获](#异常捕获)
* [自定义拦截器](#自定义拦截器)
* [服务端拦截器](#服务端拦截器)
* [客户端拦截器](#客户端拦截器)
* [参考资料](#参考资料)
* [总结](#总结)
* [最后](#最后)
* [老生常谈](#老生常谈)
## 一点知识
### 何为Apache-CXF
>`Apache CXF`是一个开源的`Services`框架,`CXF`帮助您利用`Frontend`编程 API 来构建和开发Services,像`JAX-WS`、`JAX-RS`。这些`Services`可以支持多种协议,比如:`SOAP`、`XML/HTTP`、`RESTful HTTP `或者`CORBA`,并且可以在多种传输协议上运行,比如:`HTTP`、`JMS` 或者`JBI`,**CXF大大简化了 Services 的创建,同时它可以天然地和Spring进行无缝集成**。
以下是官网给出的介绍:https://github.com/apache/cxf
![](http://qiniu.xds123.cn/18-11-10/4837068.jpg)
最常用的是使用`cxf`开发`web-service`。本身是基于`JAX-WS`规范来实现的。当然,本身`CXF`也实现了`JAX-RS`规范来实现`RESTFul Service`。
### 关于JAX-WS规范
>`JAX-WS`全称:`Java API for XML-Based Web Services`。`JAX-WS`是一种编程模型,它通过支持将基于注释的标准模型用于开发` Web Service `应用程序和客户机来简化应用程序开发。
`JAX-WS`是Java程序设计语言一个用来创建Web服务的API。
- 在服务器端,用户只需要通过`Java`语言定义远程调用所需要实现的接口`SEI(service endpoint interface)`,并提供相关的实现,通过调用`JAX-WS`的服务发布接口就可以将其发布为`WebService`接口。
- 在客户端,用户可以通过`JAX-WS`的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。当然`JAX-WS`也提供了一组针对底层消息进行操作的API调用,你可以通过`Dispatch`直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。
#### 常用注解介绍
>`JAX-WS`提供了一系列的注解,可以对`WebService`的接口规范化。以下介绍下最常用的几个注解。
- **@WebService**:用于将Java类标记为实现` Web Service `或者将服务端点接口 (SEI) 标记为实现`Web Service`接口。
其包含的属性有:
- name:此属性的值包含XML Web Service的名称。在默认情况下,该值是实现XML Web Service的类的名称,**wsdl:portType **的名称。缺省值为 Java 类的**简单名称 + Service**。(字符串)
- targetNamespace:默认的值为 "http://包名/" ,可以通过此变量指定一个自定义的targetNamespace值。
- serviceName:对外发布的服务名,指定` Web Service `的服务名称:wsdl:service。缺省值为 Java 类的简单名称 + Service。(字符串)
- endpointInterface:
- portName:**wsdl:portName**的值。缺省值为`WebService.name+Port`
- wsdlLocation:指定用于定义 Web Service 的 WSDL 文档的 Web 地址
- **@WebMethod**:表示作为一项`Web Service`操作的方法。仅支持在使用`@WebService `注解的类上使用`@WebMethod`注解。
- **operationName**:指定与此方法相匹配的wsdl:operation 的名称。缺省值为 Java 方法的名称。(字符串)
- **action**:定义此操作的行为。对于 SOAP 绑定,此值将确定 SOAPAction 头的值。缺省值为 Java 方法的名称。(字符串)
- **exclude**:指定是否从 Web Service 中排除某一方法。缺省值为 false。(布尔值)
- **@WebParam**:用于定制从单个参数至`Web Service`消息部件和`XML`元素的映射。
其他注解,可以查看:[WebService注解总结](https://blog.csdn.net/w410589502/article/details/51742004 "WebService注解总结")
为了有个直观感受,大家可以看看以下这个wsdl文件,对应以上各注解属性的值(加了前缀`oKong`)。
```java
//@WebService 属性示例
@WebService(targetNamespace = 'http://www.lqdev.cn/webservice' ,name = "oKongName", serviceName="oKongServiceName", portName = "oKongPortName",endpointInterface="cn.lqdev.learning.springboot.cxf.service.AuthorService")
//@webMethod @WebParam 常用属性示例
@WebMethod(operationName="oKongOperationName",action="oKongAction")
String getAuthorName(@WebParam(name = "paramName") String name);
```
![](http://qiniu.xds123.cn/18-11-10/45706268.jpg)
标记的有点花,⊙﹏⊙‖∣。大家可以自己对照下。
## SpringBoot整合CXF实例
>接下来,我们以一个简单的示例来演示下,如何发布服务及如何进行服务调用。
### 服务端构建
创建一个工程:`spring-boot-cxf-service`.
0.引入CXF的POM文件
```xml
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.2.5</version>
</dependency>
```
1.创建实体,按`JAX-WS`规范,创建接口及其实现类。
`AuthorDto.java`
```java
/**
* 作者信息实体
* @author oKong
*
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class AuthorDto {
String name;
List<String> hobby;
String birthday;
String description;
Sex sex;
}
```
`Sex.java`性别枚举类
```java
/**
* 性别枚举类
* @author oKong
*
*/
public enum Sex {
MALE("male"),
FEMALE("female");
String value;
Sex(String value) {
this.value = value;
}
public String value() {
return value;
}
public static Sex fromValue(String v) {
for (Sex c : Sex.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
```
`AuthorService.java`接口类
```java
/**
* 创建服务接口
* @author oKong
*
*/
@WebService(targetNamespace = WsConst.NAMESPACE_URI ,name = "authorPortType")
public interface AuthorService {
/**
* 根据名称获取作者信息
* @author 作者:oKong
*/
@WebMethod(operationName="getAuthorByName")
AuthorDto getAuthor(@WebParam(name = "authorName") String name);
/**
* 获取作者列表信息
* @author oKong
*/
@WebMethod
List<AuthorDto> getAuthorList();
/**
* 返回字符串测试
* @author oKong
*/
String getAuthorString(@WebParam(name = "authorName")String name);
}
```
`AuthorServiceImpl.java`接口实现类
```java
@WebService(
targetNamespace = WsConst.NAMESPACE_URI, //wsdl命名空间
name = "authorPortType", //portType名称 客户端生成代码时 为接口名称
serviceName = "authorService", //服务name名称
portName = "authorPortName", //port名称
endpointInterface = "cn.lqdev.learning.springboot.cxf.service.AuthorService")//指定发布webservcie的接口类,此类也需要接入@WebService注解
public class AuthorServiceImpl implements AuthorService{
@Override
public AuthorDto getAuthor(String name) {
AuthorDto author = new AuthorDto();
author.setBirthday("1990-01-23");
author.setName("姓名:" + name);
author.setSex(Sex.MALE);
author.setHobby(Arrays.asList("电影","旅游"));
author.setDescription("描述:一枚趔趄的猿。现在时间:" + new Date().getTime());
return author;
}
@Override
public List<AuthorDto> getAuthorList() {
List<AuthorDto> resultList = new ArrayList<>();
AuthorDto author = new AuthorDto();
author.setBirthday("1990-01-23");
author.setName("姓名:oKong");
author.setSex(Sex.MALE);
author.setHobby(Arrays.asList("电影","旅游"));
author.setDescription("描述:一枚趔趄的猿。现在时间:" + new Date().getTime());
resultList.add(author);
resultList.add(author);
return resultList;
}
@Override
public String getAuthorString(String name) {
AuthorDto author = getAuthor(name);
return author.toString();
}
}
```
注意:相关注解可以查看章节:[常用注解介绍](#常用注解介绍)
主要是接口实现类的`@WebService`对应属性值都要wsdl文件的映射关系。
```java
@WebService(
targetNamespace = WsConst.NAMESPACE_URI, //wsdl命名空间
name = "authorPortType", //portType名称 客户端生成代码时 为接口名称
serviceName = "authorService", //服务name名称
portName = "authorPortName", //port名称
endpointInterface = "cn.lqdev.learning.springboot.cxf.service.Auth
没有合适的资源?快使用搜索试试~ 我知道了~
springboot系列教程,基于1.5.x版本.zip
共449个文件
java:265个
xml:63个
properties:56个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 168 浏览量
2024-04-08
22:01:39
上传
评论
收藏 1.06MB ZIP 举报
温馨提示
可以用于毕业设计(项目源码+项目说明)目前在window10/11测试环境一切正常,用于演示的图片和部署教程说明都在压缩包里
资源推荐
资源详情
资源评论
收起资源包目录
springboot系列教程,基于1.5.x版本.zip (449个子文件)
加密工具.bat 238B
mvn_docker.bat 92B
mvn_install.bat 74B
mvn_install.bat 62B
mvnw.cmd 5KB
mvnw.cmd 5KB
mvnw.cmd 5KB
mvnw.cmd 5KB
mvnw.cmd 5KB
mvnw.cmd 5KB
mvnw.cmd 5KB
Dockerfile 380B
sun-jaxb.episode 1KB
mail.ftl 445B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 268B
.gitignore 109B
.gitignore 109B
freemarker.html 377B
thymeleaf.html 333B
index.html 280B
favicon.ico 4KB
jasypt-1.9.2.jar 126KB
maven-wrapper.jar 46KB
maven-wrapper.jar 46KB
maven-wrapper.jar 46KB
maven-wrapper.jar 46KB
maven-wrapper.jar 46KB
maven-wrapper.jar 46KB
maven-wrapper.jar 46KB
maven-wrapper.jar 46KB
MysqlGenerator.java 6KB
MysqlGenerator.java 6KB
RabbitConfig.java 6KB
ObjectFactory.java 6KB
LogAspect.java 5KB
Author.java 4KB
Author.java 4KB
AuthorDto.java 4KB
EmailController.java 4KB
UserController.java 4KB
CacheConfig.java 4KB
UserController.java 4KB
UserController.java 3KB
MyLog4j2Appender.java 3KB
WebServiceConfig.java 3KB
QuartzConfig.java 3KB
ServletController.java 3KB
SpringController.java 3KB
AuthorService.java 3KB
CommonExceptionHandler.java 2KB
CommonExceptionHandler.java 2KB
CommonExceptionHandler.java 2KB
CommonExceptionHandler.java 2KB
HttpDemoController.java 2KB
HttpMessagerLister.java 2KB
CxfWebServiceConfig.java 2KB
DemoController.java 2KB
AuthorEndpoint.java 2KB
TaskController.java 2KB
AuthorListResponse.java 2KB
AuthorListResponse.java 2KB
HttpMessagerService.java 2KB
ObjectFactory.java 2KB
AuthorPortType.java 2KB
RedisConfig.java 2KB
ObjectFactory.java 2KB
DemoController.java 2KB
DemoControllerTest.java 2KB
WebSocketController.java 2KB
UserMapper.java 2KB
DemoController.java 2KB
Chapter7Application.java 2KB
MybatisConfig.java 2KB
GetAuthorListResponse.java 2KB
AuthorServiceImpl.java 2KB
UserXmlMapperTest.java 2KB
UserMapperTest.java 2KB
NotifyMsgServiceImpl.java 2KB
CxfClientConfig.java 2KB
AuthorResponse.java 2KB
AuthorListRequest.java 2KB
AuthorResponse.java 2KB
AuthorListRequest.java 2KB
AuthorRequest.java 2KB
AuthorRequest.java 2KB
AsyncController.java 2KB
共 449 条
- 1
- 2
- 3
- 4
- 5
资源评论
不走小道
- 粉丝: 3331
- 资源: 5060
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 将json文件抽取到kafka的消息队列(topic)中,再从topic中将数据抽取到hdfs上中的json数据
- pdf拆分合并及解决加密无法编辑
- 各城市-人口就业和工资数据(1978-2022年).xlsx
- qq空间历史删除说说查看
- ESG榜单冲击数据(2000-2022年).zip
- pandoc-3.5-windows-x86-64.msi
- 基于SpringBoot框架实现的网上点餐系统(程序+数据库+报告)
- 【安卓毕业设计】基于androidx的跑步app源码(完整前后端+mysql+说明文档+LW).zip
- 基于SpringBoot的旅游网站(程序+数据库+报告)
- sssssssssssssssshhhhhhhhh
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功