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:
- Je naviguez jusqu'au répertoire bin de mon projet à l'aide de Terminal
- - Je exécuter rmiregistry à partir de là
- Je lance mon CommunicationServer de la nouvelle fenêtre de Terminal (et il imprime les messages de sorte qu'il semble fonctionner)
- 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
Vous devez vous connecter pour publier un commentaire.
Remplacer
avec
CommunicationImpl
est le serveur de mise en œuvre de laICommunication
. Le client ne sait ni se soucie de la mise en œuvre, seule l'interface.