Axis2学习笔记 (Axiom 篇 )
| 1.Abstract??? | ? | ? | ? |
| ? | Axis2 是繼 Axis1 之后 Apache 軟件組織推出的下一代 Webservice 的實現品 , 和 1.0 比較有如下較大的改進 : | ||
| ? | 1.不是在 Axis1 的基礎上擴展,而是重新開發,重新實現。 | ||
| ? | 2.支持 SOAP1.1 和 SOAP1.2. 及 REST 風格。 | ||
| ? | 3.新的 XML 處理對象模型 Axiom, 更快更有效率。 | ||
| ? | 4.客戶端支持同步、異步、單通道、雙通道。 | ||
| ? | 5.支持 HTTP SMTP JMS TCP 多種協議。 | ||
| ? | 6.支持可插拔模塊功能以強對數據的處理。 | ||
| ? | ? | ? | ? |
| 2.Axiom | ? | ? | ? |
| ? | SOAP 協議是基于 xml 做為數據交換的格式,所以 了解 axis2 工作原理 前 我們得了解一下AXIOM , Axis2 的映射 xml 數據的對象模型,其主要類圖如下 : | ||
| ? | |||
| ? | ? | < 圖一 > | ? |
| ? | Axiom 采用最新拉式 (pull)xml 處理方式 :StAX ,拉式處理是最近 xml 解析方法的趁勢,相較以前推式 (push) 處理如 dom 和 sax ,拉式將 xml 解析的控制權交給了客戶端程序 , 只有當客戶端程序需要數據時解析類才會真正從數據流中讀取數據,所以這種方式當解析稍大一點 xml 數據時更加有效率。 | ||
| ? | ? | ? | ? |
| ? | 如圖一 , 從最高抽象級別 Axiom 共分三大塊 : OMXMLParserWrapper,OMFactory, OMNode 和 OMContainer, OMXMLParserWrapper 主要用來包裝拉式 xml 數據流 , 這一點類似裝飾模式,對處理數據功能進一步加強 ,OMFactory 是 OMNode 和 OMContainer 的工廠類,用于產生其實現類的對象 , OMXMLParserWrapper 的實現類具有 OMFactory 的實例引用 , 可以說 OMXMLParserWrapper 像裝配車間 , 將原料 ( 從拉式 xml 數據流獲取數據 ) 用機器 (OMFactory) 生產成產品 (OMNode 或 OMContainer 的實現類 ), 最后 OMNode 和 OMContainer 不用說就是映射 xml 文檔數據中節點的對象了 , OMNode 代表 xml 文檔樹最末端的節點, OMContainer 可以包含其它節點的節點,比如圖中的 OMElement 擴展了這兩個接口 , 這樣它既可以有父接點,也可以有子節點。 | ||
| ? | ? | ? | ? |
| ? | 通過 Axiom 一個典型的 xml 文檔解析過程如下 : | ||
| ? | ? | ? | ? |
| ? | ? | ? | |
| ? | ? | < 圖二 > | ? |
| ? | 如圖二展示了一個客戶端程序獲取一個 xml 文檔的根節點的過程 , 其中 StAXOMBuilder 是 OMXMLParserWrapper 的實現類 , OMLinkedListImplFactory 是 OMFactory 的實現類 , OMDocumentImpl 是 OMDocument(OMDocument 擴展了 OMContainer) 實現類,我們可以先看一下一段典型的實現代碼,有助于理解 : | ||
| ? | 1. BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(“MyFilePath”))); 2.XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(reader); 3. StAXOMBuilder builder = new StAXOMBuilder(OMAbstractFactory.getOMFactory(),parser); 4. OMElement root = builder.getDocumentElement(); | ||
| ? | ? | ? | ? |
| ? | ??第一步 : 產生一個原始的 xml 數據流 | ||
| ? | ??第二步 : 產生拉式 (pull)xml 數據流 | ||
| ? | ??第三步 : 產生 StAXOMBuilder 對象 | ||
| ? | ??第四步:獲取根節點對象 , 獲取這個節點的過程如圖調用了 StAXOMBuilder 的 next() 方法 , 這個 next() 方法首先調用了 XMLStreamReader 的 next() 方法 ( 真正從數據流中取出數據 ) ,然后調用 OMLinkedListImplFactory 的 createOMElement 方法產生一個 OMElementImpl 對象 , 這個對象構造過程中又調用最初實例化 StAXOMBuilder 對象時產生的 OMDocumentImpl 對象的 addChild() 方法將本身賦給 OMDocumentImpl 對象的一個 documentElement 屬性,等于最終返回的值就是這個對象 , 從這里面我們可以看出, OMDocument 及其實現類 OMDocumentImpl 并不直接提供給外界使用 ,最終返回給客戶端的是另外一個 OMElementImpl 對象 , 還有在這里我們可以體會到 , 數據真正需要時才會從數據流取出。 | ||
轉載于:https://www.cnblogs.com/chinacloud/archive/2010/10/28/1863130.html
總結
以上是生活随笔為你收集整理的Axis2学习笔记 (Axiom 篇 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机现代教育技术工作计划,现代教育技术
- 下一篇: EXCEL操作技巧-函数:if/巢状if