Erreur "ClassCastException: $ Proxy0 ne peut pas être généré" lors de la création d'une application RMI simple

Je suis entrain de créer mon premier, très simple RMI application client-serveur.

Voici le code:

Interface "ICommunication"

package itu.exercies.RMI.server;

    import java.rmi.Remote;
    import java.rmi.RemoteException;

public interface ICommunication extends Remote  
{
    public String doCommunicate(String name) throws RemoteException; 

}

L'implémentation de l'Interface "CommunicationImpl":

package itu.exercies.RMI.server;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class CommunicationImpl extends UnicastRemoteObject implements ICommunication {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public CommunicationImpl() throws RemoteException {
        super();

    }

    @Override
    public String doCommunicate(String name) throws RemoteException {

        return "Hello this is server , whats up " +name+ " ?!\n";
    }

}

Ici est ma classe principale du serveur "CommunicationServer":

package itu.exercies.RMI.server;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;


public class CommunicationServer {
    /**
     * @param args
     * @throws RemoteException 
     * @throws MalformedURLException 
     */
    public static void main(String[] args) throws RemoteException, MalformedURLException {
        CommunicationImpl imp = new CommunicationImpl();
        Naming.rebind("CommunicationImpl", imp);
        System.out.println("Server started...");
        System.out.println("Object successfully registered. It is bound to the name 'CommunicationImpl'.");

    }

}

Et c'est mon client "CommunicationClient":

package itu.exercies.RMI.client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import itu.exercies.RMI.server.CommunicationImpl;

public class CommunicationClient {
    public static void main(String[] args) throws MalformedURLException, RemoteException, NotBoundException {

        String url = new String("rmi://localhost/CommunicationImpl");
        CommunicationImpl comm = (CommunicationImpl)Naming.lookup(url);
        String reply = comm.doCommunicate("Wiktor");
        System.out.println(reply);


    }

}

Maintenant, quand j'essaie de le lancer:

  1. Je naviguez jusqu'au répertoire bin de mon projet à l'aide de Terminal
  2. - Je exécuter rmiregistry à partir de là
  3. Je lance mon CommunicationServer de la nouvelle fenêtre de Terminal (et il imprime les messages de sorte qu'il semble fonctionner)
  4. J'ouvre la troisième fenêtre de terminal et quand j'essaie de lancer mon CommunicationClient elle lève une exception.

java de l'uit.exercies.RMI.client.CommunicationClientException dans le thread "main" java.lang.ClassCastException: $Proxy0 ne peut pas être lancé à l'uit.exercies.RMI.serveur.CommunicationImpl
de l'uit.exercies.RMI.client.CommunicationClient.principale(CommunicationClient.java:14)

Jusqu'à présent, j'ai essayé de le fixer par la création d'un tampon de "CommunicationImpl' objet à l'aide de rmic mais maintenant, au lieu de "$Proxy0' l'erreur fait référence à des "CommunicationImpl_Stub':

Exception in thread "main" java.lang.ClassCastException: uit.exercies.RMI.serveur.CommunicationImpl_Stub ne peut pas être lancé à l'uit.exercies.RMI.serveur.CommunicationImpl
de l'uit.exercies.RMI.client.CommunicationClient.principale(CommunicationClient.java:14)

À ce point, je n'ai aucune idée de chercher des erreurs. Quelqu'un peut-il me donner des suggestions?

source d'informationauteur Booyaches