Powered by | ProjectX de SunLe parser XML de Sun (nom de code "ProjectX") présente un défaut de localisation. Cet article se propose d'y remédier. Un bug de localisationLe parser XML de Sun est réputé pour son respect des normes et la clarté de ses messages d'erreur (voir le test de Developer Life. Il est donc tout indiqué pour programmer un validateur de fichiers XML. Le code suivant est un exemple d'un tel validateur (simple pour la démonstration) :
Ce programme est très simple et je n'expliquerai pas son fonctionnement dans cet article (la programmation d'applications SAX pourrait bien faire prochainement l'objet d'un article). Pour lancer le programme, il faut bien sûr inclure l'archive xml.jar du parser du ProjectX dans le CLASSPATH. Pour lancer ce programme, on pourra utiliser (sous UNIX) le script suivant :
Essayons maintenant notre validateur sur un simple fichier d'exemple, comme celui-ci :
On obtient alors le message d'erreur suivant :
Le moins que l'on puisse dire, c'est que ce n'est pas clair ! Le problème vient du fait que la locale française n'existe pas pour les messages d'erreur. On pourrait cependant s'attendre à ce que le parser passe à la locale anglaise, mais ce n'est pas le cas... Première solution : changer la localeLa première solution consiste à demander au parser de changer de locale pour la locale en_US, avec la ligne suivante :
Le code de notre validateur de fichiers devient alors :
Si l'on parse notre document, on obtient maintenant le message suivant :
Ce qui est tout de même mieux ! Deuxième solution : correction des sourcesUne deuxième solution consiste tout simplement à corriger ce bug, de manière à ce que le parser adopte la locale en_US si la locale de la VM n'est pas supportée. Pour ce faire, il nous faut modifier la méthode init() du fichier com/sun/xml/parser/Parser des sources comme suit : Remplacer :
Par :
Ainsi, on vérifie si la locale par défaut de la VM est supportée et on passe à la locale en_US si ce n'est pas le cas. Pour recompiler les sources, on pourra utiliser le makefile suivant (à placer dans le répertoire des sources) :
On notera que cette recompilation est la bienvenue car le fichier jar fourni par Sun a été compilé avec l'option de débuggage activée (option -g de la ligne de commande). La recompilation des sources permet ainsi de gagner en vitesse d'exécution (le gain est cependant minime) et en place. Troisième solution : traduction des messagesLa troisième solution est certainement la meilleure : la traduction des messages d'erreur. Pour ce faire, il faut fournir au parser des fichiers Messages_fr.properties à placer dans les répertoires com.sun.xml.parser.resources (pour les messages du parser SAX) et com/sun/xml/tree/resources/Messages_fr.properties (pour les messages du parser DOM) des sources. Il faut ensuite recompiler le tout (avec le makefile ci-dessus). Les messages d'erreur sont alors affichés en français. J'ai traduit les messages d'erreur pour les parsers SAX et DOM. Suivre ce lien pour les télécharger. Cette archive contient également les fichiers d'exemple de cet article. Dernière mise à jour : 2000-02-12 |