簡介:與主流的基於 XML 消息和 SOAP 協議的 Web 服務相比,Hessian 是輕量級的二進制 RPC 協議 ,具有簡單和高效的優勢。本教程提出了利用 WebSphere DataPower 對協議和數據格式進行轉換,實現 標准 Web 服務對 Hessian 客戶端的支持,使得 Hessian 客戶端在不改變代碼條件下很容易的訪問基於 標准 SOAP 協議的 Web 服務。
開始之前
關於本教程
本教程詳細地介紹了如何安裝、配置和使用 WebSphere DataPower 實現 Hessian 客戶端訪問基於 SOAP/HTTP 標准的 Web 服務。我們將下載實現 Hessian 協議的 API 包來編寫一個簡單的 Hessian 客戶 端,然後使用 WebSphere Transformation Extender Design Studio 生成 Hessian 消息和標准 SOAP 消 息的類型樹和映射規則,最後將其上載到 WebSphere DataPower,使用 DataPower 做為網關實現 Hessian 協議和 SOAP 協議的消息轉換。
目標
本教程提出了一種解決 Hessian 協議和標准 SOAP 協議的轉換方式,借助於 Websphere Data Power 強大而高效的消息格式轉換能力,實現一個協議網關。
在本教程中,您將可以學習到
什麼是 Hessian 協議?
如何構建一個 Hessian 協議和標准 SOAP 協議的網關?
如何配置和使用 WebSphere Transformation Extender Design Studio 創建類型樹和映射規則並進行 測試?
如何配置和使用 Data Power 做為運行時的協議轉換器?
先決條件
本教程提出了一種解決方案來轉換特定的 Hessian 協議和標准 SOAP 協議,以支持 Hessian 客戶端 不需要修改原有代碼接入到標准 Web 服務中。因此本教程可以做為企業架構師和方案設計師的參考。同 時,本教程也以具體實例詳細介紹了配置、使用和測試 WebSphere Transformation Extender 和 Data Power,可以做為程序開發人員的參考手冊。
在閱讀本教程前,您應該了解基本的 Java 編程,以及基於 SOAP/HTTP 的的開發和配置。
如果需要深入了解和親自動手實踐,那麼您需要
到參考資源的網站上下載 Hessian 協議的 Java 實現,並編寫一個簡單的例子實現 Hessian 客戶端 和 Hessian 服務,您會發現使用 Hessian 是非常簡單而且容易開發。
下載 IBM 和 IBM WebSphere Transformation eXtender (WTX) 8.1 Design Stuido 嘗試如何創建轉 化規則
到參考資源的網站上了解更多的關於 Data Power 的知識。
協議和產品介紹
Web 服務技術是解決異構平台系統的集成及互操作問題的主流技術,它所基於的 XML 已經是 Internet 上交換數據的實際標准,簡單對象訪問協議 (SOAP) 是基於 XML 的簡易協議,提供了標准的 RPC 方法來調用 Web service,可使應用程序在 HTTP 之上進行信息交換。
與之相對應,Hessian 協議則是輕量級的遠程過程調用(RPC)協議的典范,它基於 HTTP 協議傳輸編 碼後的二進制消息,Hessian 協議也被稱為 HBWSP(Hessian Binary Web Service Protocol)。Hessian 是一個輕量級的、自定義描述的二進制 RPC 協議,它把文本格式的數據編碼為二進制數據,僅用一個字 符作為結構化標記,具有高效和簡單的優勢。Hessian 協議和 Web service 常用的 SOAP 協議類似,也 是將協議報文封裝在 HTTP 封包中,通過 HTTP 信道進行傳輸的。Hessian 協議封裝後的數據增量明顯小 於 SOAP 封裝後的數據增量,並且它采用簡單的結構化標記,減少了編碼、解碼操作對內存的占用量。因 此,Hessian 協議在某些場景下得到了廣泛的應用。
DataPower 是 IBM 針對面向服務架構(SOA)所推出的又一重要產品。DataPower 產品家族主要包括 三款產品:WebSphere DataPower XA35,WebSphere DataPower XS40 和 WebSphere DataPower XI50。其 中 XI50 側重於企業消息總線及應用程序集成,能夠以經濟有效的方式支持大型機、線速企業消息總線和 企業應用程序集成。DataPower 能夠在不同消息格式(包括二進制格式、遺留格式和 XML 格式)之間進 行轉換,並提供消息路由和安全性。DataPower 的 DataGlue 引擎直接支持 WebSphere Transformation Extender 生成格式定義和規則,不同消息格式的轉換規則可以通過 WebSphere Transformation Extender 的 Design Studio 來生成,然後上載到 DataPower 上來執行,從而實現任意格式之間數據之 間的轉換。
IBM WebSphere Transformation eXtender(WTX) Design Studio 則提供了用於創建應用程序集成解 決方案的豐富功能集的客戶機界面。其中,WebSphere Transformation Extender Type Designer 是數據 對象建模組件,它可以創建和管理用以定義數據結構屬性的類型樹並定義數據約束和驗證規則;而 Map Designer 提供了用於指定數據轉換和傳遞規則的功能,並為分析、編譯和測試已開發的映射提供環境。 用 Design Studio 設計的轉換規則可以直接部署到 DataPower 上進行執行,其主要過程包括使用 Type Designer 定義源和目標數據結構,使用 Map Designer 定義轉換規則,然後把生成的數據結構和轉換規 則部署到 DataPower 上執行。
場景描述
客戶的需求
該需求來自於真實的客戶,該客戶是一個移動服務提供商,其早期通過 Hessian 協議把內部的各種業 務服務提供給終端用戶使用,通過 Hessian 協議,手機應用可以很方便的向服務器發起請求並得到結果 。隨著該公司逐漸轉向 SOA 架構,標准 Web 服務成為公司服務開發的標准,很多應用通過標准 Web 服 務的方式暴露服務,客戶端通過 SOAP 協議來訪問這些服務。公司期望除了早期的基於 Hessian 開發的 服務端應用其外,也能夠把一些標准 Web 服務提供給使用 Hessian 客戶端的移動客戶使用。因此,公司 期望通過以服務網關或者總線 ESB(Enterprise Service Bus)的方式來實現整合,能夠以一種簡單方式 把標准的基於 SOAP 的 Web 服務轉換為基於 Hessian 協議的服務提供給那些使用 Hessian 客戶端的用 戶使用,而不需要修改原始的 Web 服務程序以及現有的 Hessian 客戶端,如圖 1 所示。
圖 1. Hessian 客戶端訪問標准 Web 服務
解決方案
實現 Web 服務網關有多種方案,例如可以 WebSphere Message Broker 實現網關將協議進行轉化,但 在本應用場景中,電信企業對服務應用的效率要求很高,而且對數據格式的轉換要求比較靈活並且高效。 在這些方面,WebSphere Data Power 具有天然的優勢,實現硬件級別的加速。
在該解決方案中,實現 Web 服務網關用到的產品是 IBM WebSphere DataPower SOA Appliances ( 以 下簡稱 DataPower) 和 IBM WebSphere Transformation eXtender (WTX) 。其中利用 DataPower 作為 Web 服務的運行時網關,使用 WebSphere Transformation Extender 建立二進制格式和 XML 格式之間的 映射關系,從實現 Hessian 客戶端對標准 Web 服務的訪問。
示例
為了詳細清楚地講述該解決方案,我們以一個簡單的服務做為例子,該服務提供了一個 Add 服務,用 來把請求來的兩個整數相加,然後把求和的結果返回給客戶端。
該場景的客戶端是一個使用 Hessian 協議的終端,對方法名和參數基於 Hessian 協議二進制編碼規 則進行編碼,發送請求,然後取得結果。對於一個簡單的請求例如 add(2, 3),客戶端發送的 Hessian 協議的內容如清單 1 所示。
清單 1. Hessian 客戶端的請求消息
c x01 x00
m x00 x03 add
I x00 x00 x00 x02
I x00 x00 x00 x03
z
而 Hessian 協議的返回結果內容也是非常簡單的,如清單 2 所示:
清單 2. Hessian 客戶端的響應消息
r x01 x00
I x00 x00 x00 x05
z
該場景中的服務器端是一個標准 Web 服務器,提供標准的基於 SOAP 協議的 web 服務,該服務提供 了一個和 Hessian 例子 Add 方法一樣的功能的服務,但名字為 Sum。(該 Web 服務的 WSDL 文件內容 請參考代碼下載中的 WSDL 文件)。該 Web 服務的請求消息如清單 3 所示:
清單 3. Sum 服務的 SOAP 請求消息
<SOAP-ENV:Envelope xmlns:SOAP- ENV=http://schemas.xmlsoap.org/soap/envelope/
xmlns:SOAP- ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSche ma-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP- ENV:Header/>
<SOAP- ENV:Body>
<SumRequest>
<First>2</First>
<Second>3</Se cond>
</SumRequest>
</SOAP-ENV:Body>
</SOAP- ENV:Envelope>
對應的 SOAP 返回消息為:
清單 4. Sum 服務的 SOAP 響應消息
<SOAP-ENV:Envelope xmlns:SOAP- ENV=http://schemas.xmlsoap.org/soap/envelope/
xmlns:SOAP- ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSche ma-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP- ENV:Header/>
<SOAP- ENV:Body>
<SumResponse>5</SumResponse>
</SOAP- ENV:Body>
</SOAP-ENV:Envelope>
配置步驟
本教程使用 WebSphere Transformation eXtender Design Studio 8.1 和 WebSphere DataPower SOA Appliances 兩個產品實現該解決方案。步驟是:
首先在 WebSphere Transformation eXtender Design Studio 8.1 做一些配置,以使用 DataPower 做為運行時服務器,這樣在 WTX 生成的規則才能在 DataPower 運行。
使用 WebSphere Transformation eXtender Design Studio 8.1 創建 Hessian 請求和響應消息的類 型樹,和 SOAP 請求消息和 SOAP 響應消息的類型樹,然後在兩種類型樹之間建立映射規則,並可以對映 射規則進行測試。
映射規則傳教完成後,將類型樹和映射文件上傳到 DataPower,然後配置 Data Power 創建 Multi- Protocol Gateway 實現兩種消息格式的映射,最後進行測試。
在本教程的後面中將對上面配置步驟一步步地詳細介紹。
配置 WebSphere Transformation Extender Design Studio 使用 DataPower 作為運行時服務器
為了使得 WTX Design Studio 生成的轉換規則能夠在 DataPower 上運行,必須把 WTX Design Studio 的運行時服務器設置為 DataPower。在 WebSphere Transformation Extender Design Studio 的 菜單欄中,打開“ 工具 -> 選項 ”,在選項窗口的最下面找到 DataPowerMaps,然後就可以設置 DataPower 的 IP 和端口,如圖 2 所示,點擊“ 確定 ”完成配置。
圖 2. 設置 DataPower 參數
接著在 WTX Design Studio 的菜單欄中選擇“ 映射 -> 設置 ”,選擇最下面的“MapRuntime” 為“WebSphere DataPower”,把運行時的服務器改為 DataPower,默認的是“WebSphere Transformation Extender”。
圖 3. 設置 WTX 運行時服務器
點擊“ 確定 ”完成設置。
創建類型樹和轉換規則
在完成 WebSphere Transformation Extender Design Studio 的配置之後,下面就是要創建 Hessian 和 XML 消息的類型樹,把 Hessian 的二進制消息以及對應的 XML 消息以 WebSphere Transformation Extender 類型樹的形式描述出來,然後再在類型樹之間建立映射關系,把請求消息的 Hessian 二進制內 容映射為 XML 格式的消息。反之,同樣需要把返回消息的 XML 格式消息映射為 Hessian 格式的二進制 編碼。
創建 Hessian 請求消息的類型樹
根據清單 1 中的請求消息和 Hessian 編碼規則,創建請求消息的類型樹,如圖 4 所示
圖 4. 創建 Hessian 請求消息
其中 Call 組件是最高一級的組件,設置其起始符的值為字面值 “c<<001>><<000>>”,(<<*>> 中表示的是二進制字符),結 束符的值為字面值“z”。
在 Call 組件中只有 Method 組件,Method 組件中定義了方法名和參數等其它元素,其起始符的值為 字面值“m”。右鍵點擊 MethodLength 組件,選擇“ 已確定大小 ”,表示後面的 MethodName 的長度 由該 MethodLength 組件的值指定,這也是 WebSphere TX 可以很方便用來定義那些不定長的消息內容的 優勢之一。
創建 SOAP 請求消息的類型樹
在 WebSphere TX Type Designer 中,可以直接導入 XML Schema、DTD、COBOL Copybook 等文件來生 成樣式樹。根據清單 1 中的 Hessian 請求消息轉換為的 XML 格式的請求消息為:
清單 5. 請求消息的 XML 格式消息
<add>
<First>3</First>
<Second>2</Second>
&l t;/add>
其樣式描述 XSD 文件為:
清單 6. XML 請求消息的 Schema 定義
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Add">
<xs:complexType>
<xs:sequence>
<xs:element ref="First"/>
<xs:element ref="Second"/>
</xs:sequence>
</xs:complexType>
</xs:element>< BR><xs:element name="First" type="xs:integer"/>
<xs:element name="Second" type="xs:integer"/>
</xs:schema>
打開 WebSphere TX Type Designer,在菜單上選擇“ 樹 -> 導入 ”,打開類型導入向導:
圖 5. 在 WTX 中導入 XML Schema
選擇“XML Schema”,單擊“ 下一步 ”,選擇需要導入的 XSD 文件“XMLRequest.xsd”。然後按照 向導提示逐步點擊“ 下一步 ”按鈕,完成導入工作,生成對應的類型樹文件。
圖 6. 創建 XML 請求消息類型樹
在 Hessian 和 SOAP 請求消息的類型樹間創建映射規則
打開 WebSphere TX Map Designer,建立一個映射項目,名字為 Hessian2XML。其中,設置輸入卡的 源對象的類型樹為“HessianRequest.mtt”,單擊類型一欄,選擇類型為“Call”,設置文件路徑為 “HessianSampleAddRequest.txt”,其內容即為清單 1 中的 Hessian 請求消息,完成後的輸入卡設置 如圖 7 所示:
圖 7. Hessian2XML 的輸入卡設置
同樣,編輯輸出卡,把輸出卡的類型樹設置為“XMLRequest.mtt”,類型為“Doc”,輸出為 “XMLSampleAddOutput.xml”文件,該文件目前為空,在測試轉換規則的時候,轉換後的內容就會輸入到 該文件中,編輯完的輸出卡的內容如圖 8 所示。
圖 8. Hessian2XML 的輸出卡設置
下一步是建立源和目標之間的映射關系,把源中的 First、Second 中的 IntergerType 分別拖入到目 標中的 AddElement 的 First 和 Second 對象的規則中,然後把其它需要設置規則的部分右鍵單擊選擇 “ 插入 NONE”,映射規則設置如圖 9 所示。
圖 9. Hessian2XML 的映射規則設置
在映射關系建立完畢之後,在菜單欄上選擇“ 映射 -> 構建(B)”選項,沒有錯誤出現,則表示 映射關系構建成功,最終的映射項目如圖 10 所示。
圖 10. Hessian2XML 的映射項目
在 DataPower 上測試生成的映射規則
構建映射關系成功後,下一步就是在 DataPower 上測試新創建的對象和映射關系,在圖 2 和塗中, 我們已經設置 DataPower 為運行時服務器並設置了相關參數。現在選擇菜單欄上的“ 映射 -> 運行 ”,則相關的格式定義和映射關系上傳到 DataPower 上進行運行,如果成功,則返回“ 映射已經成功完 成 ”消息。
圖 11.DataPower 上的映射成功結果
到項目的目錄下,找到生成的 XMLSampleAddOutput.xml 文件,其內容如下,正是我們需要的 XML 消 息。
清單 7. 生成的 XML 請求消息
<?xml version="1.0" encoding="UTF-8"? >
<Add>
<First>2</First>
<Second>3</Second>
< ;/Add>
至此,請求消息類型樹之間 Hessian 到 XML 格式之間的映射已經成功完成。
創建和測試返回消息的類型樹和映射規則
與請求消息一樣,同樣創建返回消息的類型樹和映射規則,不同的是這次的映射設置中,輸入是 XML 消息格式,輸出是二進制的 Hessian 消息格式。具體的消息格式可以參考本教程附帶的文件,完成後的 響應消息的映射規則的設置如圖 12 所示:
圖 12. 響應消息的映射規則項目
在 DataPower 上建立 Hessian 和 SOAP 之間的網關
在成功生成了對象樹和 Hessian 和 XML 之間的映射關系之後,下一步就是在 DataPower 上建立 ESB 網關,實現 Hessian<->XML<->SOAP 消息之間的映射,把 Hessian 客戶端發來的二進制消 息以 SOAP 形式發送給 Web 服務提供者,然後把結果返回給 Hessian 客戶端。
上載類型樹和映射關系文件到 DataPower 上
在浏覽器中輸入 https://<ip_address>:<port>/login.xml,輸入用戶名、密碼,選擇 對應的域,登錄到 DataPower 上,然後單擊“File Management”圖標。
圖 13. 在 DataPower 上選擇 File Management
打開“File Management”之後,單擊“Local”選項中對應的“Actions”,選擇“Upload Files”, 把剛才生成的請求消息轉換所需的 HessianRequest.mts,XMLRequest.mts、Hessian2XML.xml 文件以及 返回消息轉換所需的 HessianResponse.mts,XMLResponse.mts、XML2Hessian 上載到 DataPower 中。
圖 14. 上載相關類型樹和映射文件到 DataPower 中
創建 Multi-Protocol Gateway
在控制面板中單擊“Multi-Protocol Gateway”圖標,進入“Multi-Protocol Gateway”配置菜單, 單擊“Add”按鈕,建立一個新的 Web 服務網關。
圖 15. 建立新的“Multi-Protocol Gateway”
如圖 16 所示,把“Multi-Protocol Gateway”的 名字設置為“HessianSample”,輸入提供 Sum Web 服務的服務器地址到“Backend URL”,修改請求和 響應消息的類型為“Non-XML”。
圖 16. 設置“Multi-Protocol Gateway”
點擊“Front Side Protocol”下的“Create New” 按鈕,創建一個新的名為“HessianBroker”的 HTTP Front Side Handler。
圖 17. 創建新的 HTTP Front Side Handler
單擊“Multi-Protocol Gateway Policy”下的“+ ”按鈕,創建一個新的“Multi-Protocol Gateway Policy”規則,該規則定義了如何處理請求和響應消 息。
修改 Policy 處理的規則為從客戶到服務器,從上面的 Rule 圖標中拖入“Advanced”圖標,雙擊修 改其屬性為“Transform Binary”,如圖 18 所示。
圖 18. 配置轉換規則為 Transform Binary
單擊“Next”按鈕,進行配置 Transform Binary 的操作。可以看到配置中已經改為“Use XSLT specified in this action on a non-XML message”,表 示處理的是非 XML 消息。在“WTX Map file”選項中輸入“local:///Hessian2XML.xml”文件,該文件 已經在前面的操作中上載到 DataPower 的 local 目錄下,注意 local 後是 3 個“/”反斜線。
圖 19. 配置 Transform Binary 操作
下一步是配置 XML 消息到 SOAP 消息的轉換,在規則欄中拖入“Transform”圖標到剛 剛創建的“Transform Binary”規則後,單擊該圖標,打開如圖 20 所示的配置界面。
圖 20. 配置 Transform 操作
單擊“Processing Control File”旁邊的“Upload ”按鈕,上載 XML2SOAP.xsl 文件到 DataPower 中,設置“Processing Control File”文件為 XML2SOAP.xsl。該文件的作用是把 XML 格式的輸入消息轉換為對應的 SOAP 消息,
單擊“Processing Control File”旁邊的“Upload”按鈕,上載 XML2SOAP.xsl 文件到 DataPower 中,設置“Processing Control File”文件為 XML2SOAP.xsl。該文件的作用是把 XML 格式的輸入消息 轉換為對應的 SOAP 消息,
清單 8. 生成的 SOAP 請求消息
<?xml version='1.0' ?>
<xsl:stylesheet version="1.0"
xmlns:xsl=http://www.w3.org/1999/XSL/Transformxmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/">
<xsl:template match="/">
<SOAP-ENV:Envelope xmlns:SOAP-
ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<SumRequest>
<First>
<xsl:value-of select="Add/First"/>
</First>
<Second>
<xsl:value-of select="Add/Second"/>
</Second>
</SumRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</xsl:template>
</xsl:stylesheet>
完成配置後的請求處理規則如下圖所示。該規則中,先把 Hessian 二進制文件轉換為 XML 文本格式 ,然後再轉換為 SOAP 格式。
圖 21.Hessian2SOAP 請求處理規則
同樣,生成對應的服務器到客戶端的響應消息處理規 則,如圖 22 所示。該規則首先通過“Transform”操作,使用 XML2SOAP.xsl 文件把服務器響應回來的 SOAP 消息映射為 XML 消息,然後再通過“Transform Binary”操作,使用 XML2Hessian.xsl 把 XML 消 息映射為二進制的 Hessian 二進制消息。
圖 22. SOAP2Hessian 響應處理規則
至此,Hessian 客戶端到 SOAP 服務器端的 ESB 網 關就建立完成了。
測試 Multi-Protocol Gateway
為了驗證剛剛生成的 ESB 網關,可以用一個 Hessian 的客戶端發出請求,然後驗證得到的響應;也 可以用 curl 工具發送含有 Hessian 請求消息的內容到 ESB 網關上,然後驗證得到的消息。
DataPower 提供了很好的調試工具可以幫助用戶驗證每一步的輸出是否符合自己定義的規則,打開剛 剛創建的 Multi-Protocol Gateway,單擊“Show Probe”,彈出 Probe 配置窗口,單擊“Enable Probe ”,則請求消息的細節會被 DataPower 記錄下來供調試使用。
發送清單 1 中的 Hessian 請求,單擊剛剛打開的 Probe 窗口中的“Refresh”按鈕,則出現了剛剛 發送的請求,如圖 23 所示:
圖 23. 請求消息 Probe 內容
單擊“View”下的小放大鏡圖標,則顯示了每一步操作中的消息內容,如圖 24 ,25,26 所示。
圖 24. DataPower 得到的 Hessian 請求源消息
圖 25. DataPower 上轉換為 XML 後的請求消息
圖 26. DataPower 上轉換為 SOAP 後的請求消息
同樣的方法也可以檢查響應消息的每一步的輸出,從 而驗證響應消息的處理是否正確。
結束語
DataPower 作為一種強大的服務網關,支持 HTTP、SOAP、MQ、FTP、IMS 等多種協議,通過和 WebSphere Transformation Extender 相結合,可以實現任意格式的消息之間的互相轉換。本教程介紹了 如何利用 DataPower 輕松構建一個 ESB 網關,通過 WebSphere Transformation Extender,可以定義 Hessian 二進制格式和 XML 格式之間的轉換規則,然後通過 DataPower 實現二進制格式和 XML 格式消 息之間的相互轉換,從而用一種簡單高效的方式實現了 Hessian 客戶端對標准的使用 SOAP 協議的 Web 服務的訪問。
圖 27. 本教程的擴展用法— DataPower 支持多種客戶端
另外,從本教程擴展開來,DataPower 還支持 Web2.0 協議,可以很輕松的創建其他客戶端對標准 Web 服務的訪問。客戶端除了 SOAP 和 Hessian 客 戶端之外,還可以是 AJAX、REST 以及 ATOM Reader 等 Web2.0 客戶端。通過 DataPower,可以很容易 的把後台服務暴露出來供這些客戶端訪問,或者根據需求實現這些協議之間的相互轉換。