Ошибки xstream для сериализации и десериализации - PullRequest
5 голосов
/ 30 мая 2011

Я использую xStream в Java для сериализации Java-объекта из библиотеки Java и десериализации его на стороне клиента.

У меня есть несколько проблем:

Если я сделаю это так:

XStream xstream = new XStream();
xstream.setMode(XStream.ID_REFERENCES);
xstream.autodetectAnnotations(true);
Writer writer = new FileWriter(xmlFile);        
writer.write(xstream.toXML(myObject));
writer.close();

=> Сериализация в порядке, но десериализация: Exception in thread "main" com.thoughtworks.xstream.io.StreamException: : only whitespace content allowed before start tag and not . (position: START_DOCUMENT seen .... @1:1)

если я сделаю это так:

XStream xstream = new XStream();
xstream.setMode(XStream.NO_REFERENCES);
xstream.autodetectAnnotations(true);
Writer writer = new FileWriter(xmlFile);        
writer.write(xstream.toXML(myObject));
writer.close();

=> У меня проблема с сериализацией: Exception in thread "main" com.thoughtworks.xstream.io.StreamException: : only whitespace content allowed before start tag and not . (position: START_DOCUMENT seen .... @1:1) at com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:78) at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:137) at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:130) at com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:109) at com.thoughtworks.xstream.io.xml.AbstractPullReader.moveDown(AbstractPullReader.java:94) at com.thoughtworks.xstream.io.xml.XppReader.<init>(XppReader.java:48) at com.thoughtworks.xstream.io.xml.XppDriver.createReader(XppDriver.java:44) at com.thoughtworks.xstream.XStream.fromXML(XStream.java:853) at com.thoughtworks.xstream.XStream.fromXML(XStream.java:845)

С xml:

<Test.Platform id="1">
    <TaskImpl id="1">
          <model reference="2"/>
          <name>process</name>
    </TaskImpl>
</Test.Platform id="1">

Так что, есть предложения?

Заранее спасибо.

1 Ответ

9 голосов
/ 30 мая 2011

поэтому здесь упускается из виду то, как вы читаете файл.вы используете

XStream xstream = new XStream();
xstream.fromXML("model.xml");

Именно отсюда исходит точка (.) в ошибке.Метод fromXML ожидает фактический ввод XML, а не имя файла.Поэтому, когда он анализирует ваш xml (который является «model.xml», а не фактическим xml), он выдает ошибку.Сайт для XStream сейчас недоступен, поэтому я не могу связать его с API

. Используйте FileReader / BufferedReader, чтобы получить обратно содержимое XML.Как-то так должно работать

XStream instream = new XStream();

BufferedReader br = new BufferedReader(new FileReader("model.xml"));
StringBuffer buff = new StringBuffer();
String line;
while((line = br.readLine()) != null){
   buff.append(line);
}
Platform p = (Platform)instream.fromXML(buff.toString());

PS Мне удалось продублировать проблему и исправить ее с помощью приведенного выше

...