Tuxedo數據協議轉換方法
2023-11-10 03:08:12 1
專利名稱:Tuxedo數據協議轉換方法
技術領域:
本發明涉及一種數據轉換方法,尤其涉及一種TUXEDO (Transaction forUNIX has been Extended for Distributed Operation,被分布式操作擴展之後的UNIX事務系統) 數據協議轉換方法。
背景技術:
隨著訪問終端類型的越來越多樣化,訪問頻率越來越頻繁,對後臺架構靈活性和高性能都帶來新挑戰。為提高跨平臺操作和高性能,後臺選用中間件伺服器成了一種趨勢,中間件TUXEDO被越來越多的採用。TUXEDO後臺採用獨有的FML (Field Manipulation Language)處理請求端和伺服器端的數據傳遞,而前端一般採用JSON(JavaScript Object Notation)或XML (ExtensibleMarkup Language可擴展標誌語言)存儲頁面數據,如何快速將頁面數據轉換成FML格式成為這種架構下應用開發要解決的問題。現有技術並不能將上述三種數據協議進行直接轉換。現有主要是採用針對某一種數據協議進行解析的相關技術,如針對XML協議解析的Xerces-C協議解析包、針對於 JSON 的 JSON-c 解析包、以及 TUXEDO 自身提供的 FML32 (FieldManipulation Language 32 Bit Version)數據操作的應用程式編程接口 ;XML即可擴展標記語言,它與HTML—樣,都是 SGML (Standard Generalized MarkupLanguage,標準通用標記語言)。XML是網際網路環境中跨平臺的,依賴於內容的技術,是當前處理結構化文檔信息的有力工具。擴展標記語言XML 是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據,而這些標記可以用方便的方式建立,雖然XML佔用的空間比二進位數據要佔用更多的空間,但XML極其簡單易於掌握和使用。JSON是一種輕量級的數據交換格式,它基於Javakript (Standard ECMA-262 3rd Edition-December 1999)的一個子集。JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C,C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成。 FML32 (Field Manipulation Language 32 Bit Version)是目前使用最為廣泛的 tuxedo 中間件內部數據格式,其優點在於結點插入查詢速度快,操作簡單,內存使用率高,數據表現緊湊,是目前各種行業應用系統運用最多的一種數據結構。按照現有的技術,要實現上述三種協議之間的相互轉換,需要首先將某種協議按照第三提供的軟體包進行協議解析;然後才能轉換到另外一種數據協議格式。如從XML到 FML32的數據協議的轉換,需要先用Xerces-C對XML報文進行協議解析形成DOM(Document Object Model文檔對象模型)樹;然後對DOM樹進行遍歷才能轉換成FML32數據協議格式。 這樣最少需要進行2次報文循環。第一次對XML報文進行解析,第二次才是進行真正的數據協議個數轉換,效率上也就打了很大的折扣;同時,對於開發人員也提出了更高的要求, 即需要了解ferces-C軟體包的使用方式以及DOM樹的操作方式,同時也需要了解FML32數據協議格式的操作方式,不利於快速開發應用。
發明內容
本發明的目的在於,提供一種TUXEDO數據協議轉換方法,提高xml/json到fml32、 fml32到xml/json之間數據格式轉換的效率,實現協議轉換時的內存塊直接操作,從而有效的較少了協議解析時頻繁的內存申請與釋放的操作。為了實現上述目的,本發明提供一種TUXEDO數據協議轉換方法,其包括如下步驟步驟1、初始化數據協議轉換運行所需的上下文,其包括由用於配置數據存放路徑的元數據來定義的協議報文模板加載到內存中形成哈希表、根據外部配置獲取協議報文的字符集定義、及初始化數據協議轉換所需的棧結構;步驟2、接收外部傳入的報文字符流;步驟3、判斷傳入的報文字符流是否需要進行字符集轉換,如需要則進行轉換,獲取報文的長度,並在一 FML32緩衝區中分配相應的內存塊;步驟4、對報文進行解析並將報文節點壓入FML32緩衝區;步驟5、查詢元數據,獲取當前報文所依賴協議報文模板,通過循環報文模板以對 FML32緩衝區的數據流進行解析並生成報文,返回協議轉換後的報文。所述步驟3中,所分配內存塊的大小為字符流長度的1. 5倍。所述步驟4包括步驟4. 1、將棧結構的首指針回歸到初始位置;步驟4. 2、將轉換狀態回歸到初始化狀態;步驟4. 3、開始循環傳入的報文字符流,對每個節點逐個進行處理,並按照節點對應的數據類型以及按照其在報文中相對位置將節點壓入FML32緩衝區中;步驟4. 4、當棧指針回歸到棧頂位置並且轉換狀態為成功的時候,完成協議轉換。所述步驟4中,對於元素類報文結點進行棧壓入操作,對於文本類的報文結點直接進行數據格式轉換後進行出棧操作,直到整個報文循環完畢。所述步驟5包括步驟5. 1、判斷預開闢的內存塊的大小是否滿足本次轉換的需求,本次轉換的內存大小需求根據傳入的字符流長度乘以1. 5所得;步驟5. 2、查詢元數據, 獲得當前報文所依賴的報文模板;步驟5. 3、將棧結構的首指針回歸到棧頂位置;步驟5. 4、 將轉換狀態回歸到初始化狀態;步驟5. 5、循環步驟5. 2中獲得的報文模板,按照報文模板中節點據類型以及節點在報文模板中的位置在FML32緩衝區中獲取當前結點對應的實際數據與結點名稱,並將其寫入到輸出緩衝區中;步驟5. 6、判斷棧指針是否到棧頂並且轉換狀態是否為初始化狀態,如果是,則轉換成功;步驟5. 7、返迴轉換後得到的報文。所述步驟5. 2中,當模板項標誌為數組項時,按數組方式寫輸出緩衝區。所述步驟1中,所述上下文還包括判斷是否支持多線程操作、及預開闢的轉換時所需內存塊的大小。所述報文為JSON或XML報文。本發明的有益效果1).實現了 XML到FML32、JSON到FML32之間的直接協議轉換, 大大的提高了協議轉換的效率,按照當前的測試結果,比採用傳統的單獨解析技術,效率提高了 3倍;2).實現了數據協議的直接轉換功能後,開發人員對頁面表單、傳輸數據、後臺處理邏輯等可以直接通過這些API實現轉換,減輕了開發人員的負擔,讓應用開發人員能夠更好更快的實現自己的應用;
3).由於採用的是直接轉換,協議轉換的輸入輸出都是連續內存塊,提高了轉換效率並有利於網絡數據的傳輸;4).採用元數據技術,解決了 XML、FML與JSON數組的兼容性問題。為了能更進一步了解本發明的特徵以及技術內容,請參閱以下有關本發明的詳細說明與附圖,然而附圖僅提供參考與說明用,並非用來對本發明加以限制。
下面結合附圖,通過對本發明的具體實施方式
詳細描述,將使本發明的技術方案及其它有益效果顯而易見。附圖中,圖1為本發明TUXEDO數據協議轉換方法的流程示意圖;圖2為本發明TUXEDO數據協議轉換方法的轉換流程原理圖。
具體實施例方式為更進一步闡述本發明所採取的技術手段及其效果,以下結合本發明的優選實施例及其附圖進行詳細描述。如圖1-2所示,本發明提供一種TUXEDO數據協議轉換方法,其包括如下步驟步驟1、初始化數據協議轉換運行所需的上下文,其包括由用於配置數據存放路徑的元數據來定義的報文模板加載到內存中形成哈希表、根據外部配置獲取協議報文的字符集定義、及初始化協議轉換所需的棧結構;步驟1中首先將報文模板加載到內存中形成哈希表,實現協議模塊的的快速定位查詢。同時根據外部配置獲取協議傳輸報文的字符集定義,以實現在協議轉換前進行內外部字符集的轉換。具體的,該上下文包括1)、元數據配置數據存放的路徑,協議模板預加載到內存並形成一張哈希表以供查詢使用;幻、字符集要求,包括傳入報文的字符集定義以及本地報文的字符集定義信息;3)、是否支持多線程操作;4)、預開闢的轉換時所需內存塊的大小,如果在轉換過程中該預開闢的內存塊不能滿足要求,將適時擴充該內存塊。在該模塊的整個聲明周期(該模塊的聲明周期為進程啟動到停止),該內存塊不會被釋放。如果需要支持多線程運行,該內存塊會與線程進行綁定;5)、 初始化協議轉換所需的棧結構。步驟2、接收外部傳入的報文字符流。步驟3、判斷傳入的報文字符流是否需要進行字符集轉換,如需要則進行轉換,獲取報文的長度,並在一 FML32緩衝區中分配相應的內存塊;所述步驟3中,所分配內存的大小為字符流長度的1.5倍。步驟4、對報文進行解析並將報文節點壓入FML32緩衝區;所述步驟4包括步驟4. 1、將棧結構的首指針回歸到初始位置;步驟4. 2、將轉換狀態回歸到初始化狀態;步驟 4. 3、開始循環傳入的報文字符流,對每個節點逐個進行處理,並按照節點對應的數據類型以及按照其在報文中相對位置將節點壓入FML32緩衝區中;步驟4. 4、當棧指針回歸到棧頂位置並且轉換狀態為成功的時候,完成協議轉換。所述步驟4中,對於元素類報文結點進行棧壓入操作,對於文本類的報文結點,直接進行數據格式轉換後進行出棧操作,直到整個報文循環完畢。對於元素類報文結點進行棧壓入操作,對於文本類的報文結點(即實際存儲數據的結點)直接進行數據格式轉換後進行出棧操作,直到整個報文循環完畢。步驟5、查詢元數據,獲取當前報文所依賴報文模板,通過循環報文模板以對 FML32緩衝區的數據流進行解析並生成報文,返回協議轉換後的報文。所述步驟5包括 步驟5. 1、判斷預開闢的內存塊的大小是否滿足本次轉換的需求,本次轉換的內存大小需求根據傳入的字符流長度乘以1. 5所得;步驟5. 2、查詢元數據,獲得當前報文所依賴的報文模板;步驟5. 3、將棧結構的首指針回歸到棧頂位置;步驟5. 4、將轉換狀態回歸到初始化狀態;步驟5. 5、循環步驟5. 2中獲得的報文模板,按照報文模板中節點據類型以及節點在報文模板中的位置在FML32緩衝區中獲取當前結點對應的實際數據與結點名稱,並將其寫入到輸出緩衝區中;步驟5. 6、判斷棧指針是否到棧頂並且轉換狀態是否為初始化狀態,如果是,則轉換成功;步驟5. 7、返迴轉換後得到的報文。步驟5為步驟4的逆向操作,其處理思路相同。本發明將報文組成和層次裝載進入內存(如圖2所示),每個節點都可能是單值類型或數組類型,數組類型指該節點可能存在多份數據。例如報文中包括姓名、性另I」、子女,其中姓名和性別是單值類型,子女是數組,子女的屬性可能包括姓名、性別、年齡,都是單值, 當然也可能包括數組的屬性如愛好。在轉換流程中,根據模板項對對應的報文項進行轉換後填充進入目標緩衝區。下面以JSON到FML32的轉換為例進行說明提供數據協議轉換接口進行數據協議轉換。1.接口定義JSON到FML32的協議轉換void;l<Json_Trans_To_Fml32 (char* json, mpw_int_t len);說明本接口要求傳入一個json協議格式的字符流。並給出該字符流的長度,以字節為單位,本接口返回的是一塊內存的首地址。該內存是按照ml32的協議格式進行組
么口fml32到json的協議轉換char* Fml32_Trans_To_Json(void*fml, mpw_int_t *len);說明本接口要求傳入一塊內存的首地址,該內存是按照FML32的協議格式進行組織,本接口返回的是一個JSON協議格式的字符流。該字符流的長度通過接口的第二個參數Ien帶回。2.處理流程JSON到FML32的協議轉換步驟1、首先判斷是否需要進行字符集轉換,如果需要,則先進行字符集轉換;步驟2、判斷預開闢的內存塊的大小是否滿足本次轉換的需求,本次轉換的內存大小需求根據傳入的字符流長度乘以1. 5所得;步驟3、將棧結構的首指針回歸到初始位置,即棧頂位置;步驟4、將轉換狀態回歸到eatws初始化狀態;步驟5、開始循環傳入的JSON串,對每個節點逐個進行處理,並按照對應的數據類型以及按照其在JSON中相對位置將節點壓入FML32緩衝區中;步驟6、當棧指針回歸到棧頂位置並且轉換狀態為成功(Success)的時候,數據協議轉換成功。
FML32到JSON的協議轉換步驟1、判斷預開闢的內存塊的大小是否滿足本次轉換的需求。本次轉換的內存大小需求根據傳入的字符流長度乘以1. 5所得;步驟2、查詢元數據,獲得當前報文所依賴的報文模板,當模板項標誌為數組項時, 要按數組方式寫輸出緩衝區;步驟3、將棧結構的首指針回歸到初始位置,即棧頂位置;步驟4、將轉換狀態回歸到eatws初始化狀態;步驟5、循環步驟2中獲得的報文模板,按照報文模板中節點據類型以及節點在報文模板中的位置在FML32緩衝區中獲取當前結點對應的實際數據與結點名稱,並將其寫入到輸出緩衝區中;步驟6、判斷棧指針是否到棧頂並且轉換狀態是否為eatws初始化狀態,如果是, 則表明轉換成功;步驟7、返迴轉換後得到的JSON報文。XML到FML32、FML32到XML的轉換過程同理,例如XML到FML32、FML32到XML接口定義void* Xml_Trans_To_Fml32(char *xml, mpw_int_t len);char* Fml32_Trans_To_Xml(void*fml, mpw_int_t *len);當然,對於XML協議解析還可採用解析工具包例如rapidxml以獲得更高的效率, 另外,對於XML報文還可提供XSD格式規則校驗,校驗不成功則不進行後續處理,以增加應用的健壯性。以上所述,對於本領域的普通技術人員來說,可以根據本發明的技術方案和技術構思作出其他各種相應的改變和變形,而所有這些改變和變形都應屬於本發明權利要求的保護範圍。
權利要求
1.一種TUXEDO數據協議轉換方法,其特徵在於,包括如下步驟步驟1、初始化數據協議轉換運行所需的上下文,其包括由用於配置數據存放路徑的元數據來定義的協議報文模板加載到內存中形成哈希表、根據外部配置獲取協議報文的字符集定義、及初始化數據協議轉換所需的棧結構; 步驟2、接收外部傳入的報文字符流;步驟3、判斷傳入的報文字符流是否需要進行字符集轉換,如需要則進行轉換,獲取報文的長度,並在一 FML32緩衝區中分配相應的內存塊;步驟4、對報文進行解析並將報文節點壓入FML32緩衝區;步驟5、查詢元數據,獲取當前報文所依賴協議報文模板,通過循環報文模板以對 FML32緩衝區的數據流進行解析並生成報文,返回協議轉換後的報文。
2.如權利要求1所述的TUXEDO數據協議轉換方法,其特徵在於,所述步驟3中,所分配內存塊的大小為字符流長度的1. 5倍。
3.如權利要求1所述的TUXEDO數據協議轉換方法,其特徵在於,所述步驟4包括步驟4. 1、將棧結構的首指針回歸到初始位置;步驟4. 2、將轉換狀態回歸到初始化狀態;步驟 4.3、開始循環傳入的報文字符流,對每個節點逐個進行處理,並按照節點對應的數據類型以及按照其在報文中相對位置將節點壓入FML32緩衝區中;步驟4. 4、當棧指針回歸到棧頂位置並且轉換狀態為成功的時候,完成協議轉換。
4.如權利要求3所述的TUXEDO數據協議轉換方法,其特徵在於,所述步驟4中,對於元素類報文結點進行棧壓入操作,對於文本類的報文結點直接進行數據格式轉換後進行出棧操作,直到整個報文循環完畢。
5.如權利要求1所述的TUXEDO數據協議轉換方法,其特徵在於,所述步驟5包括步驟5.1、判斷預開闢的內存塊的大小是否滿足本次轉換的需求,本次轉換的內存大小需求根據傳入的字符流長度乘以1. 5所得;步驟5. 2、查詢元數據,獲得當前報文所依賴的報文模板; 步驟5. 3、將棧結構的首指針回歸到棧頂位置;步驟5. 4、將轉換狀態回歸到初始化狀態;步驟5. 5、循環步驟5. 2中獲得的報文模板,按照報文模板中節點據類型以及節點在報文模板中的位置在FML32緩衝區中獲取當前結點對應的實際數據與結點名稱,並將其寫入到輸出緩衝區中;步驟5. 6、判斷棧指針是否到棧頂並且轉換狀態是否為初始化狀態,如果是,則轉換成功;步驟5. 7、返迴轉換後得到的報文。
6.如權利要求5所述的TUXEDO數據協議轉換方法,其特徵在於,所述步驟5.2中,當模板項標誌為數組項時,按數組方式寫輸出緩衝區。
7.如權利要求1所述的TUXEDO數據協議轉換方法,其特徵在於,所述步驟1中,所述上下文還包括判斷是否支持多線程操作、及預開闢的轉換時所需內存塊的大小。
8.如權利要求1所述的TUXEDO數據協議轉換方法,其特徵在於,所述報文為JSON或 XML報文。
全文摘要
本發明提供一種TUXEDO數據協議轉換方法,其包括如下步驟步驟1、初始化數據協議轉換運行所需的上下文;步驟2、接收外部傳入的報文字符流;步驟3、判斷傳入的報文字符流是否需要進行字符集轉換,如需要則進行轉換,獲取報文的長度,並在一FML32緩衝區中分配相應的內存塊;步驟4、對報文進行解析並將報文節點壓入FML32緩衝區;步驟5、查詢元數據,獲取當前報文所依賴協議報文模板,通過循環報文模板以對FML32緩衝區的數據流進行解析並生成報文,返回協議轉換後的報文。
文檔編號H04L29/06GK102394874SQ20111032989
公開日2012年3月28日 申請日期2011年10月26日 優先權日2011年10月26日
發明者豐偉, 張利民 申請人:深圳天源迪科信息技術股份有限公司