SmooksJava的XML轉(zhuǎn)換框架
Smooks 是一款基于 LGPL 協(xié)議的開源 Java 框架,主要用于處理 XML 與 non-XML 格式 ( 包括 CSV,EDI,Java) 之間的轉(zhuǎn)換。Smooks 于 2008 年 5 月發(fā)布 v1.0,目前最新的版本已是 v1.3.1。正如 Smooks 開發(fā)人員所言,“Smooks …讓操作 XML, EDI,XML,CSV 變得更簡單”。
實(shí)際上,我們通常將 Smooks 看做是一個(gè) XML 到 non-XML 格式的“數(shù)據(jù)轉(zhuǎn)換引擎”,然而在 Smooks 的核心實(shí)現(xiàn)中,本質(zhì)上是為 XML, CSV, EDI 和 Java 等數(shù)據(jù)源提供了一個(gè)事件流(Event Stream),對數(shù)據(jù)源的處理其實(shí)可以看做是針對此輸入數(shù)據(jù)流的一個(gè)個(gè)邏輯事件處理。因此,Smooks 的核心其實(shí)是一個(gè)“結(jié)構(gòu)化數(shù)據(jù)事件流處理器”。在這樣的設(shè)計(jì)中,開發(fā)人員可以用以下兩種模式使用 Smooks:
- 開發(fā)人員可以編寫自己的邏輯事件處理器,用于定制化處理一個(gè)數(shù)據(jù)源事件流中的特定事件;
- 開發(fā)人員也可以直接使用 Smooks 發(fā)行版中提供的解決方案(out-of-box solutions )。在這種模式下,開發(fā)人員只需重用別人創(chuàng)建的組件并重新配置它們來對數(shù)據(jù)源進(jìn)行處理。例如,通過使用 Smooks 提供的組件便可完成從 XML 到 Java 對象的轉(zhuǎn)換(正如本文下面將會(huì)展示的一樣)
因此,在開始使用 Smooks 之前,讓我們先了解一下 Smooks 發(fā)行版中已經(jīng)提供了哪些數(shù)據(jù)轉(zhuǎn)換功能。在 Smooks 的發(fā)行版中,主要包含了 4 大類也已實(shí)現(xiàn)的 XML 和 non-XML 數(shù)據(jù)轉(zhuǎn)換組件 ,分別為:
Java 綁定 (Java binding)
Smooks 支持從多種數(shù)據(jù)源生成 Java 對象,包括從 CSV, EDI, XML 或 Java 等(如圖 1 所示)。生成的 Java 對象既可以作為數(shù)據(jù)轉(zhuǎn)換的結(jié)果進(jìn)行使用,也可以成為另一個(gè)數(shù)據(jù)轉(zhuǎn)的輸入。
圖 1. Smooks Java 綁定
數(shù)據(jù)格式轉(zhuǎn)換(Transformation )
Smooks 支持多種數(shù)據(jù)格式之間的轉(zhuǎn)換,包括:XML > XML, CSV > XML, EDI > XML, XML > EDI, XML > CSV, Java > XML, Java > EDI, Java > CSV, Java > Java, XML > Java, EDI > Java 等(圖 2 )。
圖 2. Smooks 數(shù)據(jù)轉(zhuǎn)換
海量數(shù)據(jù)處理(Huge Message Processing )
Smooks 能夠支持對海量數(shù)據(jù)(GB 量級)的處理,例如拆分 (Split),轉(zhuǎn)換 (Transform) 海量數(shù)據(jù)至數(shù)據(jù)分片 (message fragment) 以及路由 (Route) 這些數(shù)據(jù)分片至文件,數(shù)據(jù)庫或者 JMS(Java Message Service)。
圖 3. Smooks 海量數(shù)據(jù)處理
數(shù)據(jù)信息補(bǔ)充(Message Enrichment )
Smooks 可以利用數(shù)據(jù)庫或者其他數(shù)據(jù)源,添加額外的信息至輸入的數(shù)據(jù)中。例如在網(wǎng)絡(luò)購物應(yīng)用中可以將用戶的偏好(preference)從數(shù)據(jù)庫中添加到用戶訂單 中,以便為后續(xù)業(yè)務(wù)流程提供更多信息。
圖 4. Smooks 數(shù)據(jù)信息補(bǔ)充
在提供了如此豐富的 XML 和 non-XML 數(shù)據(jù)轉(zhuǎn)換功能的同時(shí),Smooks 同時(shí)還提供了 Eclipse Smooks 插件以方便開發(fā)人員在 Eclipse 集成開發(fā)環(huán)境中開發(fā)和測試基于 Smooks 的數(shù)據(jù)轉(zhuǎn)換應(yīng)用 [7]。接下來,本文將以 Java 綁定 為例,結(jié)合 Smooks Eclipse 插件,較為詳細(xì)的介紹如何在 Eclipse 中輕松完成設(shè)計(jì)、配置和測試基于 Smooks 的 XML 到 Java 對象的數(shù)據(jù)轉(zhuǎn)換。
