WebService - CXF入门 简单的服务端和客户端

版权声明:《==study hard and make progress every day==》 https://blog.csdn.net/qq_38225558/article/details/85266979

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 服务端和客户端就弄好了哦~

猜你喜欢

转载自blog.csdn.net/qq_38225558/article/details/85266979