首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xstream和ibm j9 sdk在linux上的不兼容

xstream和ibm j9 sdk在linux上的不兼容
EN

Stack Overflow用户
提问于 2010-06-02 12:14:11
回答 1查看 467关注 0票数 0

我遇到了与xstream和IBM (32位版本)不兼容的问题。当我使用sun时,一切都很好,但在IBM (仅在linux上)上失败。在windows上,这两个jdks都是可以的)。

调试时,错误似乎是xstream在内部使用java.util.TreeSet,但是集合的迭代器以错误的顺序返回元素(我知道这听起来很奇怪,但这就是我看到的行为)。搜索相关的bug并没有给出任何有意义的结果。

我试着升级了几乎所有可能的组件,但没有成功。我尝试了以下配置:

  • IBMJDK1.6SR 7(与WebSphere 7.0.0.9捆绑)、xstream 1.2.2
  • IBMJDK1.6SR 8、xstream 1.2.2
  • IBMJDK1.6SR8、xstream 1.3.1

(我尝试过使用tomcat和WebSphere服务器,因此实际上有6种配置使用IBM )。

所讨论的代码在com.thoughtworks.xstream.core.DefaultConverterLookup类中,在第44行附近。它使用来自com.thoughtworks.xstream.core.util.PrioritizedList类的迭代器,该类使用自定义比较器,但是比较器所做的只是比较整数(优先级)。

有人见过这个吗?知道我能做什么或者改变什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-03 21:02:02

问题最终出现在我自己的代码中。插入到集合中的对象之一具有值Integer.MIN_VALUE的整数键(优先级)。不幸的是,XStream使用的比较器没有比较int值,它从另一个减去一个,然后比较为零(类似于return b - a > 0 )。

这导致整数溢出和比较器返回值的意外结果,整个集合被搞砸了。结果是,迭代器在IBM和sun上都以错误的顺序返回元素,但是在sun上它非常微妙,直到现在我们才注意到它。

修复方法只是使用一些低值,比如-1000,而不是Integer.MIN_VALUE。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2957521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档