Web Service Study(1)

Web service—不是框架,更不是一種技術,二是一種跨平臺、跨語言的規範

 

爲了解決這樣的需求場景:
         不用平臺、不同語言所編寫的應用之間如何相互調用?
web service實際中的用途:

1、  同一公司的新、舊系統的整合

Linux上java應用去調用windows平臺的delphi應用

2、  不同公司的業務整合

業務的整合就要帶來。不同公司的系統整合

不同公司的系統可能存在平臺不同、語言不同的問題

3、  內容聚合

一個應用,比如需要提供天氣預報、股票行情、黃金行情、編程語言排行

這個內容聚合的應用,需要調用大量不同平臺、不用語言編寫的應用的方法

 

 

CFX

         Axis(Apache)---Axis2(Apache)

         XFire---CFX(XFire+Celtrix)

 

XFire(Web Service框架)

Celtrix(ESB框架)

 

SOA(面向服務的架構)

         Sercice1,Sercice2,Sercice3—所有組件都是“即插即用”的

         IBM提倡的SOA架構,希望以“組裝電腦”的方式來開發軟件

1.      各種提供服務的組件(Web Service)

2.      企業服務總線(Enterprise Service Bus,ESB)

 

CFX號稱是SOA框架

CFX(Apache)

         CFX內置了一個JettyWeb服務器

/********************************

每個web service需要兩個部分:接口是實現類

**********************************/

 

使用CFX開發web service開發服務器端:

(1)      開發一個web service業務接口

該接口要用@webservice修飾

(2)      開發一個web service實現類

實現累也需要用@webservice修飾

(3)      發佈webservice

 

使用CFX開發web service開發客戶端:

(1)      調用CFX提供的wsdl2java工具,根據wsdl文檔生成相應的java代碼

Wsdl-web service definition language

任何語言實現了web service,都需要提供、並暴露wsdl文檔

(2)      找到wsdl2java所生成類中,一個繼承了service的類

該類的實例可當成工廠來使用

(3)      調用service子類的實力的getXxxPort()方法,返回遠程web service的代理

 

形參、返回值

1、  當形參、返回值的類型是String、基本數據類型時,CFX肯定可以輕鬆的處理

2、  當形參、返回值類型是JavaBean形式的複合類、List集合、數組時

CFX也可以很好的處理

3、  還有一些像Map、非JavaBean式的複合類,CFX是不可以處理的

 

/**************************

XML裏的兩個屬性:
targetNamespace   -    相當於Java語言裏的package

Xmlns:                     -          相當於Java語言裏的impor

 

*************************/

Web Service的三個技術基礎:
    1、WSDL Web ServiceDefinition Language  Web服務定義語言

         2、SOAP SimpleObject Access Protocol 簡單對象訪問協議

         3、UDDI

一次web Service的調用----其實不是方法調用,而是發送SOAP消息(即XML文檔片段)

 

對於sayHi操作來說

         傳入消息是:

         <sayHi>

                   <argo>字符串</arg0>

         </sayHi>

         傳出消息是:

         <sayHiResponse>

                   <return>字符串</return>

 

對於getCatsByUser操作來說

         傳入消息是:

         <getCatsByUser>

                   <arg0>

                            <address>字符串</address>

                            <id>整數值</id>

                            <pass>字符串</pass>

                   </arg0>

         </getCatsByUser>

         傳出消息是:

         <getCatsByUserResponse>

                   <return>   ----可出現0~N次(模擬了List對象)

                            <color>字符串</color>

<id>整數型</id>

<name>字符串</name>

                   </return>

         </getCatsByUserResponse>

 

通俗的說,WSDL文檔描述了web Service如下2個方面:

What:該web Service包含了幾個

How:該web Service的操作應該怎樣調用

Where:該web Service的服務地址。

/*******************************

只要得到web Service的WSDL文檔,接下來程序就可以調用web Service

*******************************/

調用一次web service的本質:

1、  客戶端把調用方法參數,轉換成XML文檔片段(SOAP消息)

----給文檔片段必須複合WSDL定義的格式。

2、  通過網絡,把XML文檔片段發送給服務區

3、  服務器接收到XML文檔片段

4、  服務器解析XML文檔片段,提取其中的數據,並把數據轉換調用web Service所需的參數值

5、  服務器執行方法

6、  把執行方法得到的返回值再次轉換成爲XML文檔片段(SOAP消息)

---該文檔片段必須符合WSDl定義的格式

7、  通過網絡把XMl文檔片段傳給客戶端

8、  客戶端接收到XML文檔片段

9、  客戶端解析XML文檔片段,提取其中的數據,並把數據轉換調用web Service的返回值

 

從上面調用本質來看,要一個語言支持web Service,唯一的要求是:該語言支持XML文檔的解析、生成、支持網絡傳輸

 

在CFX開發中,如果遇到CFX無法處理的類型,就需要程序員自行處理

處理思路是:提供一個轉換器,該轉換器負責把CFX搞不定的類型,轉換成CFX搞得定的類型

(1)      使用@xmlJavaTypeAdapter修飾CFX無法處理的類型。

使用該Annotation時,通過value屬性指定一個轉換器

(2)      實現自己的轉換器,實現轉換器時,需要開發一個CFX搞得定的類型

 

對於getAllCats操作來說。

         傳入消息是:

         <getAllCats>

         </getAllCats>

         傳出消息是:

         <getAllCatsResponse>

                   <return>

                            <entries>  ------可出現0~N次

                                     <key>字符串</key>

                                     <value>

                                               <color>字符串</color>

                                               <id>整數值</id>

                                               <name>字符串</name>

</vlaue>

                            </entries>

                   </return>

         </getAllCatsResponse>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章