CXF
Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。
关于框架
Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。
功能特性
CXF 包含了大量的功能特性,但是主要集中在以下几个方面:
支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL优先开发,也支持从 Java 的代码优先开发模式。容易使用: CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。
CXF优点:
CXF号称是SOA框架,我们做WS只会用到XFire。
CXF内置Jetty Web服务器。
使用CXF开发Web Server端组件都需要“接口”和“实现类”两部分。
支持多种数据格式:XML和JSON(Restful)。
并可以与Spring进行快速无缝的整合
灵 活 的 部 署 : ant(build.xml) maven(pom.xml)
可 以 运 行 有Tomcat,Jboss,Jetty(内 置web 服 务器),IBM Websphere,Bea WebLogic上面。
进入官网http://cxf.apache.org/下载资源 (绿色版的解压即可使用)
温馨小提示:可配置环境变量方便以后使用 --> 方便命令wsdl2java的使用
cmd执行wsdl2java测试是否配置成功
项目使用:
导入jar包
、
CXF - 服务端
注意:还要导入如下jar包
如果没有导入则会出现以下错误
准备服务:
@WebService
public interface IWeatherService {
@WebMethod
@WebResult(name="weather")String getWeather(@WebParam(name="city")String city);
}
@WebService(endpointInterface="com.zhengqing.cxf.server.IWeatherService")
public class WeatherServiceImpl implements IWeatherService{
@WebMethod
public String getWeather(String city) {
return city+":阴雨绵绵";
}
}
发布服务 :
public class PublishService {
public static void main(String[] args) {
// 1.创建JaxWsServerFactoryBean的对象,用于发布服务
JaxWsServerFactoryBean serverFactoryBean = new JaxWsServerFactoryBean();
// 2.设置服务发布地址
serverFactoryBean.setAddress("http://127.0.0.1:8080/getWeather");
// 3.设置服务发布的接口
serverFactoryBean.setServiceClass(IWeatherService.class);
// 4.设置服务的发布对象
serverFactoryBean.setServiceBean(new WeatherServiceImpl());
// 5.使用create方法发布服务
serverFactoryBean.create();
System.out.println("服务发布成功...");
}
}
运行:
发布成功之后浏览器输入地址可访问:http://127.0.0.1:8080/getWeather?wsdl
CXF - 客户端
新建项目 (lib下依然放和服务端一样的13个jar包即可)
在src目录文件夹下执行如下cmd命令 自动生成客户端代码
wsdl2java -p com.zhengqing.cxf.client -encoding utf-8 http://127.0.0.1:8080/getWeather?wsdl
-p : 为执行之后src生成的包名
-encoding : 编码
-s : 源码路径
. : 代表当前路径
-d : 编译后class字节码路径http://127.0.0.1:8080/getWeather?wsdl : ws发布的服务地址
F5刷新项目即可看见根据WebService的wsdl描述生成的客户端代码
新建一个客户端测试类
public class ClientTest {
public static void main(String[] args) {
// 1.创建JaxWsProxyFactoryBean的对象,用于接收服务
JaxWsProxyFactoryBean proxyFactoryBean = new JaxWsProxyFactoryBean();
// 2.设置服务的发布地址,表示去哪里过去服务
proxyFactoryBean.setAddress("http://127.0.0.1:8080/getWeather");
// 3.设置服务的发布接口,使用本地的代理接口
proxyFactoryBean.setServiceClass(IWeatherService.class);
// 4.通过create方法返回接口代理实例
IWeatherService service = (IWeatherService) proxyFactoryBean.create();
// 5.调用远程方法
System.out.println(service.getWeather("成都"));
}
}
运行:
这样一个简单的cxf 服务端和客户端就弄好了哦~