2016-07-04 11 views
0

Ich entschuldige mich im Voraus für das, was wahrscheinlich ein offensichtliches Problem ist, aber ich habe versucht, dies funktioniert den ganzen Tag und ich kann nicht herausfinden, wie man dies zur Arbeit zu bringen. Kurz gesagt: Meine RMIregistry kann die Interface-Klasse meiner RMI-Server-App nicht finden.Java RMI Server Probleme

Ich bin mit rmiregistry.exe durch Eclipse-mit diesen Argumenten:

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

Und ich bekam den folgenden RMI-Server:

 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"; 
     } 
} 

die mich dann mit diesen Argumenten ausführen:

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

Die referenzierte Richtliniendatei lautet wie folgt:

Der CodeBase-Parameter verweist auf den Ordner des Projekts. Ich habe auch versucht, ihn im Ordner bin des Ordners und sogar direkt in den .class-Dateien anzuweisen, wie in anderen Antworten auf dieser Site erwähnt.

Unabhängig davon, was ich versuche, halte ich diesen Fehler:

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 

Klasse nicht gefunden. Ich habe versucht, alles manuell anstelle von Eclipse laufen zu lassen, rmi direkt aus dem .class-Dateiordner laufen lassend, den Server als .jar kompilierend und das stattdessen verwendend ... Und natürlich habe ich mit dem codebase Parameter ein Bündel getüftelt. Ich habe alles versucht, was mir einfiel, aber ich stecke fest.

Die Sache ist, ich muss die Codebasis falsch oder so etwas einstellen, aber ich sehe nicht wie. Die Registrierung kann meine Klassen nicht finden.

Ich wäre sehr dankbar, wenn mir hier jemand helfen könnte. Danke fürs Lesen.

+0

Haben Sie eine Schnittstelle-Test im selben Paket wie TestImpl genannt? –

Antwort

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

Die Bedeutung hiervon ist, dass die fehlende Klasse sollte so angeordnet sein:

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