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:
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:
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:
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
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:
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:
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é :cry:
SP