一、前言
Apache CXF是一个开源的Services框架,CXF帮助您利用Frontend编程 API 来构建和开发Services,像JAX-WS、JAX-RS。这些Services可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP或者CORBA,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者JBI,CXF大大简化了 Services 的创建,同时它可以天然地和Spring进行无缝集成。
二、常用注解介绍
-
@WebService:用于将Java类标记为实现Web Service或者将服务端点接口 (SEI) 标记为实现Web Service接口。
其包含的属性有:
1、serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service。缺省值为 Java 类的简单名称 + Service。(字符串)2、endpointInterface: 服务接口全路径, 指定做SEI(Service EndPoint Interface)服务端点接口
3、name:此属性的值包含XML Web Service的名称。在默认情况下,该值是实现XML Web Service的类的名称,wsdl:portType 的名称。缺省值为 Java 类的简单名称 + Service。(字符串)
4、portName: wsdl:portName。缺省值为 WebService.name+Port。
5、targetNamespace:指定你想要的名称空间,认是使用接口实现类的包名的反缀
6、wsdlLocation:指定用于定义 Web Service 的 WSDL 文档的 Web 地址。Web 地址可以是相对路径或绝对路径。(字符串)
注意:实现类上可以不添加Webservice注解
-
@WebMethod : 注释表示作为一项 Web Service 操作的方法,将此注释应用于客户机或服务器服务端点接口(SEI)上的方法,或者应用于 JavaBeans 端点的服务器端点实现类。
要点: 仅支持在使用 @WebService 注释来注释的类上使用 @WebMethod 注释
1、operationName:指定与此方法相匹配的wsdl:operation 的名称。缺省值为 Java 方法的名称。(字符串)
2、action:定义此操作的行为。对于 SOAP 绑定,此值将确定 SOAPAction 头的值。缺省值为 Java 方法的名称。(字符串)
3、exclude:指定是否从 Web Service 中排除某一方法。缺省值为 false。(布尔值)
-
@WebParam:用于定制从单个参数至Web Service消息部件和XML元素的映射。
三、SpringBoot整合CXF实例
服务端
创建一个工程:cxf-service
- 引入CXF的POM文件
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.2.5</version>
</dependency>
- 创建实体,按JAX-WS规范,创建接口及其实现类
UserDto.java
/**
* @program: cxf-service
* @description: 用户信息实体
* @author: jason
* @create: 2020-11-11 14:21
**/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
private String UserName;
private String account;
private String password;
private Integer age;
}
UserService.java接口类
/**
* @program: cxf-service
* @description: 创建服务接口
* @author: jason
* @create: 2020-11-11 14:26
**/
@WebService(targetNamespace = WsConst.NAMESPACE_URI ,name = "userPortType")
public interface UserService {
/**
* 根据名称获取用户信息
* @author 作者:jason
*/
@WebMethod(operationName="getAuthorByName")
UserDto getUserDto(@WebParam(name = "userName") String userName);
/**
* 获取用户列表信息