Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Rmi Unmarshall exception

    Ciao a tutti, ho fatto un programmino di test per l'rmi è ho l'eccezione da titolo,vi ricopio il codice, sto usando netbeans con 3 progetti, uno è il server uno il client e l'altro è l'interfaccia remota...ho linkato l'interfaccia remota per avere il riferimento sia nel server che nel client:
    Client:
    codice:
     
    package rmi.client;
    import java.net.MalformedURLException;
    import java.rmi.Naming;
    import java.rmi.NotBoundException;
    import java.rmi.RemoteException;
    import rmi.shared.IRemoteInterface;
    
    public class RMIClient {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) throws NotBoundException, MalformedURLException, RemoteException{
           IRemoteInterface server = (IRemoteInterface)Naming.lookup("RMIService");
           server.output();
        }
    
    
    }
    Interfaccia:
    codice:
     
    package rmi.shared;
    
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    
    public interface IRemoteInterface extends Remote {
        
     public void output()throws RemoteException;
    }
    Server:
    StartServer:
    codice:
    import java.net.MalformedURLException;
    import java.rmi.Naming;
    import java.rmi.RemoteException;
    import rmi.server.ServerClass;
    
    public class StartServer {
    
    	
    	public static void main(String[] args)throws RemoteException,MalformedURLException {
    
    		ServerClass server;
    		server = new ServerClass();
    		Naming.rebind("RMIService",server);
    		System.out.println("Servers Started");
    	}
    }
    ServerClass:
    codice:
    package rmi.server;
    
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    import rmi.shared.IRemoteInterface;
    
    
    public class ServerClass  extends UnicastRemoteObject implements IRemoteInterface{
        public ServerClass() throws RemoteException {
    	}
        @Override
        public void output(){
            System.out.println("Ciao! Sono il server che ti parla");
        }
        
    }
    l'errore avviene all'avvio della classe startserver, ho passato questi argomenti:
    StartServer: -Djava.rmi.server.codebase="file://${workspace_loc:RMI-Shared}/bin/ file://${workspace_loc:RMI-Server}/bin/"
    RMICLient: -Djava.security.policy=client.policy
    naturalmente ho creato pure il policy
    l'eccezione è questa:
    codice:
    Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    	java.lang.ClassNotFoundException: rmi.shared.IRemoteInterface
    	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 java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    	at java.lang.Thread.run(Thread.java:679)
    	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
    	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
    	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
    	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    	at java.rmi.Naming.rebind(Naming.java:177)
    	at StartServer.main(StartServer.java:13)
    Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    	java.lang.ClassNotFoundException: rmi.shared.IRemoteInterface
    	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 java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    	at java.lang.Thread.run(Thread.java:679)
    Caused by: java.lang.ClassNotFoundException: rmi.shared.IRemoteInterface
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Class.java:264)
    	at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:728)
    	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:672)
    	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:609)
    	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:1548)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1510)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
    	... 12 more

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Quell'eccezione viene provocata dalla ClassNotFoundException appena sotto ed, infatti, la Documentazione dell'eccezione la elenca tra le possibili cause.

    Secondo me non ti stai portando dietro tutte le librerie. In particolare, non ti stai portando dietro il JAR che contiene l'interfaccia.

    Verifica che nella cartella da cui stai avviando il server vi sia la nota cartella "lib" con all'interno tutti i JAR necessari e che questi siano nel classpath del JAR che contiene il server.

    Ricordo sempre che NetBeans genera automaticamente il JAR dell'applicazione all'interno della directory "dist", ma che dentro a tale cartella genera sempre anche una cartella "lib" con tutte le librerie necessarie al suo funzionamento (questo, per quanto riguarda le impostazioni standard di NetBeans) e che l'applicazione non è composta solo dal JAR, ma anche da tutta la cartella "lib", che deve chiamarsi "lib" e deve contenere i JAR delle librerie usate.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    non mi viene dato l'errore nella dichiarazione dell'interfaccia remota nel client e nel server...poichè ho fatto il "link" , quindi mi viene riconosciuta...altrimenti mi direbbe che non esiste l'oggetto interfaccia remota...quindi credo che la prenda...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da jonnykaraoke
    non mi viene dato l'errore nella dichiarazione dell'interfaccia remota nel client e nel server...poichè ho fatto il "link" , quindi mi viene riconosciuta...altrimenti mi direbbe che non esiste l'oggetto interfaccia remota...quindi credo che la prenda...
    Non so cosa tu intenda per "link".
    Io sto parlando dell'esecuzione (non della compilazione).
    Non so in che modo tu stia cercando di avviare il server (spero, mi auguro, non dall'interno dell'IDE: farlo significa quasi sempre mettersi nella peggiore condizione in termini di "normalità"), ma di sicuro la JVM, al momento del caricamento della classe dell'interfaccia remota, non la trova nel CLASSPATH. E l'eccezione è lì a dimostrarlo:

    codice:
    Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    	java.lang.ClassNotFoundException: rmi.shared.IRemoteInterface
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    per link intendo che do il riferimento alla interfaccia remota...senza riscrivere l'oggetto interfaccia remota...per avvio del server intendo che prima ho avviato l'rmiregistry e poi ho avviato la classe startserver del mio progetto per fare il rebind...poi avvio la classe del mio client...secondo voi dovrei copiare il codice dell'interfaccia remota sia nel server che nel client? il test è in locale se non si è capito...solo che la comunicazione tra i progetti è come se fosse remota...è strano perchè prima mi dava l'errore di interfaccia non trovata, poi dall'ide ho detto di condividere le classi col progetto shared dove c'è l'interfaccia remota, e l'errore è scomparso quindi il progetto client e server riescono ad accedere al codice dell'interfaccia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.