1、CXF是什么
cxf是一个开源框架,实现webservice开发,它支持多种协议,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。
cxf开发的webservice可以通过tomcat运行,cxf开发的webservice服务接口可以和javaweb应用程序部署在一块儿,共同使用一个端口80。
cxf基于SOA面向服务架构理念。依赖spring进行各各cxf模块整合。
2、CXF的下载和安装
2.1 下载
从官网下载最新的CXF的版本http://cxf.apache.org/download.html
2.2 安装
由于需要使用到bin目录下的文件,需要配置下面的环境变量。
JAVA_HOME,
CXF_HOME=cxf的目录
Path = %JAVA_HOME%\bin;%CXF_HOME%\bin;
CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar
3、需求
开发一个用户管理的WebService服务端,对外提供用户的增删改查操作。
4、服务端的开发 (利用CXF开发,是在接口上加上@WebService注解)
4.1.1 新建一个Java项目,名称叫UserCXFWebService
将CXF中的jar包全部导入
4.1.2 传输的实体类要实现Serializable接口
- public class User implements Serializable {
- private int id;
- private String name;
- private int age;
- //setter getter
- }
4.2 关于服务接口的定义如下
- //targetNamespace:指定命名空间
- //name:portType的名称
- //portName:port的名称
- //serviceName:服务名称
- //作为发布WebService的类
- @WebService(targetNamespace = "http://user.namager.cn", name = "IUserServiceSoap", portName = "IUserServicePort", serviceName = "IUserService")
- public interface IUserService {
- // 增加用户
- public void add(@WebParam(name = "user") User user);
- // 删除用户
- public void delete(@WebParam(name = "user") User user);
- // 查询用户
- public User findById(@WebParam(name = "id") int id);
- }
4.3 关于接口的实现类
- public class UserServiceImpl implements IUserService {
- // 持有IUserDao的引用,便于操作数据库
- private IUserDao userDao = new UserDaoImpl();
- public IUserDao getUserDao() {
- return userDao;
- }
- public void setUserDao(IUserDao userDao) {
- this.userDao = userDao;
- }
- @Override
- public void add(User user) {
- userDao.add(user);
- }
- @Override
- public void delete(User user) {
- userDao.delete(user);
- }
- @Override
- public User findById(int id) {
- return userDao.findById(id);
- }
- }
4.3 利用CXF发布WebService的代码如下
- public class PublicTest {
- public static void main(String[] args) {
- // 利用cxf的工厂bean发布webservice服务
- // 通过spring配置方式发布服务,实现了下面的代码
- JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
- // 设置webservice服务
- jaxWsServerFactoryBean.setAddress("http://localhost:8080/cuixiangyang");
- // 设置SEI(接口类型)
- jaxWsServerFactoryBean.setServiceClass(IUserService.class);
- // 设置服务提供者即service对象
- jaxWsServerFactoryBean.setServiceBean(new UserServiceImpl());
- // 发布服务
- jaxWsServerFactoryBean.create();
- }
- }
5、客户端的开发
5.1 新建Java项目,名称为UserCXFClient
将CXF中的jar包全部导入
5.2 利用CXF中bin目录下的wsdl2java命令,生成客户端的调用代码
然后发下bin目录下有一个cn文件,里面的文件即是生成的客户端调用代码
5.3 编写客户端的调用代码
1、第一种调用方法 CXF的调用
- public class ClientTest1 {
- public static void main(String[] args) {
- // 通过JaxWsProxyFactoryBean实现客户端调用
- JaxWsProxyFactoryBean wsProxyFactoryBean = new JaxWsProxyFactoryBean();
- // 设置调用的webService的地址
- wsProxyFactoryBean.setAddress("http://localhost:8888/usermanager?wsdl");
- // 设置SEI(接口类型portType)
- wsProxyFactoryBean.setServiceClass(IUserServiceSoap.class);
- // 创建客户端调用对象(也是portType,与上面的接口是一致的)
- IUserServiceSoap port = wsProxyFactoryBean
- .create(IUserServiceSoap.class);
- // 调用webservice发布的方法
- User user = port.findById(1);
- System.out.println(user);
- }
- }
2、第二个调用方法 原始的调用方法
- public class ClientTest2 {
- public static void main(String[] args) throws MalformedURLException {
- // wsdl地址
- URL wsdlDocumentLocation = new URL(
- "http://localhost:8888/usermanager?wsdl");
- // 名称空间,serviceName
- QName serviceName = new QName("http://user.namager.cn", "IUserService");
- // 通过手动指定wsdl地址和服务名称来创建服务视图
- Service service = Service.create(wsdlDocumentLocation, serviceName);
- // portType的class来创建接口,然后调用服务方法
- IUserServiceSoap port = service.getPort(IUserServiceSoap.class);
- // 通过服务来调用方法
- User user = port.findById(1);
- System.out.println(user);
- }
- }
6、利用CXF实现WebService代码的下载
https://download.csdn.net/download/u013310119/10313438