public class AddClient implements Serializable {
public static void main(String args[]) {
try {
String addServerURL = "rmi://" + "127.0.0.1" + "/AddServer";
AddServerIntf addServerIntf = (AddServerIntf) Naming.lookup(addServerURL);
System.out.println("msg from inside"+addServerIntf.register(new AddClient()));
} catch (Exception e) {
System.out.println("Exception: " + e);
}
}
}
我有这个类,它正确地完成了它的任务,但是当我想要它时,像
一样添加一个方法public void retrive(String msg) {
System.out.println(msg);
}
它会生成异常:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.io.InvalidClassException: rmi.AddClient; local class incompatible: stream classdesc serialVersionUID = 7584986215301760999, local class serialVersionUID = 9065682220695232722
但我甚至没有使用从任何地方调用该方法,但有例外。我从来没有遇到过这种问题所以任何人都可以告诉我应该做些什么。
答案 0 :(得分:2)
异常是描述问题:客户端正在尝试解组序列化对象,但它不能,因为串行版本标识符不匹配。
这意味着服务器序列化了不同版本的AddClient类,而不是客户端解组。
@duffymo是正确的 - 要解决问题,客户端和服务器必须在其类路径上具有相同版本的AddClient类。