天天看點

WebServices個人總結

SOA與Web Service的關系,這是經常被混淆的兩個概念。

SOA(Service-oriented architecture,面向服務的架構)。

将 企業應用系統中細粒度的功能打包成粗粒度的服務,通過中間方式(語言),

實作異構系統(作業系統、開發語言)之間的通訊、調用。

Web Services是一種面向服務的架構的技術,

(SOA并不是一種技術,而是一種軟體設計理念.Web service != SOA,但Web service 是目前實作SOA的最好方式。)

向外界暴露出一個能夠遠端進行調用的程式,主要目的是實作不同平台的應用服務可以互操作。

為了實作這一目标,Web Service 完全基于XML(可擴充标記語言)獨立于平台、獨立于開發語言的标準.

是建立可互操作的、分布式應用程式的新平台。

Web Services平台的技術。

Soap:(Simple Object Access Protocol)簡單對象通路協定。是XML Web Service 的通信協定。

WSDL:(Web Services Description Language) WSDL 檔案是一個 XML 文檔,它對web Services的接口進行了定義 .

UDDI是一種查找相應服務的機制,用于web Services的釋出、浏覽以及查找注冊資訊.

架構(如何工作的)

服務提供者到注冊中心(uddi)注冊自己的服務。服務請求者(用戶端)到注冊中心(uddi)找到需要的web服務,

并獲得服務定義(wsdl),根據wsdl定義就可以調用相應的服務(通過soap協定)。

Web Service的主要目标是跨平台的可互操作性。

優點: 因為Soap協定,是以可以跨防火牆的進行通信 、

應用程式內建 (實作了異構系統) 、

因為不同平台的應用服務可以互相操作,是以實作了軟體和資料重用

完全基于xml可擴充标記語言,是以跨語言 跨平台

缺點:通過http協定進行遠端調用, 通路速度慢、穩定性問題。

Web Service也有架構:如axis1,axis2、xfire、cxf。

Apache Axis2 是Axis的後續版本,是新一代的SOAP引擎。

Axis2的主要特點有:

(1) 采用名為 AXIOM(AXIs Object Model)的新核心 XML 處理模型,利用新的XML解析器提供的靈活性按需構造對象模型。

(2) 支援不同的消息交換模式。目前Axis2支援三種模式:In-Only、Robust-In和In-Out。In-Only消息交換模式隻有SOAP請求,而不需要應答;

Robust-In消息交換模式發送SOAP請求,隻有在出錯的情況下才傳回應答;In-Out消息交換模式總是存在SOAP請求和應答。

(3) 提供阻塞和非阻塞用戶端 API。

(4)* 支援内置的 Web服務尋址 (WS-Addressing) 。

(5) 靈活的資料綁定,可以選擇直接使用 AXIOM,使用與原來的 Axis 相似的簡單資料綁定方法,

或使用 XMLBeans、JiBX 或 JAXB 2.0 等專用資料綁定架構。

(6) 新的部署模型,支援熱部署。

(7)* 支援HTTP,SMTP,JMS,TCP傳輸協定。

(8) 支援REST (Representational State Transfer)。

axis2是一個web service架構,以下是使用中的一些總結:

1、要傳遞的對象首先必須實作serializable接口

2、axis2不支援方法重載。

在對外釋出的接口中不能使用方法重載,

如果你寫了多個重名的方法,在該service中隻會注冊一個。

解決方法:更改成不同的方法名

3、axis2不支援事務。

資料庫增删改查一般都需要事務處理的,但是在對外釋出的接口中是不能配置事務的。

解決方法:或者寫一個代理類或者直接在dao中進行事務管理。

4、AXIS2 1.4.1不支援java.util.Date type

Time portion of java.util.Date is missing from SOAP response in Axis2 1.5

瞧瞧axis2 的這些個bug,使用起來太不友善了。

雖然Apache的官方網站的bug頁上有解決方案,但是我把DateService.aar檔案考下來後仍然報相同的錯誤:

Axis2 1.5隻能傳回日期部分,時間部分丢失了!

解決方法:把Date類型都改成String類型的,這樣是最安全的,但可能跟要求不符,應該不能算是一個好的解決方案吧。

5、axis2在java中不支援二進制對象的傳遞如inputSream,。

解決方法:将二進制流轉換為隻能傳遞byte[]。

6、axis2不能傳遞list、Map 類型的資料集合。

解決方法:将list轉換成數組類型。

項目中如何使用:

在我們的項目中,首先是将項目分布成幾個小子產品,對這些小的子產品進行編碼.

編碼完成以後在通過webService連接配接起來,進行測試,這樣做的好處就是