SAX & parseur

Résolu
verrec_s Messages postés 1 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 23 juin 2005 - 23 juin 2005 à 14:15
Akbarr Messages postés 15 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 23 juin 2005 - 23 juin 2005 à 17:32
Bonjour,



je suis actuellement en train de debugger un programme développé par des collègues et je me trouve devant le pb suivant.

On recupere en entré un fichier XML que l'on parse. Au moment de l'appel du parseur on gere les exception du type SAXexception :



SAXParser saxParser = factory.newSAXParser();

saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);


saxParser.setProperty(JAXP_SCHEMA_SOURCE, new File(strLocalXsd));

saxParser.parse(new File(strLocalXml), handler );

}

catch (SAXException e)

{ ...}



Mon problème est le suivant : en gerant les exceptions de type
SAXException, il m'est impossible d'avoir le numéro de ligne et de
colonne de l'endroit d'ou vient le probleme et je n'ai qu'un message
d'erreur incompréhensible en retour ce qui n'est vraiment pas top pour
les utilisateurs.

J'aimerai gerer les exceptions de type SAXParseException (qui possedent
des methodes pour avoir la ligne et la colonne), mais si je tente de la
catcher c impossible, il ne va jamais dans le bloc d'instruction...



comment faire pour obtenir un msg d'erreur precis (meme si c sans gérer
les exceptions SaxParseException)? ou comment gerer les exceptions de
type SAXParseException si c le seul moyen?

merci d'avance



STeF

1 réponse

Akbarr Messages postés 15 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 23 juin 2005 1
23 juin 2005 à 17:32
En fait la gestion des erreurs se fait dans le handler qui est utilisé lors du parsing.

Ce handler peut être par défaut de type org.xml.sax.helpers.DefaultHandler. Mais tu peux très bien dériver une classe et surcharger les méthodes:

public void warning(SAXParseException e)
throws SAXException

public void error(SAXParseException e)
throws SAXException

public void fatalError(SAXParseException e)
throws SAXException

A noter que si tu utilises un parser xerces il existe une propriété qui permet d'obtenir le node sur lequel on est.

pour cela il faut dans un premier temps lui dire de faire l'expansion du node durant le parsing:

parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false);

Le noeud courrant est alors accessible via:
Node node = (Node) parser.getProperty(
"http://apache.org/xml/properties/dom/current-element-node");

Méthode que tu peux par exemple appeler dans les méthodes warning, error et fatalError.
3
Rejoignez-nous