J'ai besoin de remplir un bean (getter et setter) à partir d'un fichier de config en xml. Connaissez vous une solution pour y parvenir, j'ai entedu parler de digesters de jakarta mais je ne sais pas si c'est bien adapté.
en attente de vos réponses
J'ai besoin de remplir un bean (getter et setter) à partir d'un fichier de config en xml. Connaissez vous une solution pour y parvenir, j'ai entedu parler de digesters de jakarta mais je ne sais pas si c'est bien adapté.
en attente de vos réponses
J'ai eu le même problème que toi récemment et j'ai redéveloppé une classe qui me permet de faire le boulot... par contre, elle est spécifique à mon appli, et je ne peux pas te la fournir "telle quelle".
Voici la démarche que j'ai adoptée:
- lecture du fichier XML avec jdom
- pour chaque 'element' jdom, je recherche le setter correspondant sur la classe et je l'invoque.
Pour trouver une méthode, il faut utiliser le package java.lang.reflect de JAVA.
Supposons que tu trouves un element "toto" dans ton XML, voici comment tu trouves le "setter" associé sur ta classe:
Ensuite, tu peux invoquer directement la methode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public Method findSetter(Class maClasse, String nomAttribut, Class typeAttribut) { Method monSetter = null; Class[] typesAChercher = {typeAttribut}; try { monSetter = maClasse.getMethod("set"+nomAttribut, typesAChercher); } catch (Exception e) { // Gestion des erreurs } return monSetter; }
Bien sûr, il y a encore pas mal de boulot. Pour ma part, j'ai géré ces différents points et ça répond à mon besoin:
- si l'objet à setter est doit d'abord etre généré (nouvelle instance)
- pour rendre ton système entièrement récursif, avec autant de niveaux que tu veux dans l'XML (auquel cas, les premiers objets générés sont les plus profonds de l'arbre XML, que l'on remonte récursivement dans les objets "contenant" jusqu'à revenir à la racine de l'arbre)
- pour traiter à la fois les "element" jdom et les "attributs" de tes éléments. Pour ma part, les attributs cherche un setter attendant un paramètre de type "String", et les éléments correspondent à des objets d'abord instanciés, puis "settés".
(En gros, j'ai recodé à ma sauce une gestion des Beans de type "Spring"... mais avec des variantes dont j'avais besoin, pour la gestion particulière de HashMap ou de listes en particulier)
Salut,
Vous pouvez jeter un oeuil à des frameworks de binding Java/XML comme JAXB, XMLBeans ou tout simplement des API de sérialization comme XStream.
Ca vous évitera de réinvener la roue
Bonne chance.
@+
Partager