IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

java lang ClassCastException


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 14
    Par défaut java lang ClassCastException
    Bonjour,

    Je voudrais passer un objet appelé UserNodeData via RMI depuis un server vers un client.

    Dans la partie client, je cree un objet du type de l'interface de UserNodeData (interface qui s'appelle RemoteLinkman). Voici le bout de code qui me pose problèmes (code qui se trouve donc chez le client alors que UserNodeData est sur le server):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    RemoteLinkman server;
    public void afficher(Graph g) throws RemoteException {
       UserNodeData d = (UserNodeData)server.getRootNode();
       UserNode node = new UserNode(d,g,this);
       node.afficherLesVoisins(5);
    }
    Je commence par lancer le serveur et ensuite je lance le client. Apres que la connection soit etablie, il se produit l'erreur suivante (sur le bout de code haut-dessus) :

    Exception in thread "main" java.lang.ClassCastException: $Proxy2 cannot be cast to ch.globalcard.linkman.server.UserNodeData
    at $Proxy1.getRootNode(Unknown Source)
    at linkman.NodeManagerClient.afficher(NodeManagerClient.java:36)
    Auriez-vous une idee de l'origine eventuelle de l'erreur ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    La méthode "server.getRootNode();" ne te renvoie simplement pas un objet de type "UserNodeData": donc ton cast lève une exception

    Et j'ajouterais que:
    1) le message d'erreur est explicite
    2) le problème a déjà été traité et retraité dans nombre de tutoriaux et de forums!
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 14
    Par défaut
    GetRootNode nous renvoie bien le bon objet du cote du serveur mais il n'est pas vu comme tel du cote du client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public class NodeManagerServer extends UnicastRemoteObject implements RemoteLinkman {
     
    	private static final long serialVersionUID = 1L;
    	public NodeManagerServer()  throws RemoteException  {
    	}
    	public UserNodeData getRootNode() throws RemoteException
    	{
    		Connection con = Link.getSQLcon().getConnection();
    		Statement stmt;
     
    		//Get a Statement object
    		try {
    			stmt = con.createStatement();
    			String user = "laurent";
    			String query = "SELECT * FROM user where username= '" + user + "'";
    			ResultSet rs = stmt.executeQuery(query);
    			System.err.println(query);
    			if (rs.next()) {
     
    				UserNodeData n = new UserNodeData (rs.getString("firstname")  ,rs.getString("name"), rs.getString("username"),rs.getLong("id"));
    				System.out.println("ce qui est retourne par getrootnode : " + n);
    				return n;
    			}
     
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		System.err.println("return null");
    		return null;
     
    	}

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Dans ce cas, as-tu vérifié que l'objet en question est bien sérialisable, de même que tous les sous-objets qui le composent?

    Sinon, il est normal qu'il ne passe pas correctement par RMI.

    As-tu bien les mêmes fichiers .class côté serveur et côté client ou ont-ils ét générés avec des JVM différentes: cela pourrait expliquer l'incompréhension de ton objet côté client
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 14
    Par défaut
    Dans ce cas je me pose la question si d'etendre UniCastRemoteObject ne suffit pas pour le passer par RMI.

    L'objet UserNodeData :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class UserNodeData extends UnicastRemoteObject implements LinkNodeData {
     
     
    	private static final long serialVersionUID = 1L;
     
    	private String firstname;
    	private String lastname;
    	private String username;
    	private String imageurl;
    	private long id;
     
    	public final static int type =  LinkNodeData.usernode;
     
     
    	public UserNodeData (String firstname,String lastname, String username, long id) throws RemoteException
    	{
    		this.firstname = firstname;
    		this.lastname = lastname;
    		this.username = username;
    		this.imageurl = "c:/intero.jpg";
    		this.id = id;
     
    	}

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Es tu sûr de bien avoir fait ton rmic correctement ? Il n'y a pas une mauvaise version d'un côté ?

  7. #7
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Est ce que tu as essayé d'afficher le type de l'objet que te renvoie la méthode getRootNode() lors de l'exécution?

    Ca pourrait peut être donner des pistes..

Discussions similaires

  1. erreur java java.lang.ClassCastException
    Par yLaplace dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2007, 18h17
  2. pb java.lang.ClassCastException: $Proxy84
    Par chakala dans le forum Wildfly/JBoss
    Réponses: 10
    Dernier message: 15/03/2007, 14h21
  3. JSP javamail java.lang.ClassCastException
    Par itr dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 14/06/2006, 17h01
  4. [EJB3] java.lang.ClassCastException
    Par n00noors dans le forum Java EE
    Réponses: 9
    Dernier message: 21/02/2006, 15h06
  5. Réponses: 16
    Dernier message: 10/01/2006, 22h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo