




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.1Axis2分析報(bào)告.2第一部分:需求分析.3背景“網(wǎng)絡(luò)服務(wù)”(Web Services),是指一些在網(wǎng)絡(luò)上運(yùn)行的、面向服務(wù)的、基于分布式程序的軟件模塊,網(wǎng)絡(luò)服務(wù)采用HTTP和XML等互聯(lián)網(wǎng)通用標(biāo)準(zhǔn),使人們可以在不同的地方通過不同的終端設(shè)備訪問WEB上的數(shù)據(jù),如網(wǎng)上訂票,查看訂座情況。網(wǎng)絡(luò)服務(wù)在電子商務(wù)、電子政務(wù)、公司業(yè)務(wù)流程電子化等應(yīng)用領(lǐng)域有廣泛的應(yīng)用,被業(yè)內(nèi)人士奉為互聯(lián)網(wǎng)的下一個(gè)重點(diǎn)。隨著互聯(lián)網(wǎng)使用人群越來越多,互聯(lián)網(wǎng)本身和其相關(guān)技術(shù)都發(fā)展的越來越快,網(wǎng)絡(luò)服務(wù)已經(jīng)成為現(xiàn)代互聯(lián)網(wǎng)中信息交流和信息共享中不可缺少的一部分。.4Axis2背景Axis2是下一代 Apache Axis。Axis2
2、 雖然由 Axis 1.x 處理程序模型提供支持,但它具有更強(qiáng)的靈活性并可擴(kuò)展到新的體系結(jié)構(gòu)。Axis2 基于新的體系結(jié)構(gòu)進(jìn)行了全新編寫,而且沒有采用 Axis 1.x 的常用代碼。支持開發(fā) Axis2 的動(dòng)力是探尋模塊化更強(qiáng)、靈活性更高和更有效的體系結(jié)構(gòu),這種體系結(jié)構(gòu)可以很容易地插入到其他相關(guān) Web 服務(wù)標(biāo)準(zhǔn)和協(xié)議(如 WS-Security、WS-ReliableMessaging 等)的實(shí)現(xiàn)中。Apache Axis2 是Axis的后續(xù)版本,是新一代的SOAP引擎。.5目的目的我們的編寫目的是通過探索Axis2的設(shè)計(jì)架構(gòu)和開發(fā)模式來更好地理解軟件體系結(jié)構(gòu)在系統(tǒng)設(shè)計(jì)中的重要性,尤其在互聯(lián)
3、網(wǎng)時(shí)代,信息交流大、數(shù)據(jù)通信頻繁的特點(diǎn)下,對(duì)網(wǎng)絡(luò)服務(wù)框架的研究將有助于我們更好地理解和體驗(yàn)現(xiàn)代互聯(lián)網(wǎng)應(yīng)用框架的意義和內(nèi)部原理。.6需求分析 網(wǎng)絡(luò)服務(wù)支持支持廣泛使用的基于HTTP的SOAP協(xié)議,包括SOAP 1.1和SOAP 1.2。同時(shí)支持REST樣式的網(wǎng)絡(luò)服務(wù)模型。支持Spring框架.7需求分析 傳輸協(xié)議支持在SOAP發(fā)送方和接收方中支持多種協(xié)議比如SMTP、FTP和消息導(dǎo)向性中間件。支持WSDL 2.0中的MEP(消息交換模式).8需求分析 客戶端支持引言:大多數(shù)網(wǎng)絡(luò)服務(wù)框架都支持阻塞的網(wǎng)絡(luò)服務(wù)調(diào)用,但是現(xiàn)在越來越多的網(wǎng)絡(luò)服務(wù)框架開始支持非阻塞網(wǎng)絡(luò)服務(wù)調(diào)用。其實(shí)不僅僅是網(wǎng)絡(luò)服務(wù),網(wǎng)絡(luò)應(yīng)
4、用程序都開始傾向于非阻塞調(diào)用,比如AJAX。因此框架客戶端調(diào)用需支持阻塞和非阻塞態(tài)調(diào)用。.9需求分析 擴(kuò)展性支持不管是服務(wù)器端還是客戶端,整個(gè)SOAP消息處理流程(也就是消息的接收與處理,和構(gòu)建與發(fā)送)都必須支持可擴(kuò)展性,所有流程可以改變,并且支持用戶自定義的處理模塊。.10需求分析 性能要求框架需提供專有的XML解析器來最大化得優(yōu)化SOAP中XML的處理性能。對(duì)于客戶端API提供XML構(gòu)造器來快速創(chuàng)建XML數(shù)據(jù)并封裝到SOAP中傳輸。整個(gè)網(wǎng)絡(luò)服務(wù)調(diào)用流程,不管是阻塞還是非阻塞,都必須可適應(yīng)高頻率的并發(fā)調(diào)用,并始終保持系統(tǒng)的有效有序運(yùn)行。擴(kuò)展性支持不會(huì)對(duì)整個(gè)處理流程造成過多性能損耗。.11第二
5、部分:系統(tǒng)設(shè)計(jì)分析和管道過濾器模型.12系統(tǒng)設(shè)計(jì) Axis2的模塊部署模塊代碼生成模塊核心組件信息處理模塊SOAP處理模塊XML處理模塊客戶端API傳輸組件.13系統(tǒng)設(shè)計(jì) - 管道過濾器模式管道過濾器模式:Pipeline and Filters pattern,從名稱上可以看出來,它形象得描述了一種消息處理的模式,即以一種類似管道和過濾器的處理方式逐步對(duì)數(shù)據(jù)進(jìn)行處理。管道:需要處理的數(shù)據(jù)。過濾器:處理的執(zhí)行。.14系統(tǒng)設(shè)計(jì) - 管道過濾器模式前一個(gè)過濾器的輸出是后一個(gè)過濾器的輸入。執(zhí)行過程環(huán)環(huán)相扣,如果一個(gè)過濾器沒有輸出,后續(xù)過濾器就沒有了輸入,因此無法進(jìn)行。每一個(gè)執(zhí)行點(diǎn)都可以有反饋機(jī)制,這
6、樣整個(gè)執(zhí)行過程是可控制的。例如一些腳本執(zhí)行器就是采用類似管道過濾器模式,如下圖:.15系統(tǒng)設(shè)計(jì) 管道過濾器處理方式為了滿足需求分析中:分段、高效、支持?jǐn)U展的處理方式。Axis2使用了管道過濾器模式的處理方式。最外層管道邏輯處理流:SOAP請(qǐng)求和回應(yīng)中層管道引擎執(zhí)行流:處理單元底層管道單元執(zhí)行流:最基本原子執(zhí)行單元.16系統(tǒng)設(shè)計(jì) 第一層:邏輯處理流Axis2會(huì)根據(jù)MEP(消息交換模式)的不同來決定最外層的邏輯處理流:.17系統(tǒng)設(shè)計(jì) 第二層:引擎執(zhí)行單元Axis2的執(zhí)行引擎是在第二層之上的,在第一層邏輯層之下,引擎處理層則把輸入流和輸出流的各個(gè)步驟具體刻畫出來。.18系統(tǒng)設(shè)計(jì) 第三層原子執(zhí)行到達(dá)第
7、三層,執(zhí)行的模塊就不可再分了。Axis2會(huì)使用原子執(zhí)行模塊代表管道過濾器中的節(jié)點(diǎn)。.19系統(tǒng)設(shè)計(jì) 多層管道過濾器的連接多層管道過濾器采用類似面對(duì)對(duì)象編程中對(duì)象的繼承和多態(tài)特性,一層管道過濾器看起來是線性的,但是一個(gè)過濾器類型的執(zhí)行可能會(huì)誘發(fā)另一個(gè)子管道過濾器,這樣這個(gè)過濾器的執(zhí)行就是其包含的子管道過濾器先得執(zhí)行。那么此時(shí)邏輯上這個(gè)管道過濾器執(zhí)行就具有多層的意義了。如下圖:.20Axis執(zhí)行引擎概括 第一層客戶端基于HTTP網(wǎng)絡(luò)服務(wù)傳輸協(xié)議Axis2執(zhí)行引擎服務(wù)端SOAP請(qǐng)求InFlow或者InFaultFlow接受方WebService執(zhí)行SOAP回應(yīng)OutFlow或者OutFaultFlow
8、.21Axis2執(zhí)行引擎 第二層,第三層下圖中的Phase代表第二層單元,Handler代表第三層概念。具體代碼實(shí)現(xiàn)在后面會(huì)詳解。.22第三部分:系統(tǒng)實(shí)現(xiàn)分析.23Axis2最底層管道過濾器最底層管道過濾器 - Handler和和Context剛才講過,Axis2中的最底層管道過濾器執(zhí)行是原子的,不可再分的,因此管道過濾器直接對(duì)應(yīng)Handler和MessageContext對(duì)象:.24Axis2最底層管道過濾器最底層管道過濾器 - Handler和和ContextHandler是一個(gè)接口。命名空間:org.apache.axis2.engineHandler是沒有狀態(tài)存儲(chǔ)的:Stateless
9、。因此可以理解成是一種靜態(tài)的支持并發(fā)操作的對(duì)象,當(dāng)然實(shí)際上它還是非靜態(tài)的。管道過濾器的具體執(zhí)行類型都是可擴(kuò)展的:Handler和MessageContext都是可擴(kuò)展類型,僅定義必要執(zhí)行和操作接口。整個(gè)過程是可控制的: 通過InvocationResponse類型。.25Handler類型Handler類型定義如下常用方法:名稱作用getName返回名稱getParameter根據(jù)參數(shù)名稱返回參數(shù)類型(Parameter類型)invoke參數(shù)MessageContext,返回值InvocationResponse。調(diào)用Handler 的執(zhí)行flowComplete參數(shù)MessageContex
10、t,類似事件。當(dāng)Handler執(zhí)行完畢后,Axis2引擎會(huì)調(diào)用Handler的flowComplete函數(shù)。.26Handler類型Handler定義一個(gè)Nested Class:InvocationResponse,后者定義三個(gè)靜態(tài)字段:CONTINUE、SUSPEND、ABORT控制當(dāng)一個(gè)過濾器完成后,是否繼續(xù)或者暫停還是停止后續(xù)的操作。.27AbstractContext類型介紹完管道過濾器中的過濾器類型:Handler,我們來看管道對(duì)應(yīng)的類型:AbstractContext。Axis2的AbstractContext類型在命名空間:org.apache.axis2.context內(nèi)。該
11、類型是用來存儲(chǔ)任何過濾器操作中的抽象數(shù)據(jù)類型核心定義.28AbstractContext類型類型定義如下字段(全部是派生類可見的):定于如下函數(shù):名稱類型propertiesMapparentAbstractContextlastTouchTimelong名稱作用getProperty, setProperty, mergeProperties, getPropertiesNames對(duì)存儲(chǔ)屬性的操作(添加、刪除、合并)getParent,isAncestor, setLastTouchedTime其他非存儲(chǔ)屬性相關(guān)操作.29自定義一個(gè)Handler類型了解了上述信息我們可以自定義一個(gè)Handl
12、er類型:/定義一個(gè)類型繼承自Axis2中的AbstractHandler類型public class MyHandler extends AbstractHandler public SimpleHandler() public InvocationResponse invoke(MessageContext msgContext) /判斷MessageContext中是否有叫abc的屬性,如果沒有的話,暫停整個(gè)管道過濾器處理流程 if(msgContext.getProperty(abc) = null) return InvocationResponse.SUSPEND; /如果有的話,
13、返回CONTINUE,繼續(xù)整個(gè)流程 return InvocationResponse.CONTINUE; .30Axis2第二層管道過濾器 Phase這是系統(tǒng)設(shè)計(jì)中第二層:引擎執(zhí)行單元的具體執(zhí)行,在Axis2中,這層的類型名稱是Phase類型。命名空間:org.apache.axis2.engine它具備如下特點(diǎn):定義一系列有序的Handler。是Axis2中新加的概念。Phase類型執(zhí)行Handler接口,因此Phase就是一種Handler,只不過是一個(gè)特殊的可以包含子Handler的Handler。.31Axis2第二層管道過濾器 PhasePhase類型的函數(shù):名稱作用getHand
14、lers, addHandler, removeHandler對(duì)子Handler的操作Invoke 參數(shù)是MessageContext,執(zhí)行所有子HandlergetName, setNamePhase本身名稱操作.32Axis2第二層管道過濾器 PhaseAxis引擎在運(yùn)行時(shí)是以Phase為執(zhí)行單位的,Axis2引擎只會(huì)調(diào)用Phase的Invoke函數(shù),而Phase類型的Invoke函數(shù)會(huì)調(diào)用背后包含的Handler的所有Invoke函數(shù)。如下圖:.33Axis2第三層管道過濾器:FlowFlow和Phase的關(guān)系就如同Phase和Handler的關(guān)系:Flow包含一個(gè)或多個(gè)Phase。區(qū)別
15、:Flow在Axis2中比較偏向邏輯方面,具體沒有直接的對(duì)應(yīng)執(zhí)行類型,而且Axis2引擎直接執(zhí)行的元素是Phase。Axis2中包含下面4中FlowInFlow輸入流。SOAP請(qǐng)求。InFaultFlow輸入錯(cuò)誤流。SOAP請(qǐng)求發(fā)生錯(cuò)誤(HTTP狀態(tài)值500)OutFlow輸出流。SOAP回應(yīng)。OutFaultFlow輸出錯(cuò)誤流。.34Axis2執(zhí)行模型再次回顧一下Axis2執(zhí)行模型:從最外層將,Axis2處理整個(gè)SOAP消息是在Phase層:客戶端基于HTTP網(wǎng)絡(luò)服務(wù)傳輸協(xié)議Axis2執(zhí)行引擎服務(wù)端SOAP請(qǐng)求InFlow或者InFaultFlow接受方WebService執(zhí)行SOAP回應(yīng)O
16、utFlow或者OutFaultFlow.35Axis2執(zhí)行模型在往下細(xì)分就是Phase和Handler的管道過濾器執(zhí)行:.36第四部分:非核心部分實(shí)現(xiàn)分析.37信息處理模型最下是StAX:Streaming API for XML (StAX),XML解析框架,來自Java,相比SAX模式的XML解析更具動(dòng)態(tài)性,相比DOM形式XML解析更具性能優(yōu)勢(shì),可以理解為介于SAX解析和DOM解析之間。 之上是AXIOM:Apache AXIOM是XML信息集模型,可供用來動(dòng)態(tài)創(chuàng)建信息對(duì)象數(shù)。 然后在原始XML解析和XML信息模型的基礎(chǔ)上,建立了整個(gè)核心框架,執(zhí)行引擎,部署。因?yàn)锳xis2使用SOAP傳
17、輸,用到WSDL定義服務(wù)描述,而SOAP和WSDL都是基于XML的。 核心框架定義好后,Axis還定義一些上層應(yīng)用運(yùn)行在核心框架之上。如數(shù)據(jù)傳輸模塊和數(shù)據(jù)綁定模塊。.38信息處理模型上述過程可以用這個(gè)圖來表示:.39客戶端API分析Axis2客戶端API支持異步核同步的調(diào)用方式。對(duì)于同步的調(diào)用方式,應(yīng)用程序的當(dāng)前執(zhí)行線程會(huì)阻塞,直到收到服務(wù)器回應(yīng),如下圖:.40客戶端API分析對(duì)于異步的調(diào)用方式,應(yīng)用程序的當(dāng)前執(zhí)行線程不會(huì)阻塞,服務(wù)器回應(yīng)會(huì)通過異步事件調(diào)用通知應(yīng)用程序。如下圖:RN代表服務(wù)器傳來的回應(yīng)通知。.41代碼測(cè)試實(shí)現(xiàn)使用Java創(chuàng)建一個(gè)簡單的網(wǎng)絡(luò)服務(wù)執(zhí)行。來模擬查詢商品價(jià)格和添加商品價(jià)
18、格:首先創(chuàng)建一個(gè)HashMap來存儲(chǔ)string和double。首先判斷HashMap中否包含指定字符串。如果有的話,返回字符串對(duì)應(yīng)的double值。如果沒有返回42。.42代碼測(cè)試實(shí)現(xiàn)上述功能代碼:public class StockQuoteService private HashMap map = new HashMap(); /獲取價(jià)格函數(shù)獲取價(jià)格函數(shù) public double getPrice(String symbol) Double price = (Double) map.get(symbol); if(price != null) return price.doubleVa
19、lue(); return 42.00; /添加物品函數(shù)添加物品函數(shù) public void update(String symbol, double price) map.put(symbol, new Double(price); .43代碼測(cè)試實(shí)現(xiàn)使用W3C推薦的標(biāo)準(zhǔn)來定義這個(gè)網(wǎng)絡(luò)服務(wù),是網(wǎng)絡(luò)服務(wù)規(guī)格化:定義XML根節(jié)點(diǎn)為service(代表一個(gè)網(wǎng)絡(luò)服務(wù)),然后通過description、operation和parameter三個(gè)節(jié)點(diǎn)規(guī)格化定義網(wǎng)絡(luò)服務(wù)的描述、操作和參數(shù)的數(shù)據(jù)。.44代碼測(cè)試實(shí)現(xiàn)上述功能的代碼(保存在XML文件中) Stock Quote Service samples.
20、quickstart.service.axiom.StockQuoteService.45代碼測(cè)試實(shí)現(xiàn)接下來需要重新改寫網(wǎng)絡(luò)服務(wù)類型的執(zhí)行(按照Axis2的模式)。具體則需要使用AXIOM中的XML對(duì)象數(shù)解析的方法規(guī)范網(wǎng)絡(luò)服務(wù)的執(zhí)行。最后就是用ServiceClient客戶端API來調(diào)用網(wǎng)絡(luò)服務(wù),仍然是采用AXIOM的方式,當(dāng)然Axis2提供多種處理方式來讀取SOAP協(xié)議,不僅限于AXIOM,同時(shí)也不僅限與ServiceClient類型。.46測(cè)試代碼實(shí)現(xiàn)下面就是使用AXIOM的OMElement元素準(zhǔn)備發(fā)送SOAP數(shù)據(jù)的部分代碼:public static OMElement getPric
21、ePayload(String symbol) OMFactory fac = OMAbstractFactory.getOMFactory(); /讀取讀取XSD對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證 OMNamespace omNs = fac.createOMNamespace(http:/axiom.service.quickstart.samples/xsd, tns); /創(chuàng)建創(chuàng)建AXIOM準(zhǔn)備發(fā)送準(zhǔn)備發(fā)送XML數(shù)據(jù)數(shù)據(jù) OMElement method = fac.createOMElement(getPrice, omNs); OMElement value = fac.createOMElement(symbol, omNs); value.addChild(fac
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 深入理解教育領(lǐng)域中的大數(shù)據(jù)庫解析
- 從心理角度理解學(xué)生學(xué)習(xí)行為的驅(qū)動(dòng)力
- 教育心理學(xué)與在線課程學(xué)習(xí)成效的關(guān)系
- 小學(xué)班班通培訓(xùn)課件
- 智慧城市背景下綠色智能辦公樓的發(fā)展
- 教育政策在高校文化傳承中的作用
- 從新政策看未來學(xué)校教育模式的創(chuàng)新
- 大數(shù)據(jù)在學(xué)生個(gè)性化教學(xué)計(jì)劃制定中的作用
- 抖音商戶數(shù)據(jù)分析師直播數(shù)據(jù)看板制度
- 抖音商戶直播時(shí)段選擇依據(jù)制度
- 會(huì)議桌椅采購招標(biāo)技術(shù)參數(shù)
- 2024年-2024五屆華杯賽小高年級(jí)組試題及答案
- 《比較文學(xué)概論》課程思政融入世界眼光
- 初中數(shù)學(xué)八年級(jí)下冊(cè) 期末試卷(含答案)
- 高處作業(yè)、機(jī)械傷害、電氣安全基礎(chǔ)知識(shí)培訓(xùn)
- 10kV電氣設(shè)備預(yù)防性試驗(yàn)規(guī)程(簡易版)
- 三維地質(zhì)隱式建模技術(shù)與應(yīng)用
- 腰腿痛的診斷及其鑒別的診斷詳解演示文稿
- GB/T 15684-2015谷物碾磨制品脂肪酸值的測(cè)定
- 百靈達(dá)x32數(shù)字調(diào)音臺(tái)說明書簡體中文
- GA/T 947.2-2015單警執(zhí)法視音頻記錄系統(tǒng)第2部分:執(zhí)法記錄儀
評(píng)論
0/150
提交評(píng)論