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

时间:2009-12-29 10:03:37

标签: java xml serialization

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

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

非常感谢任何帮助。

此致 拉维。

2 个答案:

答案 0 :(得分:2)

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

您可以使用Sun's reference implementationApache JaxMe

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

答案 1 :(得分:2)

当然,最好的实体是拥有POJO(Plain Old Java Objects)。没有奇怪的属性,参考或方法。它简化了序列化,使模型对象与框架和奇怪的层保持中立,如持久性,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] /老师)