我正在尝试编写一个能够让我只编写.save()的类;制作子类的永久副本。我创建了一个创建xml的方法:
public boolean save() throws IOException{
XStream xstream = new XStream(new KXml2Driver());
FileWriter extenceWriter = new FileWriter(saveFile);
xstream.alias(this.getClass().getSimpleName(), this.getClass());
xstream.toXML(this, extenceWriter);
return saveFile.exists();
}
和另一个应该读它的人:
public Object loadFile(String path) throws FileNotFoundException{
File file = new File(appRootDIR + File.separator + path);
XStream xstream = new XStream(new KXml2Driver());
FileReader extenceReader = new FileReader(file);
return xstream.fromXML(extenceReader);
}
问题是当我尝试使用loadFile()时,我得到了com.thoughtworks.xstream.mapper.CannotResolveClassException。
我检查了谷歌,最接近的打击是xstream的不同实例无法通信。
这可以通过将xstream移动到类字段来解决,但是后来我得到一些关于xstream无法自行序列化的错误。
是否有一种很好的方法可以在类中实现读取和写入方法,而无需在框外创建xstream实例?
答案 0 :(得分:0)
因为您在save()
中使用了别名,所以将简单的类名而不是完全限定的类名写入XML。这使得loadFile()
无法弄清楚它所指的是什么类。
您可以通过以下两种方式之一解决此问题:
XStream
实例上注册所有要使用的别名,并从save()
和loadFile()
调用该方法,以便它们可以使用相同的别名集操作。