在方法中读取XML文件时,CannotResolveClassException

时间:2012-01-26 20:21:43

标签: java deserialization xstream

我正在尝试编写一个能够让我只编写.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实例?

1 个答案:

答案 0 :(得分:0)

因为您在save()中使用了别名,所以将简单的类名而不是完全限定的类名写入XML。这使得loadFile()无法弄清楚它所指的是什么类。

您可以通过以下两种方式之一解决此问题:

  1. 不要使用别名 - 简单,但XML不会看起来很干净。
  2. 创建一个方法,在XStream实例上注册所有要使用的别名,并从save()loadFile()调用该方法,以便它们可以使用相同的别名集操作。