【问题标题】:Adding an element to an HashMap causes ArrayIndexOutofBoundsException in java 1.7.0_45向 HashMap 添加元素会导致 java 1.7.0_45 中的 ArrayIndexOutofBoundsException
【发布时间】:2014-08-07 12:09:22
【问题描述】:

在我的应用程序中,我有一些代码以最经典的方式将元素放入 HasSet

@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@XmlElementWrapper
private Set<ParameterDefinition> parameterDefinitions = new HashSet<ParameterDefinition>();

// .... in a method far below ...
    this.parameterDefinitions.add(createParameterDefinitionFor);

此代码已使用两年,从未出现任何故障迹象。

然而,我们最近将我们的代码库移到了 java 7 上(是时候了)。而且,由于这一举动,这条精确的指令仅*在我们使用 Suse 10 和 Java 1.7.0_45 且具有以下堆栈跟踪的 Linux 机器上失败。

  Daemon Thread [p: thread-pool-1; w: 9] (Suspended (exception java.lang.ArrayIndexOutOfBoundsException))   
        java.util.HashMap<K,V>.put(K, V) line: 498  
        java.util.HashSet<E>.add(E) line: 217   

在任何 Java 7 版本的 Windows 上运行的测试都不会暴露这种行为。

那么……出现这种奇怪的行为有什么原因吗?

【问题讨论】:

  • 能看到使用地图的代码吗?

标签: java hashmap hashset


【解决方案1】:

您在使用 Glassfish 吗?在这种情况下,很可能是这个问题:https://java.net/jira/browse/GLASSFISH-20814

【讨论】:

  • 确实,这个错误发生在 Glassfish 中。
  • 我认为此错误已在 Glassfish 4 中修复,因此如果您使用的是较低版本,请升级到该错误。您唯一的其他选择是使用 Java 1.7_25,但这可能会让您面临安全漏洞的风险。
  • 好吧,如果我正确理解了这个问题,我也可以通过只使用@Local EJB 来避免那些HashMap 序列化,不是吗?因为在升级到 java 7 之后升级到 Glassfish 4 对我们的计划来说太多了。
  • 真的!这可能是最安全的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
相关资源
最近更新 更多