web-dev-qa-db-fra.com

java.rmi.UnmarshalException: erreur unmarshalling arguments; L'exception imbriquée est: Java.lang.ClassNotFoundException: ServicesTableau

J'ai besoin de votre aide autour de Java RMI, j'ai développé un exemple de programme utilisé pour trier les tables. mais j'ai eu cette exception:

Erreur RemoteException occurred in server thread; nested exception is: 
    Java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    Java.lang.ClassNotFoundException: ServicesTableau

et voici le code source de mon serveur:

public class Serveur {
    public static void main(String args[]) {

        try {

            System.out.println("Server start ...");
            ServicesTableauImpl od = new ServicesTableauImpl();
            String url = "rmi://" + args[0] + "/ServicesTableauImpl";
            System.out.println("Passe");
            Naming.rebind(url, od);
            System.out.println("Attente d'invocations de client / CTRL-C pour stopper");
        } catch (Exception e) {
            System.out.println("Erreur " + e.getMessage());
        }
    /*
    catch(Java.net.MalformatedURLException e){
    System.out.println("Mauvais nom de serveur");
    System.exit(1);
    }
    catch(RemoteException e){
    System.out.println("Pas de Rmiregistry");
    System.exit(1);
    }
    */
    }
}
8
MDIT

Cette classe n'est pas disponible sur le CLASSPATH du registre RMI. La solution la plus simple consiste à démarrer le registre dans la même machine virtuelle, via LocateRegistry.createRegistry().. Stocker le résultat dans un champ statique.

11
user207421

Cela m'est arrivé parce que je n'ai pas exécuté rmiregistry dans le même répertoire que le serveur.

0
Greg Stretton

Dans certains cas, vous devez déplacer le code de votre client rmi (interface et main) dans le package par défaut. Répétez-le pour le côté serveur. Cela peut résoudre votre problème (travailler avec l’emballage dans rmi n’est pas si évident).

0
Roberto