使用CXF开发WebService程序

2024-09-04 03:48

本文主要是介绍使用CXF开发WebService程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、CXF是什么

cxf是一个开源框架,实现webservice开发,它支持多种协议,比如:SOAP1.1,1,2XML/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接口

[java]  view plain  copy
  1. public class User implements Serializable {  
  2.     private int id;  
  3.     private String name;  
  4.     private int age;  
  5.         //setter getter  
  6. }  

4.2  关于服务接口的定义如下

[java]  view plain  copy
  1. //targetNamespace:指定命名空间  
  2. //name:portType的名称  
  3. //portName:port的名称  
  4. //serviceName:服务名称  
  5. //作为发布WebService的类  
  6.   
  7. @WebService(targetNamespace = "http://user.namager.cn", name = "IUserServiceSoap", portName = "IUserServicePort", serviceName = "IUserService")  
  8. public interface IUserService {  
  9.     // 增加用户  
  10.     public void add(@WebParam(name = "user") User user);  
  11.   
  12.     // 删除用户  
  13.     public void delete(@WebParam(name = "user") User user);  
  14.   
  15.     // 查询用户  
  16.     public User findById(@WebParam(name = "id"int id);  
  17. }  


4.3 关于接口的实现类

[java]  view plain  copy
  1. public class UserServiceImpl implements IUserService {  
  2.   
  3.     // 持有IUserDao的引用,便于操作数据库  
  4.     private IUserDao userDao = new UserDaoImpl();  
  5.   
  6.     public IUserDao getUserDao() {  
  7.         return userDao;  
  8.     }  
  9.   
  10.     public void setUserDao(IUserDao userDao) {  
  11.         this.userDao = userDao;  
  12.     }  
  13.   
  14.     @Override  
  15.     public void add(User user) {  
  16.         userDao.add(user);  
  17.     }  
  18.   
  19.     @Override  
  20.     public void delete(User user) {  
  21.         userDao.delete(user);  
  22.     }  
  23.   
  24.     @Override  
  25.     public User findById(int id) {  
  26.         return userDao.findById(id);  
  27.     }  
  28.   
  29. }  

4.3 利用CXF发布WebService的代码如下

[java]  view plain  copy
  1. public class PublicTest {  
  2.     public static void main(String[] args) {  
  3.         // 利用cxf的工厂bean发布webservice服务  
  4.         // 通过spring配置方式发布服务,实现了下面的代码  
  5.         JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();  
  6.         // 设置webservice服务  
  7.         jaxWsServerFactoryBean.setAddress("http://localhost:8080/cuixiangyang");  
  8.         // 设置SEI(接口类型)  
  9.         jaxWsServerFactoryBean.setServiceClass(IUserService.class);  
  10.         // 设置服务提供者即service对象  
  11.         jaxWsServerFactoryBean.setServiceBean(new UserServiceImpl());  
  12.         // 发布服务  
  13.         jaxWsServerFactoryBean.create();  
  14.     }  
  15. }  
浏览器访问wsdl文件



5、客户端的开发

5.1 新建Java项目,名称为UserCXFClient

       将CXF中的jar包全部导入


5.2 利用CXF中bin目录下的wsdl2java命令,生成客户端的调用代码

然后发下bin目录下有一个cn文件,里面的文件即是生成的客户端调用代码



5.3 编写客户端的调用代码

1、第一种调用方法 CXF的调用

[java]  view plain  copy
  1. public class ClientTest1 {  
  2.     public static void main(String[] args) {  
  3.         // 通过JaxWsProxyFactoryBean实现客户端调用  
  4.         JaxWsProxyFactoryBean wsProxyFactoryBean = new JaxWsProxyFactoryBean();  
  5.   
  6.         // 设置调用的webService的地址  
  7.         wsProxyFactoryBean.setAddress("http://localhost:8888/usermanager?wsdl");  
  8.         // 设置SEI(接口类型portType)  
  9.         wsProxyFactoryBean.setServiceClass(IUserServiceSoap.class);  
  10.         // 创建客户端调用对象(也是portType,与上面的接口是一致的)  
  11.         IUserServiceSoap port = wsProxyFactoryBean  
  12.                 .create(IUserServiceSoap.class);  
  13.         // 调用webservice发布的方法  
  14.         User user = port.findById(1);  
  15.         System.out.println(user);  
  16.     }  
  17.   
  18. }  

2、第二个调用方法   原始的调用方法

[java]  view plain  copy
  1. public class ClientTest2 {  
  2.     public static void main(String[] args) throws MalformedURLException {  
  3.         // wsdl地址  
  4.         URL wsdlDocumentLocation = new URL(  
  5.                 "http://localhost:8888/usermanager?wsdl");  
  6.         // 名称空间,serviceName  
  7.         QName serviceName = new QName("http://user.namager.cn""IUserService");  
  8.         // 通过手动指定wsdl地址和服务名称来创建服务视图  
  9.         Service service = Service.create(wsdlDocumentLocation, serviceName);  
  10.         // portType的class来创建接口,然后调用服务方法  
  11.         IUserServiceSoap port = service.getPort(IUserServiceSoap.class);  
  12.         // 通过服务来调用方法  
  13.         User user = port.findById(1);  
  14.   
  15.         System.out.println(user);  
  16.     }  
  17.   
  18. }  

6、利用CXF实现WebService代码的下载

https://download.csdn.net/download/u013310119/10313438


这篇关于使用CXF开发WebService程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134917

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符