Web Service——CXF
1. 什么是CXF
Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。Apache CXF 是一个开源的 web Services 框架,CXF 帮助您构建和开发 Web Services ,它支持多种协议,比如:SOAP1.1,SOAP1.2 、XML/HTTP、RESTful HTTP 或者CORBA。
RESTful:一种风格而不是一个协议。它理念是网络上的所有事物都被抽象为资源,每个资源对应一个唯一的资源标识符。
- CXF是基于SOA总线结构,依靠spring完成模块的集成,实现SOA方式。
- 灵活的部署:可以运行在Tomcat、Jboss、Jetty(内置)、weblogic上面。
- CXF支持数据格式:XML,JSON(仅在REST方式下支持)。
2. 安装CXF
2.1 下载地址:http://cxf.apache.org/download.html下载
2.2 解压 apache-cxf-3.2.4.zip 到指定目录
2.3 创建系统变量CXF_HOME,变量值为解压目录,将CXF_HOME加入到Path路径下
2.4 cmd 下输入命令wsdl2java -h ,回车
3. CXF发布SOAP协议的服务
3.1 需求
服务端:发布服务,接收客户端的城市名,返回天气数据给客户端
客户端:发送城市名给服务端,接收服务端的响应信息,打印
3.2 服务端实现
第一步: 创建一个java工程
第二步: 导入cxf的jar包(%CXF_HOME%\lib目录下)。147个。
第三步: 编写SEI接口。需要在SEI接口上添加@Webservice注解。
import javax.jws.WebService; @WebService
public interface WeatherInterface {
public String QueryWeather(String cityName);
}
第四步: 编写SEI实现类。不需要加注解。
public class WeatherInterfaceImpl implements WeatherInterface {
@Override
public String QueryWeather(String cityName) {
System.out.println("from client..." + cityName);
if ("北京".equals(cityName)) {
return "晴转多云";
} else {
return "雨转小雪";
}
}
}
第五步: 发布服务
1、创建一个JaxWsServerFactoryBean对象
2、设置SEI接口setServiceClass
3、设置SEI实现类对象。setServiceBean
4、设置服务发布地址。setAddress
5、发布服务。Create
import org.apache.cxf.jaxws.JaxWsServerFactoryBean; public class WeatherServer { public static void main(String[] args) {
// JaxWsServerFactoryBean发布服务
JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
// 设置服务接口
jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class);
// 设置服务实现类
jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl());
// 设置服务地址
jaxWsServerFactoryBean.setAddress("http://127.0.0.1:12345/weather");
// 发布
jaxWsServerFactoryBean.create();
}
}
此时直接访问使用说明书地址即可。
Tips:JaxWsServerFactoryBean实现特点:
- JaxWsServerFactoryBean发布,设置3个参数,1.服务接口;2.服务实现类;3.服务地址;
- Endpoint仅支持发布实现类,JaxWsServerFactoryBean支持发布接口。
CXF也能够实现基于SOAP1.2的服务端,实现方法如下
在接口上加入 @BindingType(SOAPBinding.SOAP12HTTP_BINDING) 注解,重新发布服务端即可
import javax.jws.WebService;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.SOAPBinding; @WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public interface WeatherInterface { public String QueryWeather(String cityName);
}
3.3 客户端实现
第一步:生成客户端代码
Wsdl2java命令是CXF提供的生成客户端的工具,他和wsimport类似,可以根据WSDL生成客户端代码
Wsdl2java常用参数:
- d,指定输出目录
- p,指定包名,如果不指定该参数,默认包名是WSDL的命名空间的倒序
Wsdl2java支持SOAP1.1和SOAP1.2
wsdl2java -p com.zang.cxf.weather -d . http://127.0.0.1:12345/weather?wsdl
第二步:使用说明书,使用生成代码调用服务端
JaxWsProxyFactoryBean调用服务端,设置2个参数,1.设置服务接口;2.设置服务地址
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.zang.cxf.weather.WeatherInterface; public class WeatherClient {
public static void main(String[] args) {
// JaxWsProxyFactoryBean调用服务端
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
// 设置服务接口
jaxWsProxyFactoryBean.setServiceClass(WeatherInterface.class);
// 设置服务地址
jaxWsProxyFactoryBean.setAddress("http://127.0.0.1:12345/weather");
// 获取服务接口实例
WeatherInterface weatherInterface = jaxWsProxyFactoryBean.create(WeatherInterface.class);
// 调用查询方法
String weather = weatherInterface.queryWeather("北京");
System.out.println(weather);
}
}
4. CXF拦截器
4.1 拦截器特点
- 拦截器可以拦截请求和响应
- 拦截器可以有多个
- 拦截器可以根据需要自定义
4.2 拦截器的使用
获取拦截器列表,将自己的拦截器加入列表(拦截器必须加到服务端,在服务端发布之前)。
例如,在服务端添加日志拦截器,访问时打印日志
//略
//加入拦截器
jaxWsServerFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
jaxWsServerFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
// 发布
jaxWsServerFactoryBean.create();
控制台打印如下
Web Service——CXF的更多相关文章
- Web Service CXF的工作流程
我们一起走进系统的内部,跟随每一个调用,去透视系统的每一个层面. 一.我们定义整个目录都在CXFServlet的监控之下 <servlet> <servlet-name>CXF ...
- Web Service——CXF发布REST服务
1. 什么是REST REST,英文representational state transfer(表象性状态转变)或者表述性状态转移,REST是web服务的一种架构风格,使用HTTP.URI.XML ...
- Web Service——CXF+Spring 整合
结合spring框架来实现CXF发布SOAP协议的服务,步骤基本相同,所不同的是的多了一些配置项,步骤如下 1. 服务端 第一步:创建web项目(引入jar包) 第二步:创建SEI接口 import ...
- Spring 4 集成Apache CXF开发JAX-RS Web Service
什么是JAX-RS 在JSR-311规范中定义,即Java API for RESTful Web Services,一套Java API,用于开发 RESTful风格的Webservice. 工程概 ...
- 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...
- Apache CXF实现Web Service(5)—— GZIP使用
Apache CXF实现Web Service(5)-- GZIP使用 参考来源: CXF WebService整合Spring Apache CXF实现Web Service(1)--不借助重量级W ...
- Apache CXF实现Web Service(4)——Tomcat容器和Spring实现JAX-RS(RESTful) web service
准备 我们仍然使用 Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 中的代码作为基础,并 ...
- Apache CXF实现Web Service(3)——Tomcat容器和不借助Spring的普通Servlet实现JAX-RS(RESTful) web service
起步 参照这一系列的另外一篇文章: Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 首先 ...
- Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service
实现目标 http://localhost:9000/rs/roomservice 为入口, http://localhost:9000/rs/roomservice/room为房间列表, http: ...
随机推荐
- 解决sqoop报错:java.lang.OutOfMemoryError: Java heap space
报错栈: -- ::, INFO [main] org.apache.sqoop.mapreduce.db.DBRecordReader: Executing query: = ) AND ( = ) ...
- 微商营销实战技巧分享,轻松月入10W
如今能够说是移动互联时代.在这个时代,微信眼下能够说是当之无愧的移动应用,依据报道,眼下微信有7个多亿的用户,怪不得那么多人看到微商的时代,一大批人開始涌入微商,导致如今微信上卖产品都已经泛滥了,导致 ...
- [Git] An efficient GIT workflow for mid/long term projects
reference : http://fle.github.io/an-efficient-git-workflow-for-midlong-term-projects.html Our full-w ...
- MIR Flickr 1M 图像数据集(点击即可下载)
Index of /mirflickr/mirflickr1m Name Last modified Size Description Parent Directory - exif.zip ...
- OpenCV学习(37) 人脸识别(2)
在前面一篇教程中,我们学习了OpenCV中基于特征脸的人脸识别的代码实现,我们通过代码 Ptr<FaceRecognizer> model = createEigenFaceR ...
- 混沌数学之Kent模型
相关软件:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/view/7c6f4a000740be1e650e9a75.html // 肯特映射 clas ...
- API手册 常用功能
directive [ng] a form input input [checkbox] input [email] input [number] input [radio] input [text] ...
- C#汉字转拼音,可识别多音字,带声调,提供正向、逆向、双向分词算法的小程序
用C#写了个汉字转拼音的小工具,和网上大部分工具不同,这个通过分词算法,解决了多音字的问题,并且提供声调,可开可关. 如题,用"银行 行不行 行家说了算"举例,如果转拼音却不能识别 ...
- GO语言基础之interface
接口interface 1. 接口是一个或多个方法签名的集合 2. 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这称为 Structural typing 3. ...
- word 文档如何加密
给Word文档加密主要有以下几个方法:文件加密文件菜单设置:1.打开需要加密的Word文档.2.选“文件”的“另存为”,出现“另存为”对话框,在“工具”中选“常规选项”,出现“保存”选项卡.3.分别在 ...