這次帶給大家使用oxm映射xml的實作步奏,使用oxm映射xml的注意事項有哪些,以下就是實戰案例,一起來看一下。
認識XML解析技術
XML相關概念
(1)DTD:XML語法規則,是XML文件的驗證機制,可以透過比較XML文件和DTD文件看文件是否符合規範,元素和標籤是否使用正確。
(2)XML是SOA的基礎。
XML處理技術
# (1)為了使用XML,我們需要透過XML處理器或XMLAPI來存取數據,目前JAXP提供了2種處理XML的方法:DOM和SAX。
①DOM:DOM透過程式設計對XML文件中資料及結構進行訪問,基於XML文件在記憶體中的樹狀結構。其缺點是將整個XML文件裝入記憶體需要很大開銷。
②SAX:基於事件驅動,用到一段解析一段,解決了DOM佔用記憶體大的問題,但其缺點是無法隨機存取文件。
(2)為了解決DOM和SAX的問題,一個基於流的StreamAPIforXML(簡稱StAX)出現了,目前已加入到JDK6的JAXP1.4裡面,StAX也是基於事件驅動。
(3)DOM、SAX和StAX都是從文件結構出發處理XML的,但許多應用程式只專注於文件資料本身,所以XML資料綁定技術應運而生。
資料綁定:是指將資料從儲存媒介(XML文件和資料庫中)抽取出來,並透過程式表示這些資料的過程,即把資料綁定到虛擬機器能夠理解並且可以操作的某種記憶體結構中。
XML綁定框架:Castor,JAXB,JiBX,Quick,Zeus等。
XStream概述
# (1)XStream是一套簡潔易用的開源框架,用於將Java物件序列化為XML,或將XML反序列化為Java物件。
(2)XStream架構組成:
# Converters(轉換器):當XStream遇到需要轉換的物件時,它會委派給合適的轉換器實作。
IO(輸入/輸出):XStream是透過HierarchicalStreamWriter和HierarchicalStreamReader從底層XML資料中抽象化而來,分別用於序列化和反序列化操作。
Context(上下文):XStream序列化反序列化物件時會建立2個類別MarshallingContext和UnmarshallingContext,由塔門來處理資料並委派給合適的轉換器。
Facade(統一入口):將上面的3點整合在一起,以統一的介面開放給使用者使用。
快速入門
(1)建立一個XStream,並指定XML解析器
XStreamxstream=newXStream(newDomDriver());
# 如果不指定解析器,XStream會預設採用XPP(XMLPullParser)解析器,XPP是一種高速解析器。
(2)範例如下:
使用XStream別名
# (1)在上面的範例中,java物件的全類別名稱對應XML檔案的根元素,屬性名稱對應XML檔案的節點元素,但在實際情況中,java物件和XML物件可能都已經定義好了名字,這時就需要使用別名映射。
XStream有3種別名配置情況:
# 類別名:用alias(Stringname,Classtype)。
類別成員別名:用aliasField(Stringalias,ClassdefinedIn,StringfieldName)。
類別成員以屬性別名稱:用aliasAttribute(ClassdefinedIn,StringattributeName,Stringalias),單獨命名沒有意義,還要透過useAttributeFor(ClassdefinedIn,StringfieldName)應用到某個類別上。
XStream轉換器
在開發過程中,有時候需要轉換一些自訂的類型,只要實作Converter接口,並呼叫XStream的registerConverter()方法註冊轉換器就可以。
XStream註解
# XStreamxstream=newXStream(newDomDriver());
# 載入物件有2種方式:
①方式一:
xstream.processAnnotations(AAA.class);
xstream.processAnnotations(BBB.class);
②方式二:
xstream.autodetectAnnotations(true);//自動載入註解bean,而且還快取了標註的物件
串流物件
(1)XStream為Object
InputStream和ObjectOutputStream提供了替代實現,允許以物件流的方式進行XML序列化或反序列化操作。前面是基於DOM的XML解析器讀取的XML,這裡我們顯然應該要用流的方式來解析。 使用PrettyWriter和Compact
Writer的差別就在於PrettyWriter會格式化產生的XML,而CompactWriter會壓縮產生的XML。持久化API
(1)XStream提供了一套簡單的方式,可以將集合中的物件持久化到檔案中,如:XmlArrayList、XmlSet、XmlMap等。 (2)在建立集合之前,還需要指定一個持久化策略PersistenceStrategy。
處理JSON
(1)XML在WebService中有不可動搖的地位,但是在大多數web應用中,還是多採用輕量級的JSON作為資料交換格式。 (2)XStream提供了JettisonMappedXmlDriver和JsonHierarchicalStreamDriver來完成java物件和json的轉換工作。(3)JettisonMappedXmlDriver和JsonHierarchicalStreamDriver的差別:# ①JettisonMappedXmlDriver產生的是壓縮的JSON,而JsonHierarchicalStreamDriver產生的則是格式化的JSON。
②要將JSON轉換為對象,只能使用JettisonMappedXmlDriver。 與SpringOXM整合#SpringOXM概述
SpringOXM對主流O/XMapping框架做了一個統一的抽象和封裝,Marshaller和Unmarshaller是SpringOXM兩個核心介面。 Marshaller用於將物件轉換成XML,Unmarshaller用於將XML轉換成物件。 小結
#
(1)java應用程式的XML資料綁定可以歸納為2種方式:
根據XML文件產生Java語言程式碼(如JAXB、XMLBeans、Castor)。
使用某種形式的映射綁定方法,也就是設定Java類別如何與XML進行關聯(如XStream、Castor、JiBX)。
以上是使用oxm映射xml的實作步奏的詳細內容。更多資訊請關注PHP中文網其他相關文章!