Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1483 connectés 

  FORUM HardWare.fr
  Programmation

  [XML / Java] DTD pas trouve = pas possible de parser?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[XML / Java] DTD pas trouve = pas possible de parser?

n°85787
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 03-01-2002 à 16:34:50  profilanswer
 

Salut,
 
Mon problème est assez simple. J'ai un document XML que je dois valider  
 

Code :
  1. <?xml version="1.0" ?>
  2. <!DOCTYPE webconf-config PUBLIC
  3. "-//Infonet group - FUDNDP//DTD Webconf 2.5.X Configuration file//EN"
  4. "http://www.infonet.fundp.ac.be/soft/webconf/webconf-config-2.5.X.dtd">
  5. <webconf-config>


 
Bon supposons que notre site est down (ca peut arriver). Il se passe alors que j'ai une jolie exception que je peux catcher mais impossible de parser ...
 

SUN a écrit :

 
So now you know that a DTD is a requirement for a valid document. That makes sense. (Note, though, that the lack of a type declaration only generates a warning, as specified in the standard. On the other hand, any attempt to actually parse the document is immediately greeted with an error! Oh well...)




 
http://java.sun.com/xml/jaxp/dist/ [...] 6_val.html
 
Ma question : que faire si le DTD est introuvable? Il doit bien avoir moyen de lancer l'appli non? Au pire on le parse sans le valider mais la déclaration du DTD au début du fichier XML l'empêche ...  :gun:


---------------
What is popular is not always right, what is right is not always popular :D
mood
Publicité
Posté le 03-01-2002 à 16:34:50  profilanswer
 

n°85857
benou
Posté le 03-01-2002 à 18:00:29  profilanswer
 

pourquoi tu relances pas simplement le parsing en désactivant la validation ?
 
SAXParserFactory factory = SAXParserFactory.newInstance();
factoryWithValidation.setValidating(true);
 
SAXParser saxParserWithValidation = factory.newSAXParser();
factoryWithValidation.setValidating(false);
SAXParser saxParserWithoutValidation = factory.newSAXParser();
 
...
try {
   saxParserWithValidation.parse(ton fichier);
} catch (TonException e) {
   saxParserWithoutValidation.parse(ton fichier);
}
...

n°85958
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 04-01-2002 à 08:31:12  profilanswer
 

benou a écrit a écrit :

pourquoi tu relances pas simplement le parsing en désactivant la validation ?
 
SAXParserFactory factory = SAXParserFactory.newInstance();
factoryWithValidation.setValidating(true);
 
SAXParser saxParserWithValidation = factory.newSAXParser();
factoryWithValidation.setValidating(false);
SAXParser saxParserWithoutValidation = factory.newSAXParser();
 
...
try {
   saxParserWithValidation.parse(ton fichier);
} catch (TonException e) {
   saxParserWithoutValidation.parse(ton fichier);
}
...  




 
Bin tu as lu la citation de chez SUN ?
 

SUN a écrit :

 
So now you know that a DTD is a requirement for a valid document. That makes sense. (Note, though, that the lack of a type declaration only generates a warning, as specified in the standard. On the other hand, any attempt to actually parse the document is immediately greeted with an error! Oh well...)  




 
Cela veut dire que si tu déclares un DTD dans ton fichier XML et qu'il ne peut etre trouvé, l'appli génère un warning mais si tu essaies de le parser tu obtiens une erreur et bye. Mais tu vois, meme si tu désactives la validation, c'est ca qui est dingue !
 
j'ai fait setvalidating(false);
rien à faire, le simple fait d'avoir un external type definition dans mon doc xml m'oblige à avoir la ressource ready. Ce qui est logique, il me semble mais bon de là à refuser un parsing sans validation (il faut pas oublier que tu peux déclarer certaines choses dans le DTD vitale pour le parsing du document).
 
Bref je suis bloqué mais bon tant pis!


---------------
What is popular is not always right, what is right is not always popular :D
n°86224
benou
Posté le 04-01-2002 à 21:11:04  profilanswer
 

ca me parrait bizarre ton histoire...
y a forcément moyen de le désactiver !
désolé, j'ai pas beaucoup d'expérience dans le parsing XML en java ...
 
sinon j'ai bien une solution à la con... mais bon c'est de la bidouille :
tu déclares un proxy http dans ton appli java (System.setProperty()) vers un proxy que tu codes toi même.
 
Pour le proxy tu fais ouvre une socket qui à chaque message entrant renvoie une DTD qui valide ton document quelque soit sa forme.
 
comme ca, quand ton parser voudra aller consulter la dtd distante, il passera par ton proxy qui lui renverra une dTD validante. et le tour est joué.
 
bon, je l'avais dit que c'était de la bidouille :)

n°86228
benou
Posté le 04-01-2002 à 21:18:27  profilanswer
 

et puis sur le site c'est pas ca qu'ils disent (que je comprend en tout cas). ils disent que si tu forces la validation (factory.setValidating(true)), et que le document ne référence pas une DTD, la ca fait un warning puis une erreur.
 
toi c'est plutot l'inverse : tu utilises une parser non validant et ca va quand même chercher la dtd si y a un doctype.

n°86342
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 05-01-2002 à 11:12:36  profilanswer
 

Si tu déclares un entité exterene (ici le DTD), cela n'a aucune importance que le parser valide ou pas. Le parser n'est pas censé savoir qu'il ne s'agit que du DTD. Tu pourrais très bien déclaré des choses qui sont obligatoires pour parser le doc correctement ...
 
-> Si c'est déclaré, ca doit etre trouvé sinon warning puis erreur.
 
Malheureusement .... :(


---------------
What is popular is not always right, what is right is not always popular :D
n°86345
benou
Posté le 05-01-2002 à 11:30:55  profilanswer
 

ha ... bon ben dans ca cas la, a part ma solution bidouille, j'ai rien à proposer ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [XML / Java] DTD pas trouve = pas possible de parser?

 

Sujets relatifs
[SQL Server 7] est il possible de planifier ...[Java] executer un telnet (login) et executer une commande
[java] convertir un vecteur en un tableau a 2 dim[PHP] inclure un lien variable dans un switch ? possible je crois...
[Java] Fichier de config, comment ne pas en hardcoder le path ?[Java] Date Calendar ...
[java] Comment rendre une fenetre "always on top" ??[java] lancer l'execution d'un programme
[JAVA] Questions en vrac :)Ou telecharger Java Workshop?
Plus de sujets relatifs à : [XML / Java] DTD pas trouve = pas possible de parser?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR