最佳实践:Java / XML序列化:如何确定要反序列化的类?

时间:2011-10-18 11:31:19

标签: java xml jaxb deserialization xstream

我有一个将其上下文保存到XML的应用程序。在此应用程序中,有一个类层次结构,它们都实现了一个公共接口,并且代表了不同的设置。例如,第一个设置类可以由4个公共浮点字段组成,另一个可以由唯一的HashMap组成。

我正在尝试确定以通用方式处理XML写入和读取的最佳方法。我在这个网站上阅读了很多关于JAXB和XStream的内容,它们能够从XML创建一个特定的类实例。

但是我的问题与实际类可以是实现给定接口的任何事实有关。当您阅读XML文件时,您如何猜测从XML数据实例化的实际类?你如何在你的应用程序中这样做?

我认为我可以在XML属性中编写.class名称,读取它并将其与所有可能的类.class名称进行比较,直到找到匹配项。有更明智的方法吗?

由于

3 个答案:

答案 0 :(得分:2)

xstream应该已经处理好这个并创建正确类型的对象。

tutorial似乎证实:

  

重建一个对象,完全来自XML:

Person newJoe = (Person)xstream.fromXML(xml);

如果您不知道类型,则必须先将其分配给公共接口类型:

CommonInterface newObject = (CommonInterface)xstream.fromXML(xml);
// now you can either check its type or call virtual methods

答案 1 :(得分:1)

在我的情况下,我只有一种标题来存储序列化的类名,当反序列化它时,我只使用标题值来确定我将哪些类反序列化值。

答案 2 :(得分:0)

最佳做法是使用已建立的,记录良好的XML解析器/映射器。所有序列化/反序列化工作都已完成,因此您可以担心业务逻辑。 Castor和Apache Axiom是我用来编组/解组(序列化/反序列化)Java类和XML的两个API。
http://www.castor.org

Apache Axiom