1. 程式人生 > >WebService概述和CXF入門小程序

WebService概述和CXF入門小程序

定義 clas zhang 目的 配置 service組件 ott code 方式

一. 什麽是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框架


四. WebService三大技術基礎

1. WSDL: web service definition language - web service定義語言

- 通俗地說, WSDL文檔描寫敘述了Web Service例如以下三個方面:
- WHAT: 該Web Service 包括什麽操作
- HOW: 該Web Service的操縱應該如何調用
- WHERE: 該Web Service的服務地址


2. SOAP: Simple Object Access Protocol: 簡單對象訪問協議

一次web service的調用, 事實上並非方法調用, 而是發送SOAP消息(即xml文檔片段)


3. UDDI: Universal Description, Discovery and Integration

UDDI 是一種文件夾服務。企業能夠使用它對 Web services 進行註冊和搜索


※ 調用一次Web Service的本質:
1. client把調用方法參數, 轉換成XML文檔片段(SOAP消息 - input消息) - 該文檔片段必須符合WSDL定義的格式
2. 通過網絡, 把xml文檔片段傳給server
3. server接收到xml文檔片段
4. server解析XML文檔片段, 提取當中的數據, 並把數據轉換調用Web Service所須要的參數值
5. server端運行方法
6. 把運行方法得到的返回值, 再次轉換為生成為XML文檔片段(SOAP消息 - output消息)- 該文檔片段必須符合WSDL定義的格式
7. 通過網絡, 把xml文檔片段傳給client
8. client接受到xml文檔片段
9. client解析xml文檔片段, 提取當中的數據, 並把數據轉換調用Web Service的返回值
從上面調用本質來看, 要一個語言支持web service唯一的要求是: 該語言支持xml文檔的解析, 生成, 支持網絡傳輸


五. 使用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業務接口, [email protected]

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

② 開發一個Web Service實現類, [email protected]

@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 Webserver), 在瀏覽器中輸入下面地址: http://localhost/sayHello?wsdl , 假設WebService暴露成功將會在瀏覽器裏看到一個xml文件


3. 開發client

① 打開命令行, cd進入client的src文件夾, 執行: wsdl2java http://localhost/sayHello?wsdl , 目的就是通過暴露的wsdl生成Java類

② 寫一個client測試類:

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

技術分享


WebService概述和CXF入門小程序