2009-12-29 81 views
0

我正在編寫服務以在我們的應用程序中實現審計,其中用戶可以在任何修改之前和之後查看特定實體的狀態,並且還應該能夠將其回滾。我們決定將XML序列化對象存儲在XML_TYPE列的數據庫中。在Java中對象XML序列化的最佳方法

我是新來的序列化,我不知道如何實現相同的,需要做的任何更改要被序列化的對象或我們需要有任何映射的XML。有人可以請建議一些好的庫,我知道有很多像JAXB,JIBX,JABX,XStream等市場上可用的那些。哪一個是好的以及如何使用它。

任何幫助,高度讚賞。

Regards, Ravi。

+0

http://stackoverflow.com/questions/35785/xml-serialization-in-java還不如 – skaffman

回答

2

當然,最好的實體是POJO的(普通舊Java對象)。沒有奇怪的屬性,引用或方法。它簡化了序列化,並保持模型對象與框架和奇怪的層一樣中立,如持久性,UI,遠程訪問等。

XStream的:簡單

我建議使用的XStream庫序列化。它試圖成爲將對象序列化和反序列化爲XML的最簡單方法。

你應該想到searialization這樣:

  • 指出哪些類是對象
  • 試圖序列的每個屬性

所以,這是兩個問題,序列化來解決。 XStream允許您創建序列化程序(XStream類),(OPTIONALLY)指示每個類使用的標記名稱,以及(OPTIONALLY)指示屬性的別名。

所以,如果你有這樣的:

package pack; 

Person 
+ mom: Person 
+ dad: Person 

將與沒有配置寫:

<pack.Person> 
    <mom> 
    <pack.Person> 
    ... 
    </pack.Person> 
    </mom> 
    <dad> 
    <pack.Person> 
    ... 
    </pack.Person> 
    </dad> 
</pack.Person> 

但如果你告訴它映射到package.Person它將使用該標籤。你可以告訴它寫屬性「媽媽」作爲「母親」和類似的東西。

XStream xs = new XStream(); 
xs.alias("person", Person.class); 
xs.aliasAttribute(Person.class, "mom", "mother"); 

參考

的XStream也可以讓你指出你想要什麼樣的參考文獻:

  • 沒有引用:對象序列化 每次創立它的對象 時間樹
  • 絕對引用:所述第二時間 一個目的是發現它使用的 絕對路徑節省了 參考([4] /教師/人/人)
  • 相對引用第一個實例 :相同,但 使用從這個 點(../../person[4]/teacher)相對引用
2

JAXB是標準。在最簡單的(也是最常見的情況)中,您只需使用JAXB註釋爲實體註釋,然後使用Marshaller將對象編組爲XML。您可以使用Sun's reference implementationApache JaxMe

據我所知,XStream是一個很好的選擇,儘管我沒有使用它。

+0

的重複很簡單,就像.NET中的XML序列化一樣,但它很有用。 – Cheeso

相關問題