发现问题了!
远程服务试图抛出一个封装字符串集合的异常HashMap.values()
:
if (!identifiersMap.isEmpty()) {
context.setRollbackOnly();
BusinessException e = new BusinessException();
e.setValues(identifiersMap.values()); // here is where the problem is
throw e;
}
HashMap 有一个名为Values的内部类(如您在此处看到的),它是 Collection 的实现,并且不可序列化。所以,抛出一个内容为 的异常HashMap.values()
,远程方法会抛出一个序列化异常!
例如,ArrayList 是可序列化的,可用于解决问题。工作代码:
if (!identifiersMap.isEmpty()) {
context.setRollbackOnly();
BusinessException e = new BusinessException();
e.setValues(new ArrayList(apIdentifiersMap.values())); // problem fixed
throw e;
}
我的情况是,远程方法是无效的,它正在抛出异常,但请注意:
如果远程服务返回 HashMap$Values 实例,也会发生这种情况,例如:
return hashMap.values(); // would also have serialization problems
再一次,解决方案是:
return new ArrayList(hashMap.values()); // problem solved