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 :

Erreur de création de fichier XML [SAX]


Sujet :

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

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Points : 59
    Points
    59
    Par défaut Erreur de création de fichier XML
    Bonjour,

    Je me suis inspiré de la Faq Java sur ce site pour essayer de créer un fichier XML avec SAX.

    Voici le code (partie essentielle) de mon reader
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    public void parse(InputSource source) throws IOException, SAXException {
            // TODO Auto-generated method stub
            if(!(source instanceof SeriesSource))
                throw new SAXException("la source doit être un Objet \"SerieSource\"");
            if(contentHandler == null)
                throw new SAXException("le gestionnaire de contenu ne doit pas être null");
            SeriesSource serie = (SeriesSource) source;
            ArrayList<Series> lserie = serie.getSeries();
            contentHandler.startDocument();
            contentHandler.startElement("", "vnr", "vnr", atts);
     
            for(Series ser:lserie){
                ArrayList<Scenario> lsc = ser.getSerie();
                atts.addAttribute("", "nomserie", "nomserie", "", ser.getNomDeSerie());
                atts.addAttribute("", "option", "option", "", ser.getEnvOption());
                contentHandler.startElement("", "serie", "serie", atts);
                atts.clear();
     
                for(Scenario sc: lsc){
                    /*if(sc.getTimeOption())
                        atts.addAttribute("", "time", "time", "", "ok");*/
                    contentHandler.startElement("", "scenario", "scenario", atts); //debut du scenario
                    atts.clear();
                    contentHandler.startElement("", "nom", "nom", atts); //debut de la balise nom
                    char[] ch = sc.getNom().toCharArray();
                    contentHandler.characters(ch, 0, ch.length);
                    contentHandler.endElement("", "nom","nom"); // fin de la balise nom
     
                    contentHandler.startElement("", "param", "param", atts);
                     ch = sc.getParam().toCharArray();
                    contentHandler.characters(ch, 0, ch.length);
                    contentHandler.endElement("", "param", "param");
     
                    contentHandler.endElement("", "scenario", "scenario"); // fin du scenario
                }
                contentHandler.endElement("", "serie", "serie");
            }
            contentHandler.endElement("", "vnr", "vnr");
            contentHandler.endDocument();
        }
        public void setContentHandler(ContentHandler cthdl) {
            // TODO Auto-generated method stub
            this.contentHandler = cthdl;
        }
    public ContentHandler getContentHandler() {
            // TODO Auto-generated method stub
            return contentHandler;
        }
    Voici la classe qui permet d'écrire
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public class VnrWriter{
        Transformer tr;
        VnrWriterHandler writerHandler;
        public VnrWriter(){
            TransformerFactory fabrique = TransformerFactory.newInstance();
            try {
                tr = fabrique.newTransformer();
            } catch (TransformerConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     
            tr.setOutputProperty(OutputKeys.INDENT, "yes");
            tr.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
            writerHandler = new VnrWriterHandler();
        }
     
        public void xlmWriter(SeriesSource serieSource,File dest){
            Source source = new SAXSource(writerHandler, serieSource);
            try {
                tr.transform(source, new StreamResult(dest));
            } catch (TransformerException e) {
                // TODO Auto-generated catch block
                System.out.println(e.getLocator());
                e.printStackTrace();
            }
        }
    }
    enfin je l'utilise comme ci
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public class TestWriter {
        private VnrReader lecteurXML;
        private ArrayList<Series> listeEntree;
        private File fichier_ko;
        private VnrWriter ecrivain;
     
        public TestWriter(){
            try {
                lecteurXML = new VnrReader(new FileInputStream("vnrfile.xml"));
                fichier_ko = new File("fich_ko");
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            listeEntree = lecteurXML.getVnr();
            DateFormat sdt = new SimpleDateFormat("hh:mm");
            //DateFormat date = DateFormat.getDateInstance();
            System.out.println(listeEntree);
            ecrivain = new VnrWriter();
        }
        public void go(){
            ecrivain.xlmWriter(new SeriesSource(listeEntree), fichier_ko);
        }
     
        public static void main(String[] args){
            TestWriter tw = new TestWriter();
            tw.go();
        }
    }
    mais à chaque fois que j'exécute, j'ai une exception:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    ERREUR :  ''
    null
    javax.xml.transform.TransformerException: java.lang.NullPointerException
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
        at traitement.VnrWriter.xlmWriter(VnrWriter.java:37)
        at traitement.TestWriter.go(TestWriter.java:36)
        at traitement.TestWriter.main(TestWriter.java:41)
    Caused by: java.lang.NullPointerException
        at com.sun.org.apache.xml.internal.serializer.ToStream.writeAttrString(Unknown Source)
        at com.sun.org.apache.xml.internal.serializer.ToStream.processAttributes(Unknown Source)
        at com.sun.org.apache.xml.internal.serializer.ToStream.closeStartTag(Unknown Source)
        at com.sun.org.apache.xml.internal.serializer.ToStream.startElement(Unknown Source)
        at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.startElement(Unknown Source)
        at traitement.VnrWriterHandler.parse(VnrWriterHandler.java:89)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown Source)
        ... 5 more
    ---------
    java.lang.NullPointerException
        at com.sun.org.apache.xml.internal.serializer.ToStream.writeAttrString(Unknown Source)
        at com.sun.org.apache.xml.internal.serializer.ToStream.processAttributes(Unknown Source)
        at com.sun.org.apache.xml.internal.serializer.ToStream.closeStartTag(Unknown Source)
        at com.sun.org.apache.xml.internal.serializer.ToStream.startElement(Unknown Source)
        at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.startElement(Unknown Source)
        at traitement.VnrWriterHandler.parse(VnrWriterHandler.java:89)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown Source)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
        at traitement.VnrWriter.xlmWriter(VnrWriter.java:37)
        at traitement.TestWriter.go(TestWriter.java:36)
        at traitement.TestWriter.main(TestWriter.java:41)
    Quelqu'un saurait-il me dire ce qui ne va pas dans mon code ?

    Merci d'avance pour vos suggestions

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Sans m'avancer trop, vu l'endroit de l'arrêt, je parie que dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            contentHandler.startElement("", "vnr", "vnr", atts);
    atts est null.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Points : 59
    Points
    59
    Par défaut
    Bonjour,
    Il y avait des balises qui n'avait d'attribut qu coup j’attrapais une exception puisque je ne les gérais pas. C'est maintenant résolu, il faut juste gérer les cas des balises sans attribut.

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

Discussions similaires

  1. Erreur de création de fichiers XML
    Par Georges P dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/02/2008, 18h45
  2. Erreur pendant création du fichier xml
    Par borgfabr dans le forum SQL
    Réponses: 1
    Dernier message: 17/11/2007, 09h08
  3. [DOM] Erreur d'ouverture de fichier XML
    Par Arnard dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 03/05/2006, 10h38
  4. [XSLT] Création de fichier XML dynamique avec PHP
    Par daninho dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 02/02/2006, 11h18

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