CannotResolveClassException при чтении файла XML в методе - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь написать класс, который позволил бы мне просто написать .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);
}

Проблема в том, что я получаю исключение com.thoughtworks.xstream.mapper.CannotResolveClassException при попытке использовать loadFile ().
Я проверил Google, и самым близким было то, что разные экземпляры xstream не могут общаться
Эту проблему можно решить, переместив xstream в поле класса, но затем я получаю некоторые ошибки, связанные с тем, что xstream не может сам сериализоваться.

Есть ли хороший способ реализации методов чтения и записи в классе без необходимости создания экземпляра xstream вне коробки?

1 Ответ

0 голосов
/ 27 января 2012

Поскольку вы используете псевдоним в save(), простое имя класса, а не полное имя класса записывается в XML. Это делает loadFile() неспособным выяснить, к какому классу он относится.

Вы можете исправить это одним из двух способов:

  1. Не использовать псевдонимы - просто, но XML будет выглядеть не так чисто.
  2. Создайте метод, который регистрирует все псевдонимы, которые вы хотите использовать в экземпляре XStream, и вызовите этот метод из save() и loadFile(), чтобы они могли работать с одним и тем же набором псевдонимов.
...