Le principe est simple : on déclare le chemin XPath de la donnée qu’on veut lire à l’aide d’une annotation Java.
Exemple :
interface Annuaire {
@XPath("/annuaire/departement/@id")
String getDepartementId();
@XPath("/annuaire/@annee")
int getAnnee();
}
...
// static import net.avcompris.binding.dom.helper.DomBinderUtils.*;
File file = ... ; // un fichier XML
Annuaire annuaire = xmlContentToJava(file, Annuaire.class);
... annuaire.getAnnee(); // hop, ça marche
L’API est en 0.1.1, et, si elle est prometteuse, elle n’a été testée que sur des petits projets – en particulier, il doit lui manquer quelques types primitifs, la gestion des dates doit être brute de décoffrage, des trucs comme ça.
L’API permet d’ores et déjà de faire des requêtes paramétrées :
@XPath("//person[email = $arg0]/name")
String getPersonNameByEmail(String email);
À partir d’un document XML, elle peut récupérer des tableaux, des couples clés / valeurs, divers types Java, des sous-structures, elle peut vérifier qu’un élément est présent, compter le nombre de éléments vérifiant une condition, faire des calculs à la volée…
Je vous renvoie à la page Return Types de la documentation.
Pour ceux qu’intéresse la mécanique interne, l’API attache l’interface Java passée en paramètre au nœud DOM. Cela signifie en particulier que si le document DOM est modifié, les méthodes Java getXxx() annotées avec des chemins XPath renverront les données mises à jour.
L’écosystème de cette API est le suivant :
- Projet open source. Fichiers sources gérés par Mercurial (hg) et hébergés chez Google Code : https://code.google.com/p/avc-binding-dom/source
- Documentation : Installation Guide, Getting Started, etc.
- Site produit par Maven : http://wiki.avc-binding-dom.googlecode.com/hg/site/index.html — pour voir la doc et les rapports Maven.
- Wiki chez Google Code : https://code.google.com/p/avc-binding-dom/ — pour voir la doc et poster des commentaires.
- Intégration continue par Jenkins : http://ci.avcompris.net/ (hébergement perso)
- Repository Maven : http://repo.avcompris.net/content/repositories/releases/ (hébergement perso)
Pour la petite histoire : j’avais initialisé une première version de cette API chez Capgemini pour un projet Java à l’automne 2010. Capgemini a ensuite validé le fait de passer ce développement open source, qui a continué de vivre sa vie sous la forme de XmlField, maintenu notamment par Nicolas Richeton, Jean-Pierre Grillon et Mabrouk Belhout.
Liens pour XmlField :
- hébergement Sourceforge : http://sourceforge.net/projects/xmlfield/
- sources Subversion (SVN) : http://xmlfield.svn.sourceforge.net/
- doc / site produit par Maven : http://xmlfield.sourceforge.net/
- issue tracking, Mantis : http://sourceforge.net/apps/mantisbt/xmlfield/
- Repository Maven : http://xmlfield.sourceforge.net/maven/repository/
- 21 décembre 2011 — XmlField : new validation API
- 28 novembre 2011 — Introducing XmlField : Java xml/object mapping framework
J’ai ouvert le projet avc-binding-dom pour des besoins spécifiques, en réécrivant tout à la base, et en me concentrant sur mes besoins immédiats. Les méthodes setXxx() ne sont ainsi quasiment pas gérées dans avc-binding-dom.