假设我有课程SuperNode
和界面Node
:
SuperNode implements Node
我有一个RMI-Implementation服务器端,我试图从一个方法发送Node而没有用户拥有SuperNode的源文件,但他们确实有接口Node。
public Node RMIImplServer.getNode();
当我这样做时,我收到此错误:
java.rmi.UnmarshalException:错误解组返回;嵌套 异常是:java.lang.ClassNotFoundException: SEHT.somepackage.SuperNode(没有安全管理器:RMI类加载器 在sun.rmi.server.UnicastRef.invoke(未知来源)at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(未知 来源)at java.rmi.server.RemoteObjectInvocationHandler.invoke(未知来源) at com.sun.proxy。$ Proxy0.getDataNodes(Unknown Source)引起: java.lang.ClassNotFoundException:SEHT.somepackage.SuperNode(no 安全管理器:禁用RMI类加载器) sun.rmi.server.LoaderHandler.loadClass(未知来源)at sun.rmi.server.LoaderHandler.loadClass(未知来源)at java.rmi.server.RMIClassLoader $ 2.loadClass(未知来源)at java.rmi.server.RMIClassLoader.loadClass(未知来源)at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)at java.io.ObjectInputStream.readNonProxyDesc(未知来源)at java.io.ObjectInputStream.readClassDesc(未知来源)at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)at java.io.ObjectInputStream.readObject0(未知来源)at java.io.ObjectInputStream.readObject(未知来源)at java.util.ArrayList.readObject(未知来源)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)at java.lang.reflect.Method.invoke(未知来源)at java.io.Object.StreamClass.invokeReadObject(未知来源)at java.io.ObjectInputStream.readSerialData(未知来源)at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)at java.io.ObjectInputStream.readObject0(未知来源)at java.io.ObjectInputStream.readObject(未知来源)at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)... 5更多
我试图做的是什么,如果是这样,我做错了什么,任何帮助都会受到赞赏。
最后想通了......由于我没有检查过的愚蠢默认值,jar文件并没有包含正确的文件。非常感谢EJP的帮助。
答案 0 :(得分:0)
客户端不需要任何源文件。但是,它确实需要远程方法返回的所有类型的对象文件(.class)文件,在其CLASSPATH,上可用,除非:
...如果您不想部署SuperNode.class
或客户端的任何内容,您可以使用代码库功能。这太复杂了。
java.rmi.server.codebase
。