【发布时间】:2016-02-17 17:36:55
【问题描述】:
我正在调用这个远程方法:
RespuestaError<Co> cox(String a, String b, String c, int d) throws RemoteException;
我收到了这个错误
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: jtwitter.base.RespuestaError
这是说 RespuestaError 不可序列化,但它是:
public class RespuestaError<T extends Serializable> implements Serializable {
private static final long serialVersionUID = 8483079015565009698L;
private T returned;
private Error error;
public RespuestaError(T returned, Error error)
{
//...
}
//...
}
Error 是一个枚举。
在这种特殊情况下,T 是:
public class Co implements Serializable {
private static final long serialVersionUID = 2759254657635643074L;
private String a;
private int b;
private Us c;
public Co(String a, int b, Us c)
{
//...
}
//...
}
Us 类是:
public class Us implements Serializable {
private static final long serialVersionUID = -6725570673833522155L;
private int a;
private String b;
private String c;
private String d;
private String e;
private int f;
public Us(int a, String b, String c, String d, String e, int f)
{
//...
}
//...
}
Everithing extends Serializable 我没有看到错误。
【问题讨论】:
-
我相信以太
private T returned和private Error error也应该是implements Serializable。 -
我碰巧刚刚完成了一个 RMI 程序,我刚刚尝试了与您所做的非常相似的操作,我没有看到任何错误。也许您确保所有文件都重新编译,并确保您导入 java.io.Serializable ?
-
@Gordon Liang 恐怕你是对的。不需要公共的无参数构造函数。我误解了文档是我的错误。谢谢。
-
@Little Sanit 欢迎您。我一开始也怀疑过。但事实证明并非如此。有一个更明确的规范:docs.oracle.com/javase/7/docs/platform/serialization/spec/…
-
你没有运行你认为你正在运行的代码。清理、构建、部署、重新测试。
标签: java serialization rmi