Класс Java RMI не найден Исключение

Я знаю, что этот вопрос лишний, но ни один из предыдущих ответов в переполнении стека :( не решает мою проблему. Я создал простую программу Java RMI, но столкнулся с classNotFoundException. Я предоставляю свой пример кода.

import java.rmi.RemoteException;
import java.util.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.Naming;
interface OperationsInterface extends Remote
{
 String addParticipant(String name) throws RemoteException;
}
class MetaData extends UnicastRemoteObject implements OperationsInterface
{
 int count;
 List<String> names;

 MetaData() throws RemoteException
 {
   names = new ArrayList<String>();
 }

 public String addParticipant(String name)
 {
   this.count++;
   this.names.add(name);
   return "Successfully added";
 }
}
public class MyServer
{
 public static void main(String ar[])
 {
   try
   {
     MetaData metaData = new MetaData();
     //Registry registry = LocateRegistry.getRegistry();
     //registry.rebind("Game", metaData);
     Naming.rebind("rmi:///Game", metaData);
     System.out.println("Server Started ....");
   }catch(Exception e){
     System.out.println(e);
     e.printStackTrace();
   }
 }
}

Я использую Макбук про.

Я скомпилировал программу Java как:

javac MyServer.java

Затем я запустил сервер реестра как:

rmregistry

Я начал программу как:

Java Мой сервер

Но вылетает следующая ошибка:

    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: OperationsInterface
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: OperationsInterface
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:389)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:303)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:279)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:379)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:158)
    at java.rmi.Naming.rebind(Naming.java:177)
    at MyServer.main(MyServer.java:37)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: OperationsInterface
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(RegistryImpl_Skel.java:157)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:469)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:301)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: OperationsInterface
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1207)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1221)
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:731)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:674)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:611)
    at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:646)
    at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:311)
    at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:265)
    at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1856)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1804)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2098)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1624)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(RegistryImpl_Skel.java:154)
    ... 14 more

После нескольких часов переполнения стека я изменил способ запуска java-программы на:

java -Djava.rmi.server.codebase=file:/Users/RMI/dummy/  -Djava.security.policy=/Users/RMI/security.policy MyServer

где MyServer.java находится внутри фиктивного каталога, а содержимое файла security.policy задается следующим образом:

grant {
    // Allow everything for now
    permission java.security.AllPermission;
};

Но все еще сталкиваюсь с той же ошибкой, любая помощь приветствуется .....


person naveen    schedule 13.08.2020    source источник