2011-05-30 83 views
4

我正在Java中使用xStream来从java库序列化java对象并在客户端反序列化它。用于序列化和反序列化的xstream错误

我有几个问题:

如果我不喜欢这样写道:

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"> 

所以任何建议?

在此先感谢。

+0

请问您可以发布您正在序列化的课程吗? – artplastika 2011-05-30 11:56:19

+0

嗨,正如我所提到的,我没有类结构,它是在一个Java库中。 – olidev 2011-05-30 12:00:54

+0

看看是否有帮助http://stackoverflow.com/questions/1524775/error-reading-settings-xml它出现有一段时期(。)造成破坏 – Sean 2011-05-30 12:00:54

回答

7

所以这里忽略的是你如何阅读文件。您正在使用

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

哪个是周期(。)来自错误的地方。来自XML的方法期望实际的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()); 

P.S.我能够复制这个问题,并用上面的方法修复它

+0

嗨肖恩,谢谢。我只是试过了你从BufferedReader中读取的方法,但它仍然是一样的错误。 :( – olidev 2011-05-30 20:08:17

+0

你能发布你正在阅读的完整方法吗? – Sean 2011-05-30 20:47:50

+1

我发现,Xstream只适用于:InputStream inputStream = new FileInputStream(dseirFile); – olidev 2011-06-07 13:26:58