java xml et parser sax

java xml et parser sax - Java - Programmation

Marsh Posté le 09-10-2004 à 16:51:01    

bonjour a tous
 
j'utilise le parser SAX en java pour recuperer des donnees provenant d'un fichier xml, et mon probleme est le suivant:
 
j'ai un plantage au moment de stocker les donnees dans un tableau de la methode si bien connu des habitue de java et sax:
 
public void characters (char buf [], int offset, int len){}  
 
 
voici mon code:
 
 public void startDocument () throws SAXException {
        System.out.println("START DOCUMENT" );
        System.out.println("<?xml version='1.0' encoding='UTF-8'?>" );
    }
 
    public void endDocument () throws SAXException {
        System.out.println("END DOCUMENT" );
         
                 
        for(int var=0; var < tableauPeres.size(); var++){
         
         //debut nouveau rajout
         JPanel lpanel = new JPanel(new GridLayout(1,1));
       
      JLabel label = new JLabel("texte", SwingConstants.LEADING);
      //JLabel label = new JLabel(listeFils[var], SwingConstants.LEADING);
       
      label.setTransferHandler(new TransferHandler("text" ));
       
       
      //MouseListener listener = new DragMouseAdapter();
         //label.addMouseListener(listener);
 
         
         
         //affichage du titre
      //System.out.println("nom"+nomTag);
         TitledBorder t1 = BorderFactory.createTitledBorder((String) tableauPeres.get(var));
         
         lpanel.add(label);
         lpanel.setBorder(t1);
         application.add(lpanel);
         //fin nouveau rajout
         
        var++;
        }
         
        if (indentLevel > 0) System.out.println("AIEEEE" );
       
    }
 
    public void startElement (String name, AttributeList attrs)
  throws SAXException  {
        tabs();
         
   
        System.out.println("start element enclenche" );
        try{
      if(name == "Name" ){
       i = 0;
   }
      else if(name == "ServiceRef" ){
       i = 1;
      }
        }
        catch(Exception e){
         System.err.println(e);
        }
         
        System.out.print("<" + name);
        if (attrs != null) {
            for (int i = 0; i < attrs.getLength (); i++) {
                        System.out.println();
                        tabs();
                System.out.print("    " );
                System.out.print(attrs.getName (i));
                System.out.print(" = \"" );
                System.out.print(attrs.getValue (i));
                System.out.print("\"" );
            }
        }
 
        if (attrs.getLength() > 0) { System.out.println("" ); tabs(); }
        System.out.println(">" );
        indentLevel++;
    }
 
    public void endElement (String name) throws SAXException {
        indentLevel--;
        tabs();
        System.out.println("</" + name + ">" );
    }
 
    public void characters (char buf [], int offset, int len)
                                                      throws SAXException {
        String s = new String(buf, offset, len);
 
     
     if (!s.trim().equals("" )) {
      System.out.println("characters enclenche ->semaphore: " + i);
       
      if(i == 0){
       tableauPeres.add(s);
      }
      else
       tableauFils.add(s);
             
            tabs();
             
             
            System.out.println(s);
        }
    }
 
 
 
 
voila en gros ce qui se deroule dans mon programme:
1- parcours du fichier xml par le parser SAX
2- a chaque tag appel de la methode public void startElement() ->  
 
si le tag s'appelle "Name" (name == "Name" ), je met la valeur d'une variable i=0
sinon (si name == "ServiceRef" ) je met la valeur de la variable i=1
 
 
3- si le tag n'est pas vide (donc s'enclenche a chaque fois que je tombe sur un tag "Name" ou "ServiceRef" dans mon cas)
 
alors je stocke la donnee dans une collection en fonction du type de donnee dans la collection approprie:
 
if (!s.trim().equals("" )) {
      System.out.println("characters enclenche ->semaphore: " + i);
     
      if(i == 0){
       tableauPeres.add(s);
      }
      else
       tableauFils.add(s);
         

            tabs();
             
             
            System.out.println(s);
        }
 
 
 
voila ca devrais fonctionner, seulement voila au moment de l'affectation des valeurs dans le tableau voila ce que j'ai en output:
 
 
START DOCUMENT
<?xml version='1.0' encoding='UTF-8'?>

java.lang.NullPointerException
 at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:658)
 at org.apache.crimson.parser.Parser2.parse(Parser2.java:333)
 at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
 at org.xml.sax.helpers.XMLReaderAdapter.parse(XMLReaderAdapter.java:223)
 at javax.xml.parsers.SAXParser.parse(SAXParser.java:314)

start element enclenche
<Services
    xmlns = "http://www.hp.com/OV/opcsvc"
>
        start element enclenche
<Service>
                start element enclenche
<Label>
                </Label>
                start element enclenche
<Icon>
                </Icon>
                start element enclenche
<Name>
characters enclenche ->semaphore: 0
                        saga
                </Name>
                start element enclenche
<Source>
                        start element enclenche
<Composition>
                        </Composition>
                        start element enclenche
<ServiceRef>
characters enclenche ->semaphore: 1

 at javax.xml.parsers.SAXParser.parse(SAXParser.java:253)
 at SimpleSaxXml.<init>(SimpleSaxXml.java:44)
 at LabelDnD.<init>(LabelDnD.java:102)
 at LabelDnD.createAndShowGUI(LabelDnD.java:156)
 at LabelDnD.access$0(LabelDnD.java:147)
 at LabelDnD$1.run(LabelDnD.java:233)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:454)
 at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

 
 
quelqu'un sait d'ou l'erreur pourrait provenir?

Reply

Marsh Posté le 09-10-2004 à 16:51:01   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed