Accès dynamique à une classe pour appeler .... une méthode statique

Accès dynamique à une classe pour appeler .... une méthode statique - Java - Programmation

Marsh Posté le 13-04-2010 à 10:26:35    

Bonjour tout le monde.
 
Pour sauvegarder/restaurer les données d'un programme de comptabilité personnelle, je voudrais utiliser un fichier XML du genre :
 
<sauvegarde>
<Objet classe="Credit" Version="1.0">...</Objet>
<Objet classe="Debit" Version="1.0">...</Objet>
</sauvegarde>
 
La version correspondrait à une version de la classe, permettant au programme mis à jour de lire un fichier provenant d'une version précédente.
Chaque classe sauvegardée aurait la responsabilité d'importer les données qui l'intéresse pour créer les objets.
 
Class Credit {
 
     private static ArrayList<Credit> listeCredit = new ArrayList<Credit>();
 
     public static Credit importer(noeud XML) {
          ...
          [Ajout du nouvel objet Credit à listeCredit]
     }
}
Class Credit {
 
     private static ArrayList<Debit> listeDebit = new ArrayList<Debit>();
 
     public static Debit importer(noeud XML) {
          ...
          [Ajout du nouvel objet Debit à listeDebit]
     }
}
 
Mais comment appeler ses méthodes classiques ? Je pense créer une classe GestionnaireSauvegarde qui parcourt le XML et appelle les différentes méthodes d'importations en fonction de la classe de l'objet.
Je n'ai pas les classes/méthodes XML en tête alors je vais faire du pseudo code, désolé.
 
Je sais faire ça :
 
class GestionnaireSauvegarde{
 
public void exporter(String fichierXML){
     [Créer le fichier XML]
     
     [DEBUT Pour chaque objet à sauvegarder]
     racineXML.ajouterNoeud(objet.exporter);
     [FIN Pour chaque objet]
}
 
public void importer(String fichierXML){
     [Ouvrir le fichier XML]
       
     [DEBUT Pour chaque balise sous la racine]
     nomClasse = balise.getParameter("classe" );
     if(nomClasse.equals("Credit" )) Credit.importer(balise)
     if(nomClasse.equals("Debit" )) Debit.importer(balise)
     [FIN Pour chaque balise sous la racine]
}
 
}
 
Ce qui m'oblige à créer une ligne if(classe.equals("<classe>" )) <classe>.importer(balise)
Et je vais en gérer plusieurs des classes comme cela.
 
J'aimerais plutôt faire :
 
[DEBUT Pour chaque balise sous la racine]
nomClasse = balise.getParameter("classe" );
Class classe = Class.forName(nomClasse);
classe.importer(balise)
[FIN Pour chaque balise sous la racine]
 
Mais là, même si je gère une exception pour méthode non existante le compilateur va me jeter bien sûr [:tinostar]  
 

  • Ma méthode d'importation est-elle intéressante ?
  • Comment appeler la méthode statique importer(Noeud XML) dynamiquement ?


J'espère avoir été clair en tout cas [:cupra]
Et merci


Message édité par moustik510 le 13-04-2010 à 10:27:32
Reply

Marsh Posté le 13-04-2010 à 10:26:35   

Reply

Marsh Posté le 13-04-2010 à 11:08:26    

Ce ne serais pas plus simple à gérer avec une api de serialization java<=>XML comme JAXB ?

Reply

Marsh Posté le 13-04-2010 à 13:31:05    

phnatomass a écrit :

Ce ne serais pas plus simple à gérer avec une api de serialization java<=>XML comme JAXB ?


Je ne connais pas JAXB mais ça à l'air bien pratique.
 
Mais apparemment le XML doit exactement correspondre à la classe Java donc pas de gestion de version ? (fonctionnalité facultative)
 
Je fais des recherches là dessus pour en savoir un peu plus. Merci.
 
Ensuite au moment de l'écriture sur fichier il faudra gérer un cryptage pour la confidentialité des informations mais c'est un autre sujet.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed