Java XStream fromXML()异常

Java XStream fromXML()异常,java,exception,xml-serialization,xstream,Java,Exception,Xml Serialization,Xstream,我正在尝试使用XStream包反序列化Java中的字符串。XStream包可以很好地序列化我的类。我从服务器获取XML(无法更改XML的格式),并尝试将其节点信息保存到某个类中相应的变量中。我的函数位于底部,我试图为XStream对象注册一个新的转换器(认为这是因为一个变量是字节数组),但仍然没有成功。有人能解释一下这些例外情况吗?我需要注册“MyClass”并为XStream编写自己的转换器来处理类的反序列化吗?提前谢谢 将字符串或StringReader对象作为输入传递到fromXML()时

我正在尝试使用XStream包反序列化Java中的字符串。XStream包可以很好地序列化我的类。我从服务器获取XML(无法更改XML的格式),并尝试将其节点信息保存到某个类中相应的变量中。我的函数位于底部,我试图为XStream对象注册一个新的转换器(认为这是因为一个变量是字节数组),但仍然没有成功。有人能解释一下这些例外情况吗?我需要注册“MyClass”并为XStream编写自己的转换器来处理类的反序列化吗?提前谢谢

将字符串或StringReader对象作为输入传递到fromXML()时出现异常:

[致命错误]:1:1:序言中不允许包含内容。
com.thoughtworks.xstream.io.StreamException::prolog中不允许包含内容。
位于com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:86)
位于com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:66)
位于com.thoughtworks.xstream.xstream.fromXML(xstream.java:853)

如果ByteArrayInputStream用作fromXML()的输入,则出现异常:

com.thoughtworks.xstream.converters.ConversionException:ByteSize:ByteSize:ByteSize:ByteSize
----调试信息--
消息:ByteSize:ByteSize
原因异常:com.thoughtworks.xstream.mapper.CannotResolveClassException
原因消息:字节大小:字节大小
类别:MyClass
所需类型:MyClass
路径:/MyClass/ByteSize
位于com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:89)
位于com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:63)
位于com.thoughtworks.xstream.core.TreeUnmarshaller.convertOther(TreeUnmarshaller.java:76)
位于com.thoughtworks.xstream.core.TreeUnmarshaller.convertOther(TreeUnmarshaller.java:60)
位于com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:137)
位于com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:33)
位于com.thoughtworks.xstream.xstream.unmarshal(xstream.java:923)
位于com.thoughtworks.xstream.xstream.unmarshal(xstream.java:909)
位于com.thoughtworks.xstream.xstream.fromXML(xstream.java:861)


看看这个问题:


“prolog中不允许的内容”通常意味着在
之前有一些内容,您的反序列化/解码XStream实例是否以与编码XStream实例相同的方式配置?我会检查后者,并确保同一个XStream实例可以同时进行编码/解码。

这是一个编码问题。 从XStream:

自版本1.3起,所有HierarchycalStreamDriver实现都遵守编码,但仅当您提供InputStream时

当您尝试读取XML时,只需添加一个读取器。例如:

Object obj = xStream.fromXML(new FileReader(xmlFile));

XML字符串实际上是用C#编码的,因此我无法在这里进行比较。我相信他们正在使用.netI提供的XmlSerializer类。我认为您可能还有很多工作要做(取决于您必须反序列化的XML)。我希望XStream假定它也执行了序列化。可能值得发布您必须反序列化的XML。XML没有什么特别之处。它只是一个根节点和大约25个不同数据类型(字节数组、字符串、int、布尔)的子节点。我同意它可能假设XStream序列化了数据示例XML,但它没有反序列化1个真实的示例文本。。。XStream需要将其映射到一个Java对象(可能称为root),其中包含数据字段data1/data2等。您知道为XStream对象设置新映射的任何清晰示例吗?您是正确的。当我打印出传入的字符串输入时,在Ok之前有三个垃圾字符,所以在尝试反序列化之前,您只需确保内容已被删除。我建议您在调用XStream之前自己执行此操作,或者如果此数据来自其他人,请告诉他们进行修复。我删除了我端的垃圾字符,确保字符串“startsWith”具有正确的xml头。但是现在我得到了上面的ConversionException,即使是以字符串作为输入(字符串之前给出的是“prolog中不允许的内容”),我相信这与XStream有关,因为XStream不知道基于名称与某些XML元素匹配的类。您可能想看看注册别名:我将详细介绍这个选项。感谢您帮助清除prolog异常。这对我很有用。我所面临的问题是,当我读取由toXML函数生成的XML文件时。当我用FileReader包装文件时,XStream开始正确地读取文件。
Object obj = xStream.fromXML(new FileReader(xmlFile));