OVH Cloud OVH Cloud

Xerces external-location et jar

2 réponses
Avatar
François-Xavier GENDRIN
Bonjour,

Je suis en train de développer une application qui manipule du XML. Nous
nous assurons de la cohérence du xml grâce à un xsd. Au final cette
application sera dans un jar et le fichier xsd aussi. La seule
information que l'on dispose est le chemin relatif vers le xsd. Mais
xerces pour l'external location (namespace + file) demande ne prends pas
le chemin relatif (à moins que l'on me dise comment) mais les chemins
abolus.

J'ai essayé différentes façons d'opérer afin d'avoir ce chemin absolu et
j'obtiens finalement quelque chose que de nombreux forums conseils
d'utiliser :

jar:file:/P:/cheminversjar/nomdujar.jar!/cheminrelatif/nomduxsd.xsd

Mais xerces fait la sourde oreille et continue à me dire que le xml est
incorrect.

Note : j'ai déjà testé mon xsd en dehors du jar ça marche, donc le xsd
est hors d'état. De même pour mon code.

Merci d'avance.

2 réponses

Avatar
cilovie
le plus simple est surement de ne pas déclarer le xsd dans le xml via
schemaLocation.
Mais de valider ton xml par un schema placé dans ton jar et de le
récuperer via un getResourceAsStream.

Regarde le package javax.xml.validation c'est du jaxp 1.3 et xerces à
partir de 2.7.1 l'implémente.

SchemaFactory te permet de construire un Schema (c thread safe donc pas
besoin de reparser à chaque fois).
Apres un objet Validator est voili.


Sinon voir aussi ici
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPSAX9.html#wp90294

--
O

Bonjour,

Je suis en train de développer une application qui manipule du XML. Nous
nous assurons de la cohérence du xml grâce à un xsd. Au final cette
application sera dans un jar et le fichier xsd aussi. La seule
information que l'on dispose est le chemin relatif vers le xsd. Mais
xerces pour l'external location (namespace + file) demande ne prends pas
le chemin relatif (à moins que l'on me dise comment) mais les chemins
abolus.

J'ai essayé différentes façons d'opérer afin d'avoir ce chemin absolu et
j'obtiens finalement quelque chose que de nombreux forums conseils
d'utiliser :

jar:file:/P:/cheminversjar/nomdujar.jar!/cheminrelatif/nomduxsd.xsd

Mais xerces fait la sourde oreille et continue à me dire que le xml est
incorrect.

Note : j'ai déjà testé mon xsd en dehors du jar ça marche, donc le xsd
est hors d'état. De même pour mon code.

Merci d'avance.


Avatar
François-Xavier GENDRIN
le plus simple est surement de ne pas déclarer le xsd dans le xml via
schemaLocation.
Mais de valider ton xml par un schema placé dans ton jar et de le
récuperer via un getResourceAsStream.

Regarde le package javax.xml.validation c'est du jaxp 1.3 et xerces à
partir de 2.7.1 l'implémente.

SchemaFactory te permet de construire un Schema (c thread safe donc
pas besoin de reparser à chaque fois).
Apres un objet Validator est voili.


Sinon voir aussi ici
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPSAX9.html#wp90294

Merci


j'ai finalement utilisé ceci :
URL url = getClass().getClassLoader().getResource(xsdFile);
String schemaUrl = url.toExternalForm();
parser_ = new SAXParser();
parser_.setProperty(XmlConstant.EXTERNAL_SCHEMA_LOCATION, nameSpace
+ " " + schemaUrl);