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

Spring Java Discussion :

Récupérer un proxy [Framework]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut Récupérer un proxy
    Bonjour,
    J'ai un code qui me permet d'invoquer les méthodes d'une interface sans que j'ai a les appeler de façon explicite (genre bean.nomMethode()).

    Voici mon bout de code utilisant la réflexion
    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
     
      private static Method getMethode( Class maClass, 
    						     String nomMethode, 
    						     Class[] typesDesParamatres)
     throws NoSuchMethodException 
    	    {
     
    	if (classe == null) {
    		    throw new NoSuchMethodException(" Classe ou methode  inhexistante ");
    		}
    		try {
     
    		    return maClass.getDeclaredMethod( nomMethode, typesDesParamatres );
    		}
    		catch (NoSuchMethodException ex) {
     
    		}
    	    }
    Le problème est que maClass est un proxy (remote) d'un web service.
    Quand juste avant je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Class clazz = remote.getClass();
     
    	    	logger.info(" classe de l'objet chaine " + clazz.getName());
    et bien j'obtiens $Proxy48 au lieu du nom de la classe .
    Du coup j'obtiens une erreur du type object is not an instance of declaring class

    Auriez vous une idée ?
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    vous devez obtenir l'objet MEthod qui proviens de la classe que vous allez utiliser. En l'occurence, ici, vous devez passer remote.getClass() à votre méthode.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    vous devez obtenir l'objet MEthod qui proviens de la classe que vous allez utiliser. En l'occurence, ici, vous devez passer remote.getClass() à votre méthode.
    Bonjour,
    C'est exactement ce que je fais (confer la fin de mon précédent message ), lors de l'appel et le message d'erreur est en gras ci-dessus. Et pour cause c'est bien le proxy qui est utilisé.
    Autre idée ?
    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on peux voir le code complet (qui fait appel à getMethode() et qui appelle cette méthode) ainsi que l'exception complète et la ligne où elle se produit? Parce que dans votre message précédent, il n'y a rien qui indique que c'est la classe du proxy que vous passez

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    on peux voir le code complet (qui fait appel à getMethode() et qui appelle cette méthode) ainsi que l'exception complète et la ligne où elle se produit? Parce que dans votre message précédent, il n'y a rien qui indique que c'est la classe du proxy que vous passez
    Ok.
    Ma méthode
    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
     
      private static Method trouverLaMethode( Class classe, 
    						     String nomMethode, 
    						     Class[] typesDesParamatres) throws NoSuchMethodException 
    	    {
    		if (classe == null) {
    		    throw new NoSuchMethodException(" Classe ou methode  inhexistante ");
    		}
    		try {
     
    		    return classe.getDeclaredMethod(nomMethode, typesDesParamatres );
    		}
    		catch (NoSuchMethodException ex) {
    		    return trouverLaMethode( classe.getSuperclass(), nomMethode, typesDesParamatres );
    		}
    	    }

    et le code qui l'utilise
    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
     
        private  List<Item> trouverElementsCriteres(RemoteServices remoteServices, String nommeth, Integer idCentre, String annee, String etat ) throws ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
     
     
    	    	InvocationHandler mandataire = Proxy.getInvocationHandler(remoteServices);
    	    	ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
    	    	Class[] interfaces = new Class[]{RemoteServices.class};
     
    	    	Object proxy = java.lang.reflect.Proxy.newProxyInstance(contextClassLoader, interfaces, mandataire);
     
    	    	Class clazz = proxy.getClass();
     
                  if(logger.isDebugEnabled()){
                	  logger.debug(" classe de l'objet chaine " + clazz.getName());
                  }
     
    	    	List<StatisticItemDTO> sItemDTOs =null;   	
    	    	Method laMethode = trouverLaMethode(clazz,nommeth, new Class[]{Integer.class, String.class, String.class});
    	    	return (List<Item>)laMethode.invoke(clazz, new Object[]{idCentre,annee,etat});
    	    }

    Qu'est ce que j'ai loupé?

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (List<Item>)laMethode.invoke(proxy, new Object[]{idCentre,annee,etat});
    devrais mieux marcher

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. proxy PAC : comment récupérer plusieurs IP ?
    Par michauko dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/05/2008, 17h36
  2. Récupérer les informations d'un proxy
    Par Akutabi dans le forum Windows
    Réponses: 5
    Dernier message: 19/11/2007, 11h55
  3. Récupérer l'adresse ip à travers un serveur proxy
    Par Olivier Regnier dans le forum Web
    Réponses: 1
    Dernier message: 14/11/2007, 16h50
  4. récupérer le proxy de firefox
    Par Jérémy Lefevre dans le forum Firefox
    Réponses: 1
    Dernier message: 25/04/2007, 09h52
  5. Récupérer une image d'un autre site [proxy]
    Par Thi0123 dans le forum Langage
    Réponses: 1
    Dernier message: 19/10/2006, 17h03

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