我试图通过 RMI 调用一个远程方法,该方法采用 1 个 MyData
类型的参数,这是服务器端和客户端都已知的接口(interface)。
在我的客户端类MyClass
中,我创建了一个MyData
类型的匿名对象,并将其传递给远程方法,并得到了一个异常:
Caused by: java.lang.reflect.InvocationTargetException
at wt.method.RemoteMethodServer.invoke(RemoteMethodServer.java:795)
at
... 2 more
Caused by: java.lang.ClassNotFoundException: MyClass$1 (no security manager: RMI class loader disabled)
问题:我必须使用接口(interface) MyData
的实现来传递 RMI 方法参数吗?该实现在服务器端和客户端都是已知的。
最佳答案
如果满足以下条件,就有可能:
- 该类已部署到对等方的 CLASSPATH,或通过代码库功能可用,和
- 定义它的类是
Serialized
、和 - 您意识到并接受外部类实例将与匿名类一起发送,因为它是内部类并且具有对其外部类的引用,因此外部类也必须部署到对等体或通过代码库功能可用。
(2) 可能不正确,并且除此之外的任何原因可能不需要为正确,并且 (3) 很可能不正确,因为它很可能是一个仅与服务器无关的客户端类。
不要这样做。没有什么优点,还有几个缺点。使用外部类或静态类。
关于java - 是否可以将匿名对象作为 RMI 方法的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28108706/