什么是 CXF?
CXF 是目前最主流 WebService 开发框架 ,由 Apache 提供。
CXF WebService 开发,主要分为两种服务提供方式 WS 、RS
- JAX-WS 传输数据,就是 XML 格式,基于 SOAP 协议
- JAX-RS 传输数据,传输 XML 格式或者 JSON 格式,基于 HTTP 协议
JAX-WS独立服务使用
1、 建立 maven java 项目
2、 在项目中导入 CXF jar 包支持
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>
使用 maven 坐标,要提供 jaxws 服务,引入 jaxws 的 jar 包 , 要提供 jaxrs 服务,引入 jaxrs 的 jar 包。
注意:版本号必须写,且为3.0.0及以后的版本
3、 编写服务端程序
编写实体类
public class User {
private Integer id;
private String userName;
private String city;
// 省略getter、setter
}
编写服务
@WebService 使用类上面,标记类是 WebService 服务提供对象
@WebMethod 使用方法上面,标记方法 是 WebService 服务提供方法
@WebService
public interface IUserService {
@WebMethod
String sayHello(String name);
}
public class UserServiceImpl implements IUserService {
public String sayHello(String name) {
return "Hello, " + name;
}
}
将 服务方法发布到网络上,给其它系统调用
public class ServerApplication {
public static void main(String[] args) {
JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
//发布的地址和服务名
jaxWsServerFactoryBean.setAddress("http://localhost:9999/userService");
jaxWsServerFactoryBean.setServiceClass(UserServiceImpl.class);
Server server = jaxWsServerFactoryBean.create();
server.start();
System.out.println(">>>>>>>>开始服务>>>>>>>>");
}
}
4、 编写客户端操作
生成桩
创建一个目录(可以随便)来保存生成class文件,利用如下命令
wsimport -s . -p com.example.server http://localhost:9999/userService?wsdl
打jar包,导jar包(这一步可以省略)
把目录下的一堆class文件打成jar包,打开命令行,进入上面创建的目录下,执行如下命令
jar cvf cxf-m-server.jar *
其中,文件名可以随意取。
在maven项目中,创建一个和src同级的目录叫lib,把jar包拷贝到lib中,然后右键(以idea为例)选在Add as Library
如果不打成jar包,就像 https://blog.csdn.net/xiaoxiao_su123/article/details/110872112 那样处理即可。
编写客户端
public class ClientApplication {
public static void main(String[] args) {
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
// 只有导入jar包,才能引入这个类
jaxWsProxyFactoryBean.setServiceClass(IUserService.class);
jaxWsProxyFactoryBean.setAddress("http://localhost:9999/userService?wsdl");
IUserService userService = (IUserService) jaxWsProxyFactoryBean.create();
String result = userService.sayHello("李四");
System.out.println(result);
}
}
参考文章
https://baijiahao.baidu.com/s?id=1634936856075892795&wfr=spider&for=pc