[jaxp] affichage du fichier xml sans par courir noeud par noeud

cs_djodjoo Messages postés 11 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 15 juin 2004 - 26 mars 2004 à 11:59
cs_djodjoo Messages postés 11 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 15 juin 2004 - 29 mars 2004 à 10:01
Voilà une partie de mon code :

import java.io.*;
import javax.xml.parsers.*;

import org.apache.crimson.tree.XmlDocument;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
......

....

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder parser = factory.newDocumentBuilder();
parser.setErrorHandler(
new org.xml.sax.ErrorHandler() {
// ignore fatal errors (an exception is guaranteed)
public void fatalError(SAXParseException exception)
throws SAXException {
}

// treat validation errors as fatal
public void error (SAXParseException e)
throws SAXParseException
{
throw e;
}

// dump warnings too
public void warning (SAXParseException err)
throws SAXParseException
{
System.out.println ("** Warning"
+ ", line " + err.getLineNumber ()
+ ", uri " + err.getSystemId ());
System.out.println(" " + err.getMessage ());
}
}
);

Document doc = parser.parse(uri);


((org.apache.crimson.tree.XmlDocument)doc).write(new OutputStreamWriter(System.out));

voilà une partie de mon code et aufinal j'obitens une

java.lang.NullPointerException
at domdemo.performDemo(domdemo.java:58)
at domdemo.main(domdemo.java:163)
Exception in thread "main"

En raison de org.apache.crimson.tree.XmlDocument et je ne comprend pas vraiment ...

En regardant sur le forum de sun je ne comprend pas les réponses données quelqu'un peux m'expliquer cette erreur ??

merci

8 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
26 mars 2004 à 13:15
Salut,

tu essaies d'utiliser un objet non initialisé donc null. Regarde à la ligne indiquée si l'objet que tu utilises a été créé.
0
cs_djodjoo Messages postés 11 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 15 juin 2004
26 mars 2004 à 14:24
Désolé j'ai fait une erreur en recoppiant l'erreur qui était indiqué, voilà l'erreur que j'obtiens :

java.lang.ClassCastException
at domdemo.performDemo(domdemo.java:58)
at domdemo.main(domdemo.java:163)
Exception in thread "main"

Je comprend le sens de l'erreur mais je ne vois pas pourquoi il me la sort dans ce cas la
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
26 mars 2004 à 14:37
à priori tu essaies de convertir un objet en un autre mais tu t'es trompé dans le type de ton objet.
Fais un getClass().getName() pour savoir quel est le type réel de ton objet comme ça tu sauras si ton cast est correct ou dans ton debuggeur (si tu en as un) tu peux voir directement le type réel de ton objet.
0
cs_djodjoo Messages postés 11 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 15 juin 2004
26 mars 2004 à 14:58
Voilà ce qu'il me met quand je fait getClass().getName()

org.apache.xerces.dom.DeferredDocumentImpl

D'apres plusieurs tutoriel, cours, dont la doc de sun, on peut parser un Document en XmlDocument ...

Enfin bon je repars dans les recherche ...

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
26 mars 2004 à 15:17
Pourquoi utilises tu Crimson qui est je crois une vieille API maintenant remplacée par Xerces ?
Je pense que ton pb vient de là. A moins d'avoir absolument besoin de qqchose dans Crimson tu devrais utiliser Xerces. Tu utilises l'API fourni dans le JDK ?
De plus en regardant les sources la classe que tu utilises n'implémente pas l'interface Document.
0
cs_djodjoo Messages postés 11 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 15 juin 2004
26 mars 2004 à 16:14
au départ je voulais utiliser : import com.sun.xml.tree.XmlDocument;

Mais impossible de trouver ceci, en fouillant sur les forum de sun j'ai vu plusieurs personnes qui posaient cette même questions et les réponses qu'ils obtenaient étaient d'utiliser la classe de crison voilà pourquoi je l'utilise.

dans le jdk il n'y a pas cette classe ni dans xerces et je ne vois de traces nulle part de celle ci ...

Il n'y a pas à implémenter l'interface Document lorsqu'on l'utilise.

En fait la suite de mon programme analyse le fichier xml noeud par noeud et indique ce qu'il s'y trouve, celà fonctionne tres bien mais pas quand je veux afficher directement le flux xml a l'aide d'XmlDocument ...

J'ai un peu de mal à comprendre mais je vais voir si il existe d'autre classe XmlDocument ou du même type développe dans d'autres api ...

Mais apparement c'est un probleme récurant ...

Ah oui autre chose, j'ai testé, lorsque l'on créé le document directement au sein de la classe java, le programme l'affiche avec XmlDocument mais pas quand on utilise un parse ...

Merci pour ton aide
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
26 mars 2004 à 16:33
tu peux aussi utiliser l'API JDOM. Il y a une classe qui permet d'afficher le flux XML, on peut même le formater un peu.
0
cs_djodjoo Messages postés 11 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 15 juin 2004
29 mars 2004 à 10:01
Arg revoià enfin le net ... :) :)

oui oui j'y avais penser, mais la j'ai un autre probleme c'est que jdom va mal avec SOAP !!!!

En gros je veux, apres avoir générer mon xml et de l'avoir manipulé, je l'envoie à un serveur via SOAP et avec JDOM je ne peux utiliser le setDocument () de SOAPBody ...

Voilà pas simple :) :)

mais bon je vais me débrouiller autrement ...

Merci
0
Rejoignez-nous