我有一个将其上下文保存到XML的应用程序。在此应用程序中,有一个类层次结构,它们都实现了一个公共接口,并且代表了不同的设置。例如,第一个设置类可以由4个公共浮点字段组成,另一个可以由唯一的HashMap组成。
我正在尝试确定以通用方式处理XML写入和读取的最佳方法。我在这个网站上阅读了很多关于JAXB和XStream的内容,它们能够从XML创建一个特定的类实例。
但是我的问题与实际类可以是实现给定接口的任何事实有关。当您阅读XML文件时,您如何猜测从XML数据实例化的实际类?你如何在你的应用程序中这样做?
我认为我可以在XML属性中编写.class名称,读取它并将其与所有可能的类.class名称进行比较,直到找到匹配项。有更明智的方法吗?
由于
答案 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