Java中对象XML序列化的最佳方法

我正在编写服务以在我们的应用程序中实现审计,其中用户可以在任何修改之前和之后查看特定实体的状态,并且还应该能够回滚。 我们已决定将XML Serialized对象存储在XML_TYPE列的数据库中。

我是序列化的新手,我不知道如何实现相同,需要对要序列化的对象进行任何更改,或者我们需要有任何映射XML。 有人可以建议一些好的库,我知道市场上有很多可用的产品,如JAXB,JIBX,JABX,XStream等。哪一个会好,如何使用它。

任何帮助都非常感谢。

此致,拉维。

当然,最好的实体是拥有POJO(Plain Old Java Objects)。 没有奇怪的属性,参考或方法。 它简化了序列化,使模型对象保持中立,不受框架和奇怪的层次影响,如持久性,UI,远程访问等。

XStream:简洁

我建议使用XStream库进行序列化。 它试图将对象序列化和反序列化为XML的最简单方法。

你应该这样认为searialization:

  • 指出哪个类是对象
  • 尝试序列化每个属性

因此,这些是序列化中要解决的两个问题。 XStream允许您创建序列化程序(XStream类),(OPTIONALLY)指示每个类使用的标记名称,(OPTIONALLY)指示属性的别名。

所以,如果你有类似的东西:

package pack; Person + mom: Person + dad: Person 

它将写入没有配置:

    ...     ...    

但是如果你告诉它将package.Person映射到它将使用该标记。 你可以告诉它把属性“妈妈”写成“妈妈”等等。

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

参考

XStream还允许您指出所需的引用类型:

  • 无引用 :每次在对象树中找到对象时序列化对象
  • 绝对引用 :第二次找到对象时,它使用第一个实例的绝对路径保存引用(/ people / person [4] / teacher)
  • 相对引用 :相同,但从这一点使用相对引用(../../person[4]/teacher)

JAXB是标准。 在最简单(也是最常见的情况)中,您只需使用JAXB注释注释实体,并使用Marshaller将对象编组为XML。

您可以使用Sun的参考实现或Apache JaxMe 。

据我所知,XStream是一个不错的选择,虽然我没有使用它。