Merci bien pour vos r�ponses... <R�ponse � Nicolas> Effectivement ma DTD est locale, interne � ma webapp ...
<R�ponse � Fr�d�ric>
J'ai essay� ce que Tu m'as conseill�.
(mais il n'est pas du tout impossible que je m'y prennes mal)
Tu peux voir la fa�on dont je m'y suis pris dans le source de [GadgetLoader.java]
D'abord, voici la structure des ressources dans ma webapp :
[webapp]
\dtd\
- gadgets.dtd
\WEB-INF\
\classes\
- GadgetLoader.class
\xml\
- gadgets.xml
Au niveau de la m�thode .resolveEntity() de mon EntityResolver, j'utilise le Public ID
(et non le System ID).
j'ai essay� 3 trucs :
1) return new
InputSource(this.getClass().getClassLoader().getResourceAsStream("dtd/gadgets.dtd"));
2) return(new InputSource("/dtd/gadgets.dtd"));
3) return(new InputSource("dtd/gadgets.dtd"));
4) return(new InputSource("gadgets.dtd"));
... avec gadgets.dtd dans le m�me r�pertoire que gadgets.xml
... avec "gadgets.dtd" dans le System ID du DOCTYPE
R�sultats : � chaque fois, une irr�ductible insulte
"org.jdom.input.JDOMParseException: Error on line 0: File.."
1) ... "file:///dtd/gadgets.dtd" not found
2) ... (idem ci-dessus)
3) ... "file:///C:/bea/wlserver6.1/config/domainU1/dtd/gadgets.dtd" not found.
4) ... "file:///C:/bea/wlserver6.1/config/domainU1/gadgets.dtd" not found.
L� encore, il semble que l'objet InputSource responsable de "r�soudre" la DTD
interpr�te le lien en absolu, et non pas en relatif.
( Rque : j'ai bien v�rifi� que je passais dans la m�thode .resolveEntity(), en loguant
avec LOG4J )
Ci-joint les sources :
- [GadgetLoader.java] : la classe utilitaire java qui charge mes objets "gadgets" �
partir du fichier XML
- [gadgets.xml] : le fichier des "gadgets"
- [gadgets.dtd] : la dtd � r�soudre (celle qui se cache dans le labyrinthe des
ClassLoaders !!)
Je cherche du cot� de la m�thode setDocType() ....
"je suis tr�s d�sappoint� !" (Zorg, dans le "5i�me El�ment").
Merci d'avance.
<?xml version="1.0" ?> <!DOCTYPE gadgets PUBLIC "systemeu.dtd.gadgets" "/gadgets.dtd"> <gadgets> <gadget> <order>1</order> <libelle>Jeu de 32 cartes � jouer U</libelle> <condit>15</condit> <htunitprice>0.82</htunitprice> <image>jeu_cartes_01.jpg</image> </gadget> <gadget> <order>2</order> <libelle>Casquette Base-Ball U</libelle> <color>bleu</color> <condit>10</condit> <htunitprice>1.16</htunitprice> <image>casquette_01.jpg</image> </gadget> <gadget> <order>6</order> <libelle>Sac � dos U</libelle> <condit>5</condit> <htunitprice>4.52</htunitprice> <image>sac_dos_01.jpg</image> <decline size="ALL"> <enseigne type="HU"/> <enseigne type="SU"/> <enseigne type="MU"/> </decline> </gadget> <gadget> <order>8</order> <libelle>Tee-shirt U Taille L et XL</libelle> <color>blanc</color> <condit>1</condit> <htunitprice>2.26</htunitprice> <image>tee_shirt.jpg</image> <decline size="XL"> <enseigne type="HU"/> <enseigne type="SU"/> </decline> <decline size="L"> <enseigne type="U"/> <enseigne type="HU"/> <enseigne type="SU"/> <enseigne type="MU"/> </decline> </gadget> </gadgets>
<?xml version="1.0" encoding="ISO-8859-1" ?> <!ELEMENT gadgets (gadget)* > <!ELEMENT gadget (order,libelle,color?,condit,htunitprice,ttcunitprice,image,decline*)> <!ELEMENT order (#PCDATA)> <!ELEMENT libelle (#PCDATA)> <!ELEMENT color (#PCDATA)> <!ELEMENT condit (#PCDATA)> <!ELEMENT htunitprice (#PCDATA)> <!ELEMENT image (#PCDATA)> <!ELEMENT decline (enseigne)+> <!ELEMENT enseigne EMPTY> <!ATTLIST decline size (ALL|XS|S|M|L|XL|XXL) #REQUIRED> <!ATTLIST enseigne type (U|HU|SU|MU) #REQUIRED>
GadgetLoader.java
Description: Binary data
