2016-07-04 252 views
0

对于可能是一个明显的问题,我提前表示歉意,但我一直试图让这一整天工作,我无法弄清楚如何让这个工作。简而言之:我的RMIregistry找不到我的RMI服务器应用程序的接口类。Java RMI服务器问题

我通过Eclipse中运行rmiregistry.exe这些论点:

1234 -J-Djava.rmi.server.useCodebaseOnly=false 

而且我得到了下面的RMI服务器:

 package es.test.innova.pruebas.test; 

    import java.io.File; 
    import java.rmi.Naming; 
    import java.rmi.RMISecurityManager; 
    import java.rmi.RemoteException; 
    import java.rmi.server.UnicastRemoteObject; 

    public class TestImpl extends UnicastRemoteObject implements Test 
    { 
     public TestImpl() throws RemoteException {} 

     public static void main(String args[]) 
     { 
      try 
      {   
      if (System.getSecurityManager() == null) { 
       System.setSecurityManager(new RMISecurityManager()); 
       } 

       TestImpl obj = new TestImpl(); 

       Naming.rebind("rmi://localhost:1234/Test",obj); 
       System.out.println("Connected to registry!"); 
      } 
      catch (Exception e) 
      { 
       System.out.println("HelloImpl err: " + e.getMessage()); 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public String validate(File f) throws RemoteException { 
      return "hello world"; 
     } 
} 

然后我用这些参数运行:

-Djava.security.policy=C:\D\RMI\policy.all -Djava.rmi.server.codebase=file:/C:/D/Proyectos/Firma/validarfirma/ 

引用的策略文件是这样的:

grant { 
    permission java.security.AllPermission "", ""; 
}; 

代码库参数引用项目的文件夹,通过我也尝试将它指向文件夹的bin文件夹,甚至直接在.class文件中,正如本网站的其他答案中所述。

不管我怎么努力,我不断收到此错误:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: es.test.innova.pruebas.test.Test 
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267) 
    at sun.rmi.transport.Transport$1.run(Transport.java:177) 
    at sun.rmi.transport.Transport$1.run(Transport.java:174) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:724) 
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:275) 
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252) 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:378) 
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) 
    at java.rmi.Naming.rebind(Naming.java:177) 
    at es.test.innova.pruebas.test.TestImpl.main(TestImpl.java:25) 
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: es.test.innova.pruebas.test.Test 
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source) 
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267) 
    at sun.rmi.transport.Transport$1.run(Transport.java:177) 
    at sun.rmi.transport.Transport$1.run(Transport.java:174) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: java.lang.ClassNotFoundException: es.test.innova.pruebas.test.Test 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1206) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:270) 
    at sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1219) 
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:729) 
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:673) 
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:610) 
    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:255) 
    at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1556) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1512) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    ... 13 more 
HelloImpl err: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: es.test.innova.pruebas.test.Test 

类没有找到。我试过手动运行所有的东西,而不是使用Eclipse,直接从.class文件夹运行rmi,将服务器编译为一个.jar文件,然后用它来代替......当然,我已经弄了很多代码库参数。我尝试了所有我能想到的,但我卡住了。

事情是我必须设置错误的代码或类似的东西,但我不知道如何。注册表无法找到我的课程。

如果有人能帮助我,我会非常感激。谢谢阅读。

+0

你有没有在同一个包TestImpl名为Test的接口? –

回答

0
-Djava.rmi.server.codebase=file:/C:/D/Proyectos/Firma/validarfirma/ 

这样做的意义在于缺少类应位于:

C:/D/Proyectos/Firma/validarfirma/es/test/innova/pruebas/test/Test.class