【问题标题】:xstream errors for serializing & deserializing用于序列化和反序列化的 xstream 错误
【发布时间】:2011-05-30 11:48:46
【问题描述】:

我在 Java 中使用 xStream 来序列化 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">

那么有什么建议吗?

提前致谢。

【问题讨论】:

  • 能否请您发布您正在序列化的课程?
  • 嗨,正如我所提到的,我没有类结构,它在 java 库中。
  • 看看这是否有帮助 stackoverflow.com/questions/1524775/error-reading-settings-xml 似乎有一个句号(。)造成严重破坏
  • 我检查了我的 xml 输出,没有 .在文档中!
  • 您能否将 xmlFile 打印到其他输出并在答案中发布?并发布更多与异常相关的堆栈跟踪

标签: java xstream


【解决方案1】:

所以这里忽略的是你在文件中的阅读方式。你正在使用

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());

附:我能够复制问题,并用上面的方法修复它

【讨论】:

  • 嗨,肖恩,谢谢。我刚刚尝试过您从 BufferedReader 读取的方法,但仍然是同样的错误。 :(
  • 我发现,Xstream 只适用于:InputStream inputStream = new FileInputStream(dseirFile);
猜你喜欢
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2013-03-24
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多