RMI异常:java.lang.InvalidClassException

时间:2014-12-27 19:40:15

标签: java rmi

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

但我甚至没有使用从任何地方调用该方法,但有例外。我从来没有遇到过这种问题所以任何人都可以告诉我应该做些什么。

1 个答案:

答案 0 :(得分:2)

异常是描述问题:客户端正在尝试解组序列化对象,但它不能,因为串行版本标识符不匹配。

这意味着服务器序列化了不同版本的AddClient类,而不是客户端解组。

@duffymo是正确的 - 要解决问题,客户端和服务器必须在其类路径上具有相同版本的AddClient类。