我正在尝试使用XStream包反序列化Java中的字符串。XStream包可以很好地序列化我的类。我从服务器获取XML (不能更改XML格式),并尝试将其节点信息保存到某个类中的相应变量中。我的函数位于底部,我试图为XStream对象注册一个新的转换器(认为它是因为一个变量是一个字节数组),但仍然没有成功。有人能解释一下这些例外吗?我是否需要注册"MyClass“并为XStream编写自己的转换器来处理反序列化类?提前谢谢。
如果将字符串或StringReader对象作为输入传递到fromXML()中,则为例外:
致命错误:1:1: prolog中不允许内容。 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 原因-例外: com.thoughtworks.xstream.mapper.CannotResolveClassException 原因-消息: ByteSize : ByteSize 班级: 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.convertAnother(TreeUnmarshaller.java:76) 在com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(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)
static Object fromXmlString(String xml)
{
XStream xStream = new XStream(new DomDriver());
xStream.registerConverter(new EncodedByteArrayConverter());
//tried all 3 below
//return xStream.fromXML(new StringReader(xml));
//return xStream.fromXML(new ByteArrayInputStream(xml.getBytes()));
return xStream.fromXML(xml);
}发布于 2009-06-16 14:42:54
看看这个问题:prolog异常中不允许的内容。
“prolog中不允许的内容”通常意味着文件中的<?xml头( " prolog“)之前有一些内容。这是不允许的。
因此,请检查以确保字符串中的<?xml之前没有字符,并且没有任何BOM表问题。
发布于 2012-04-02 16:04:28
这是编码问题。来自XStream 文档
“所有HierarchicalStreamDriver实现都尊重自1.3版本以来的编码,但前提是您提供了一个InputStream。”
在尝试读取XML时,只需添加一个Reader即可。例如:
Object obj = xStream.fromXML(new FileReader(xmlFile));发布于 2009-06-16 14:44:59
您的反序列化/解码XStream实例是否配置为与编码XStream实例相同的方式?我将检查后者,并确保同一个XStream实例都可以编码/解码。
https://stackoverflow.com/questions/1001899
复制相似问题