使用 XStream 时出现 ArrayIndexOutOfBoundsException

Posted

技术标签:

【中文标题】使用 XStream 时出现 ArrayIndexOutOfBoundsException【英文标题】:ArrayIndexOutOfBoundsException when using XStream 【发布时间】:2015-12-22 21:41:08 【问题描述】:

我不确定这怎么可能,但我正在运行的程序给了我一个奇怪的错误。我在每个循环上都收到一个 ArrayIndexOutOfBoundsException: -1 。整个错误如下:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at com.thoughtworks.xstream.core.util.OrderRetainingMap.entrySet(OrderRetainingMap.java:77)
at java.util.HashMap.putMapEntries(HashMap.java:511)
at java.util.HashMap.putAll(HashMap.java:784)
at com.thoughtworks.xstream.core.util.OrderRetainingMap.<init>(OrderRetainingMap.java:36)
at com.thoughtworks.xstream.converters.reflection.FieldDictionary.buildMap(FieldDictionary.java:135)
at com.thoughtworks.xstream.converters.reflection.FieldDictionary.fieldsFor(FieldDictionary.java:76)
at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:126)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:81)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
at com.thoughtworks.xstream.core.TreeMarshaller.start(TreeMarshaller.java:82)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.marshal(AbstractTreeMarshallingStrategy.java:37)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:895)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:884)
at com.thoughtworks.xstream.XStream.toXML(XStream.java:857)
at com.thoughtworks.xstream.XStream.toXML(XStream.java:844)
at unl.cse.assignments.DataConverter.output(DataConverter.java:210)
at unl.cse.assignments.DataConverter.main(DataConverter.java:121)

第 210 行是 pw.print 行:

for(Product p : products)
    
        if(AwardTicket.class.isInstance(p))
            xstream.alias("awardTicket", AwardTicket.class);
            pw.print(xstream.toXML(p) + "\n");
        

(第 121 行只是调用输出)

我已经调查了这个错误很长时间,但我无法找出它的原因。我认为 xstream 有问题,但我尝试了其他输出。

【问题讨论】:

我会检查 p 对象内容 -> 其中一个应该有问题。或者也许 xstream 有问题 p(products)的内容实际上是Product的子类。这可能是一个潜在的问题吗? 可能是 1.4.6 中修复的错误:x-stream.github.io/jira/746 这个问题与你的 foreach 循环无关。也许改变标题和问题? @Tanner 那么你应该回答你自己的问题并接受这个答案。某个版本的 XStream 存在错误可能很有用。 【参考方案1】:

正如 Andreas 所指出的,这实际上是在 1.4.6 版本中修复的bug in XStream。最新版XStream可以在here下载。

【讨论】:

以上是关于使用 XStream 时出现 ArrayIndexOutOfBoundsException的主要内容,如果未能解决你的问题,请参考以下文章

XStream使用

XStream的使用

XStream使用详解

JAVA XStream的使用

springMVC整合xStream

运行 adb 命令时出现问题 / 使用平板设备进行开发时出现问题