десериализация XML-файла из xstream - PullRequest
2 голосов
/ 26 мая 2011

Я использую Xstream для сериализации объекта Job.Выглядит нормально, работает.

, но при десериализации у меня проблема:

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)

Кто-то из вас уже сталкивался с этой проблемой раньше?для сериализации:

XStream xstream = new XStream();                    
Writer writer = new FileWriter(new File("model.xml"));
writer.write(xstream.toXML(myModel));
writer.close();

Я тоже попробую это:

XStream xstream = new XStream();                    
OutputStream out = new FileOutputStream("model.xml");
xstream.toXML(myModel, out);

Для десериализации я сделал это так:

XStream xstream = new XStream();

xstream.fromXML("model.xml");

Структура XML:

<projectCar.CarImpl> 
   <CarModel reference="../.."></CarModel>
</projectCar.CarImpl> 

Если да, я бы хотел услышать.Заранее спасибо.

1 Ответ

1 голос
/ 27 мая 2011

fromXML не принимает имя файла, попробуйте:

File xmlFile = new File("model.xml");
xstream.fromXML(new FileInputStream(xmlFile));

, чтобы прочитать содержимое файла в виде строки.

Также имена полей 'id' и 'reference' иногда бывают 'системные атрибуты »в XStream.Используя следующий код:

CarImpl myModel = new CarImpl();

File xmlFile = new File("model.xml");

XStream xstream = new XStream();
xstream.useAttributeFor(String.class);
xstream.useAttributeFor(Integer.class);

Writer writer = new FileWriter(xmlFile);        
writer.write(xstream.toXML(myModel));
writer.close();

CarImpl fromXML = (CarImpl) xstream.fromXML(new FileInputStream(xmlFile));
System.out.println(fromXML);

unmarshalling завершается неудачно, если поля называются 'id' и 'reference', но завершается успешно в противном случае.См. FAQ по XStream

Посмотрите на новый метод aliasForSystemAttribute для возможного решения.

...