Вот исправление, которое я придумал. Я не мог понять, как уведомить сопровождающих о гессенском коде, поэтому я публикую его здесь. Изменить файл:
com.caucho.hessian.util.IdentityIntMap.java начиная со строки 112:
public final int get(Object key)
{
int prime = _prime;
// int hash = System.identityHashCode(key) % prime;
int hash = System.identityHashCode(key);
// JRockit VMs can return a negative number which will cause this method to throw an exception
if (hash < 0)
hash = -hash;
hash = hash % prime;
...
Также измените код в следующем методе, начиная со строки 135:
public final int put(Object key, int value, boolean isReplace)
{
int prime = _prime;
// int hash = System.identityHashCode(key) % prime;
int hash = System.identityHashCode(key);
// JRockit VMs can return a negative number which will cause this method to throw an exception
if (hash < 0)
hash = -hash;
hash = hash % prime;
...