堆栈跟踪:
org.jboss.remoting.InvocationFailureException: Unable to perform invocation;
nested exception is: java.io.WriteAbortedException: writing aborted;
java.io.NotSerializableException: java.util.HashMap$Values
遗憾的是,日志没有显示发生序列化问题的行或类,但调试ESB直到发生问题的步骤,所有使用的HashMap都只有Serializable对象,如String,Long和Date!< / p>
此外,调用远程方法时会出现问题,该方法无效。
你以前见过这样的事吗?
答案 0 :(得分:24)
发现了问题!
远程服务试图抛出一个封装来自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 (as you can see here)的内部类,它是Collection的一个实现,不是Serializable。因此,抛出内容为HashMap.values()
的异常,远程方法将抛出序列化异常!
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