首页 > 代码库 > WebService概述和CXF入门小程序

WebService概述和CXF入门小程序

一. 什么是WedService?

WebService不是框架, 甚至不是一种技术, 而是一种跨平台,跨语言的规范, WebService的出现是为了解决这样的需求场景: 不同平台, 不同语言所编写的应用之间相互调用.


二. WedService有什么用?

WebService可以集中解决以下问题:

1. 远程调用

2. 跨平台调用

3. 跨系统调用


那么WebService在企业中有什么用呢?

1. 同一个公司新旧系统的整合.
2. 不同公司的业务整合: 业务的整合就要带来不同公司的系统整合, 而不同公司的系统可能存在平台不同, 语言不同的问题.
3. 内容聚合: 一个应用需要提供天气预报, 股票行情,黄金行情等, 内容聚合的应用需要调用大量不同平台, 不同语言编写的应用的方法.


三. 面向服务架构(SOA)

1. 什么是面向服务架构: service1, service2, service3 - 所有组件都是"即插即用"的.
   IBM提倡的SOA架构: 希望以"组装电脑"的方式来开发软件
   ① 各种提供服务的组件
   ② 企业服务总线(Enterpise Service Bus - ESB)
2. CXF号称是SOA框架


四. 使用CXF开发WebService程序

1. 环境准备:

① 下载Apache cxf2.2.10环境: http://download.csdn.net/detail/zdp072/7429645

② 所需Jar包: 

    cxf-2.2.10.jar

    geronimo-servlet_2.5_spec-1.2.jar

    jetty-6.1.21.jar

    jetty-util-6.1.21.jar

    wsdl4j-1.6.2.jar

    XmlSchema-1.4.5.jar


③ 配置path环境变量: G:\Java_lib\apache\cxf\apache-cxf-2.2.10\bin (cxf的解压目录)

    命令行输入: wsdl2java查看是否配置成功


2. 开发服务端:

① 开发一个Web Service业务接口, 该接口要用@WebService修饰

@WebService
public interface HelloService {
	public String sayHello(String name);
}

② 开发一个Web Service实现类, 实现类也需要用@WebService修饰

@WebService(endpointInterface="com.zdp.service.HelloService")
public class HelloServiceImpl implements HelloService {
	@Override
	public String sayHello(String name) {
		return name + ", 您好! 现在的时间是: " + new Date();
	}
}

③ 使用Endpoint类的静态方法发布WebService 

public class MyServer {
	public static void main(String[] args) {
		HelloService helloService = new HelloServiceImpl();
		Endpoint.publish("http://localhost/sayHello", helloService);
		System.out.println("Web Service 暴露成功");
	}
}

注: 每个Web Service组件需要2个部分: 接口和实现类


④ 运行MyServer(CXF内置了一个Jetty Web服务器), 在浏览器中输入以下地址: http://localhost/sayHello?wsdl , 如果WebService暴露成功将会在浏览器里看到一个xml文件


3. 开发客户端

① 打开命令行, cd进入客户端的src目录, 运行: wsdl2java http://localhost/sayHello?wsdl , 目的就是通过暴露的wsdl生成Java类

② 写一个客户端测试类:

public class MyClient {
	public static void main(String[] args) {
		HelloServiceImplService factory = new HelloServiceImplService();
		HelloService helloService = factory.getHelloServiceImplPort(); // 返回一个代理
		System.out.println(helloService.sayHello("zhangsan"));
	}
}

③ 代码结构图及下载地址: http://download.csdn.net/detail/zdp072/7429637