摘要:隨著計算機時代的蓬勃發(fā)展,Internet的普及給社會以及人民的生活帶來了巨大的影響。與此同時,B/S結構的多系統(tǒng)相互訪問技術應時代的發(fā)展也如雨后春筍般不斷涌現(xiàn)出來,相應的多系統(tǒng)間數(shù)據(jù)交互產(chǎn)生的問題也是越來越多,XML的數(shù)據(jù)解析與系統(tǒng)業(yè)務邏輯如何融合就是其中比較難以解決的問題之一。
關鍵詞:XML Java
在web中,多系統(tǒng)間數(shù)據(jù)交互一般使用WebService技術,它是一種構建應用程序的普遍模型,可以在任何支持網(wǎng)絡通信的操作系統(tǒng)中實施運行;它是一種新的web應用程序分支,是自包含、自描述、模塊化的應用,可以發(fā)布、定位、通過web調(diào)用。WebService是一個應用組件,它邏輯性的為其他應用程序提供數(shù)據(jù)與服務。各應用程序通過網(wǎng)絡協(xié)議和規(guī)定的一些標準數(shù)據(jù)格式(Http,XML,Soap)來訪問WebService,通過WebService內(nèi)部執(zhí)行得到所需結果。Web Service可以執(zhí)行從簡單的請求到復雜商務處理的任何功能。一旦部署以后,其他WebService應用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務。WebService的主要目標就是跨平臺的可互操作性。為了達到這一目標,WebService完全基于XML、XSD等獨立于平臺、獨立于軟件供應商的標準,是創(chuàng)建可互操作的、分布式應用程序的新平臺。
Java作為現(xiàn)下最流行的可撰寫的跨平臺應用軟件的面向?qū)ο蟮某绦蛟O計語言,在多系統(tǒng)數(shù)據(jù)交互這方面具有先天的優(yōu)勢。它具有動態(tài)性,它的設計目標之一是適應于動態(tài)變化的環(huán)境。Java程序需要的類能夠動態(tài)的被載入到運行環(huán)境,也可以通過網(wǎng)絡來載入所需要的類。安全性,Java通常被用在網(wǎng)絡環(huán)境宏,為此,Java提供了一個安全機制加以防惡意代碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網(wǎng)絡下載的類具有一個安全防范機制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。多元性,作為現(xiàn)下最流行的語言,應用之廣泛,資源之充足都是現(xiàn)今流行語言中的佼佼者,在行業(yè)和企業(yè)信息化、電子政務及辦公自動化、嵌入式設備及消費類電子產(chǎn)品、輔助教學等領域發(fā)揮著其多元性的優(yōu)勢。
XStream可以完美轉(zhuǎn)換XML,與以往的解析XML工具dom相比,XStream是一個易用的、開源的庫,使用起來簡單、小巧,容易理解,可以輕易的將Java對象和xml文檔相互轉(zhuǎn)換,而且可以修改某個特定的屬性和節(jié)點名稱。就是由于與Java對象的完美轉(zhuǎn)換才更貼近于面向?qū)ο蟮脑O計思想,讓開發(fā)人員更易于使用,更易于過度解析XML與項目業(yè)務邏輯之間的聯(lián)系。XStream不僅對XML的轉(zhuǎn)換非常友好,而且提供annotation注解,可以在avaBean中完成對xml節(jié)點、屬性的描述。以及對JSON也支持,只需要提供相關的JSONDriver就可以完成轉(zhuǎn)換。使用XStream序列化的類不需要實現(xiàn)Serializable接口。XStream是一種序列化工具而不是數(shù)據(jù)綁定工具,就是說不能從XML或者XML Schema Definition (XSD)文件生成類。
和其他序列化工具相比,XStream 有三個突出的特點:①XStream不關心序列化/逆序列化的類的字段的可見性。②序列化/逆序列化類的字段不需要getter和setter 方法。③序列化/逆序列化的類不需要有默認構造函數(shù)。
不需要修改類,使用 XStream就能直接序列化/逆序列化任何第三方類。XStream也有其欠缺的地方,當XML過大時用XStream解析就略顯笨重,SAXParser可以解決這個問題,SAXParser在處理XML時非常類似于流媒體的方式,分析能夠立刻開始,而不是等待所有的數(shù)據(jù)被處理。而且程序只是在讀取數(shù)據(jù)時檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲在內(nèi)存中。這對于處理大型XML來說是個巨大的優(yōu)點,事實上,程序甚至不必解析整個文檔,它可以在某個條件得到滿足時停止解析,這種讀取方式比XStream與DOM都要快上許多。所以在讀取大型XML時可以把XStream與SAXParser結合起來使用,用SAXParser讀取整個XML把核心數(shù)據(jù)部分讓XStream來解析成JavaBean,這樣既解決了大數(shù)據(jù)的問題又利用了XStream快速轉(zhuǎn)化JavaBean的優(yōu)點。
為了利于多系統(tǒng)間數(shù)據(jù)交互的一致性與標準性,需要在開發(fā)項目初期就要制定好數(shù)據(jù)交互的XSD標準( XML Schemas Definition )。XSD描述了XML文檔的結構。可以用一個指定的XSD來驗證某個XML文檔,以檢查該XML文檔是否符合其要求。文檔設計者可以通過XSD指定一個XML文檔所允許的結構和內(nèi)容,并可據(jù)此檢查一個XML文檔是否是有效的。XSD本身是一個XML文檔,它符合XML語法結構??梢杂猛ㄓ玫腦ML解析器解析它。以此來約束多方的開發(fā)數(shù)據(jù)交互邏輯,這樣多系統(tǒng)間才會拋開各種開發(fā)語言不兼容的鴻溝,達成數(shù)據(jù)通信的目的。當一方接收到傳過來的XML文件時首先需要對其進行XSD校驗,如果不符合事先已規(guī)定的XSD的規(guī)范,可以立刻退回給發(fā)送方,告之不符合XSD校驗拒絕處理等返回信息。反之,如果校驗通過則可以進行后續(xù)業(yè)務處理。
通過XStream解析的XML轉(zhuǎn)化為JavaBean利用Java的反射技術來實現(xiàn)程序的自動化處理相應業(yè)務邏輯。Java反射是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。Java反射機制可以在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調(diào)用任意一個對象的方法;生成動態(tài)代理。Java語言具有很強的動態(tài)性就是因為反射機制的存在,它可以于運行時加載、探知、使用編譯期間完全未知的calss,獲悉其完整構造,并生成其對象實體、或?qū)ζ鋵傩栽O置或調(diào)用其方法。在處理一條XML時,會出現(xiàn)不同的業(yè)務邏輯僅需要其一部分的數(shù)據(jù),這時就需要制定一個配置文件用來記錄在XML中哪部分數(shù)據(jù)是需要哪個業(yè)務邏輯來處理的,相當于制定了一個XML與系統(tǒng)內(nèi)部邏輯的一個“索引”,讓程序可以通過這個“索引”來自動根據(jù)傳進來的數(shù)據(jù)通過反射機制去實現(xiàn)相應的業(yè)務邏輯。所以在解析xml時得到的JavaBean完全可以利用Java反射來進行對本項目業(yè)務邏輯的調(diào)用與處理,實現(xiàn)項目的程序自動化。
多系統(tǒng)間的數(shù)據(jù)交互問題一直以來就是比較讓人頭痛的問題,尤其加上各種語言的不兼容以及各種業(yè)務邏輯的限制問題更甚。基于Java的XML解析與反射設計模式就是用來解決這類問題的,它不但能幫助開發(fā)人員解決多系統(tǒng)間的數(shù)據(jù)交互問題還可以減少工作量,減少開發(fā)周期,減少BUG的產(chǎn)生,實現(xiàn)數(shù)據(jù)與項目內(nèi)部邏輯一體化。
參考文獻:
[1]葉成蔭,何愉.《Java程序設計》雙語教學研究[J].價值工程,2012(04).
[2]沈軍,顧冠群.基于Java的XML解析器設計與實現(xiàn)[J].小型微型計算機系統(tǒng),2002(12).
[3]桂紹鋼.Gei基于Java的XML解析器實現(xiàn)[J].電腦知識與技術,2010(27).