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 :

Typer un bean pour une liste


Sujet :

Spring Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 80
    Points : 74
    Points
    74
    Par défaut Typer un bean pour une liste
    Bonjour,

    Je rencontre l'erreur suivante au chargement de mon bean dans Spring 2.5 quand il est entre les deux balises handlers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     java.lang.IllegalArgumentException: Cannot convert value of type [org.josso.gateway.protocol.handler.XacmlPDPHandler] to required type [org.josso.gateway.protocol.handler.ProtocolHandler] for property 'handlers[0]': no matching editors or conversion strategy found
    Voici la déclaration dans le fichier XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <default-protocol-manager id="josso-protocol-manager">
            <handlers>
                <xacml-autzscheme:XacmlPDPHandler id="theXACML"/>
            </handlers>
         </default-protocol-manager>
    En fait ma classe implémente bien l'interface org.josso.gateway.protocol.handler.ProtocolHandler mais il manque quelque chose pour que cela fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class XacmlPDPHandler implements ProtocolHandler {
     
        public XacmlPDPHandler(){
            System.out.println("Initialise le handler pour le protocol Xacml");
        }
    Bien entendu je n'ai pas cette erreur dans le bean est déclaré en direct (au même niveau de default-protol-manager)
    Je pense que ce problème est contournable par un converter ou peut être même par un autre moyen (factory ?), mais je suis un peut trop débutant pour trouver tout seul dans google. Pourriez-vous m'aider ?

    Finalement je pense que le problème est que ma liste fait référence à l'interface et pas l'implémentation de la classe. D'après ce que j'ai vu sur google tous les exemples montrent des listes pour une classe d'objet donnée. Donc mon problème est le suivant est-ce qu'un CustumEditor peut retourner un objet dans un type donné mais casté sur le type attendu par la liste ? En java ça marche mais en "Spring" ?
    Mon autre problème est où et quand enregistrer un CustomEditor ?

    La bonne nouvelle c'est que cela fonctionne avec xbean, mais franchement xbean ...

    SP

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 80
    Points : 74
    Points
    74
    Par défaut BeanFactory pour caster la liste
    re,
    J'ai trouvé ce lien sur le site http://www.developpez.net/forums/d71...e/#post4173409 et j'ai essayé un BeanFactory pour remplir la liste avec un cast. Et j'ai la même erreur.

    Mon bean factory:
    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
    33
    public class InsertHandlesFBean implements FactoryBean, InitializingBean {
        private List<ProtocolHandler> children;
        private String vecteurList = null;
     
        public InsertHandlesFBean() {
            System.out.println("init le BeanFactory pour la liste handlers");
        }
        public void setVecteurList(String vecteurList) {
            this.vecteurList = vecteurList;
        }
     
        public Object getObject() throws Exception {
            return children;
        }
     
        public Class getObjectType() {
            return List.class;
        }
     
        public boolean isSingleton() {
            return false;
        }
     
        public void afterPropertiesSet() throws Exception {
            System.out.println("on charge la liste handlers");
            if(vecteurList==null) throw new IllegalArgumentException("remplir propriété vecteurList");
            //pour l'instant on ajoute un seul enfant
            try {
                children = Arrays.asList((ProtocolHandler) new XacmlPDPHandler());
            } catch (Exception e) {
                System.err.println("Marche pas le cast sur XacmlPDPHandler");
            }
        }
    et la déclaration dans le xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <s:bean id="protocolManagerHandlersFactory" class="org.josso.gateway.protocol.handler.InsertHandlesFBean">
           <s:property name="vecteurList" value="bidon"/>
        </s:bean>
         <s:bean id="josso-protocol-manager" class="org.josso.gateway.protocol.SSOProtocolManagerImpl">
    	<s:property name="handlers" ref="protocolManagerHandlersFactory"/>
         </s:bean>
    On pourra pas dire que j'ai pas essayé

    SP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 80
    Points : 74
    Points
    74
    Par défaut ClassLoading ?
    Se pourrait-il que ce soit un problème de chargement de classe ? Tout n'étant pas dans le même jar ...

    A suivre ...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 80
    Points : 74
    Points
    74
    Par défaut registerCustomEditor
    bon c'est pas un problème de classLoader, enfin je crois. J'essaye d'enregistrer un editor pour répondre au message d'erreur. Je pense que cela ressemble à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            System.out.println("init le BeanFactory pour la liste handlers");
            BeanWrapper monW = null;
            try {
                monW = new BeanWrapperImpl(this);
                monW.registerCustomEditor(org.josso.gateway.protocol.handler.ProtocolHandler.class, "handlers", new ClassEditor());
            } catch (Exception e) {
                System.err.println("Marche pas l'inscription de l'éditeur via beanWrapper "+e.toString());
            }
            PropertyEditor pe = monW.findCustomEditor(org.josso.gateway.protocol.handler.ProtocolHandler.class, "handlers");
            if(pe==null){
                System.out.println("Echec inscription de l'éditeur via beanWrapper pour handlers");
            }else{
                System.out.println("inscription de l'éditeur via beanWrapper pour handlers");
            }
    Cela semble marcher mais je ne sais où placer ce code ?

    A suivre ...

Discussions similaires

  1. [Debutant]creer une requete pour une liste deroulante
    Par torNAdE dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/07/2006, 15h22
  2. Réponses: 3
    Dernier message: 30/06/2006, 09h41
  3. Réponses: 3
    Dernier message: 13/04/2006, 18h04
  4. implémenter la notion "au moins" pour une liste d'
    Par mohamed dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 18/08/2004, 00h07
  5. [Debutant(e)]conseil pour une liste ?
    Par Tymk dans le forum Débuter
    Réponses: 5
    Dernier message: 05/08/2004, 14h33

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