ha ... bon ben dans ca cas la, a part ma solution bidouille, j'ai rien à proposer ...
darklord22
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 .... :(
benou
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.
benou
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 :)
darklord22
benou a écrit a écrit :
pourquoi tu relances pas simplement le parsing en désactivant la validation ?
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!
benou
pourquoi tu relances pas simplement le parsing en désactivant la validation ?
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...)
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: