Java RMI ServerException – java.lang.ClassNotFoundException:org.prog.rmi.RmiServer_Stub
我inheritance了一些Java RMI客户端/服务器代码,虽然它在一台机器上运行良好,但我还没能让它在我的开发环境中运行。
问题是当我使用以下java.exe -Djava.security.policy=conf\server.policy -SRC;. -Djava.library.path=. org.prog.rmi.RmiServer
运行服务器时java.exe -Djava.security.policy=conf\server.policy -SRC;. -Djava.library.path=. org.prog.rmi.RmiServer
java.exe -Djava.security.policy=conf\server.policy -SRC;. -Djava.library.path=. org.prog.rmi.RmiServer
我收到以下错误:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: org.prog.rmi.RmiServer_Stub (no security manager: RMI class loader disabled) at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250) at sun.rmi.transport.Transport$1.run(Transport.java:159) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:155) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) ...
我的server.policy
文件是
grant { permission java.security.AllPermission; };
我的java代码:
package org.prog.rmi; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; import java.rmi.server.UnicastRemoteObject; import java.rmi.registry.*; public class RmiServer extends UnicastRemoteObject implements RmiServerIntf { private BatchApi bapi; private String iniFileLocation; private String layoutOption; private int addressCount = 0; private RefInt apiHandle = new RefInt(); public RmiServer(String iniFileLocation,String layoutOption) throws RemoteException { super(); this.iniFileLocation = iniFileLocation; this.layoutOption = layoutOption; initAPI(); startupAPI(); openAPI(); } public static void main(String args[]) { System.out.println("RMI server started"); // Create and install a security manager if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); System.out.println("Security manager installed."); } else System.out.println("Security manager already exists."); try //special exception handler for registry creation { LocateRegistry.createRegistry(1099); System.out.println("java RMI registry created."); } catch (RemoteException e) { //do nothing, error means registry already exists System.out.println("java RMI registry already exists."); } try { //Instantiate RmiServer for (String arg: args){ System.out.println(arg); } RmiServer obj = new RmiServer(args[0],args[1]); // Bind this object instance to the name "RmiServer" Naming.rebind("//127.0.0.1/RmiServer", obj); System.out.println("PeerServer bound in registry"); } catch (Exception e) { System.err.println("RMI server exception:"); e.printStackTrace(); } } }
我已经看到了与java.rmi.server.codebase
相关的解决方案,但也没有任何运气设置
您没有使用rmic重新生成存根,或者注册表无法通过其类路径访问它。
经过一些进一步的调查并遵循RMI教程后,似乎端口1099上的RMI注册服务器出现问题。
当我在另一个端口(例如2005)上盯着RMI注册服务器并更改了这些代码行时
LocateRegistry.createRegistry(2005);
和
Naming.rebind("//127.0.0.1:2055/RmiServer", obj);
这成功运行没有错误,我的客户端能够连接。
我希望这个答案能帮助其他人解决这个错误。 如果有人需要更详细的信息,请告诉我。
- Hibernate 5.2.7 – java.lang.NoSuchMethodError:org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava / util / Map;
- SLF4J的多个绑定
- 将对象副本传递给hadoop中所有映射器的最佳实践
- 从Java中解析ping结果的时间部分
- 如何在Java中获取程序窗口的x和y?
- 使用MapReduce中的globStatus过滤输入文件
- Spring Boot和自定义404错误页面
- 简单的Java“服务提供者框架”?
- 如何将Enum与其相反的值相关联,如在主要方向(南北,东西等)?