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:
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)
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?