IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

problème avec le parseur SAX


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut problème avec le parseur SAX
    Bonjour,

    j'ai un petit souci avec le parseur SAX. Je développe une appli WebService dans laquelle j'ai besoin de parser un fichier XML. Quand je teste mon appli en local, tout marche très bien. Seulement quand je l'installe sur une autre machine, l'appli se bloque sur le parsing XML sans que je sache pourquoi.

    Est-ce que quelqu'un a une idée de ce qui pourrait bloquer le parsing en SAX d'un fichier XML ?

    Le code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SAXParserFactory fabrique = SAXParserFactory.newInstance();
    fabrique.setNamespaceAware(true);
    // création d'un parseur SAX
    SAXParser parseur = fabrique.newSAXParser();
     
    //récupération du HttpServlet pour pouvoir lire le fichier validation.xml
    MessageContext ctx = MessageContext.getCurrentContext();
    HttpServlet serv = (HttpServlet)ctx.getProperty("transport.http.servlet");
     
    // lecture du fichier XML avec un DefaultHandler
    InputStream is = serv.getServletContext().getResourceAsStream(VALIDATION_FILE);
     
    ValidationHandler gestionnaire = new ValidationHandler();
    parseur.parse(is, gestionnaire);
    La classe ValidationHandler hérite de DefaultHandler et redéfinit startElement et endElement.

    A l'exécution sur l'autre machine, l'appli ne rentre même pas une fois dans le startElement.

    Je ne sais pas si ca peut venir de certains jar que j'aurais pu oublier et qui sont par défaut sur ma machine. Mais je n'ai pas de plantage ou de ClassNotFoundException qui me revient.

    Les classes SAXParser et SAXParserFactory viennent du package javax.xml.parsers.

    Merci d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut comment ne pas parser <!DOCTYPE ?
    Après quelques séries de test, j'ai trouvé la ligne qui bloquait le parser. C'est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <!DOCTYPE form-validation PUBLIC
              "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
              "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
    Il doit essayer d'aller se connecter à l'adresse de la dtd et il n'y arrive pas.

    Est-ce que quelqu'un sait comment empêcher SAX de parser cette ligne ?

    Merci d'avance

  3. #3
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonjour

    Je pense que cette méthode devrait t'intéresser.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut
    par défaut le setValidating est à false. Il ne valide donc pas mon xml, mais il essaye quand meme de lire la DTD.

    J'ai vu qu'il y avait le setFeature qui pouvait être intéressant mais je ne sais pas quel est le nom de la propriété à mettre à false pour empêcher la lecture de la DTD.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut
    En fait mon problème était que ma DTD est sur un site internet et que ma machine n'a pas le droit de sortir du réseau.

    J'ai donc fait une copie en local de cette DTD et surcharger la méthode resolveEntity pour lui dire d'aller lire ma DTD en local.

    Voilà pour la solution à mon problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec le parseur JDOM
    Par sampaiX dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 28/06/2010, 16h01
  2. [XML] Problème avec le parser SAX
    Par carmensam dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 28/08/2009, 16h50
  3. [SAX] Problème de Parseur SAX
    Par Link81 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 27/02/2009, 11h18
  4. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55
  5. [XML] [EXPAT] Problème avec Parseur XML
    Par tubeless dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/02/2006, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo