在进行RMI远程调用遇到如下问题:
java.rmi.MarshalException: error marshalling arguments; nested exception is:
java.io.NotSerializableException: rmi_test.HelloImp
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:177)
at rmi_test_cs.Server.main(Server.java:20)
Caused by: java.io.NotSerializableException: rmi_test.HelloImp
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
... 3 more
原因是在远程对象和调用传递的参数都必须实现接口Serializable接口,
在你实现接口的类中需要继承UnicastRemoteObject类。
这个类中提供了支持创建和导出远程对象的一系列方法,一个对象继承UnicastRemoteObject它将获得以下特性:
A、对这种对象的引用至多仅在创建该远程对象的进程生命期内有效
B、使得远程对象既有使用TCP协议通信的能力(Socket)
C、对于客户端与服务器的调用、传参、返回值等操作使用流的方式来处理