Bonjour,

mon application doit valider un document XML avec un document XML Schema (XSD) en utilisant un parseur SAX.

Voici la méthode de validation de mon document XML :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
	public static boolean validXMLWithSAX(String xmlFile, String xsdFile) {
		isValid = true;
		try {
			SAXParserFactory spf = SAXParserFactory.newInstance();
			spf.setNamespaceAware(true);
			spf.setValidating(true);
			SAXParser sp = spf.newSAXParser();
			sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
			sp.setProperty(JAXP_SCHEMA_SOURCE, xsdFile);
 
 
			sp.parse(xmlFile, new DefaultHandler(){
				public void fatalError(SAXParseException e) {
					logger.error("Erreur de validation XSD : " + e.getMessage());
					isValid = false;
				}
 
				public void error(SAXParseException e) {
					logger.error("Erreur de validation XSD : " + e.getMessage());
					isValid = false;
				}
 
				public void warning(SAXParseException e) {
					logger.error("Erreur de validation XSD : " + e.getMessage());
					isValid = false;
				}
			});
		} catch (SAXException se) {
			logger.error("Impossible de valider le document XML avec le fichier XSD car : « " + se.getMessage() + " ».");
			return false;
		} catch (ParserConfigurationException pce){
			logger.error("Impossible de valider le document XML avec le fichier XSD car : « " + pce.getMessage() + " ».");
			return false;
		} catch (IOException ioe){
			logger.error("Impossible de valider le document XML avec le fichier XSD car : « " + ioe.getMessage() + " ».");
			return false;
		}
		return isValid;
	}
Lors du packaging de mon application, le document XSD se trouvant dans le jar, le système n'arrive pas à localiser le fichier.


J'ai donc essayé de transformer la méthode en lui donnant en parametre l'URL de mon fichier XSD que je récupère en faisant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
getClass().getRessource("/monFichierXSD.xsd");
mais depuis, je n'arrive pas à valider mon document.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
 
public static boolean validXMLWithSAX(String xmlFile, URL urlXSD) {
	isValid = true;
 
		//SchemaFactory schemaFactory = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
		//SchemaFactory schemaFactory = SchemaFactory.newInstance( W3C_XML_SCHEMA );
		//Schema schema = null;
 
		try {
			//schema = schemaFactory.newSchema( urlXSD );
 
			SAXParserFactory spf = SAXParserFactory.newInstance();
			//spf.setSchema(schema);
			spf.setNamespaceAware(true);
			spf.setValidating(true);
 
			SAXParser sp = spf.newSAXParser();
			sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
			// sp.setProperty(JAXP_SCHEMA_SOURCE, xsdFile);
			sp.setProperty(JAXP_SCHEMA_SOURCE, urlXSD.getFile());
			//sp.setProperty(JAXP_SCHEMA_SOURCE, schema);
 
			sp.parse(xmlFile, new DefaultHandler(){
				public void fatalError(SAXParseException e) {
					logger.error("Erreur de validation XSD : " + e.getMessage());
					isValid = false;
				}
 
				public void error(SAXParseException e) {
					logger.error("Erreur de validation XSD : " + e.getMessage());
					isValid = false;
				}
 
				public void warning(SAXParseException e) {
					logger.error("Erreur de validation XSD : " + e.getMessage());
					isValid = false;
				}
			});
		} catch (SAXException se) {
			logger.error("Impossible de valider le document XML avec le fichier XSD car : « " + se.getMessage() + " ».");
			return false;
		} catch (ParserConfigurationException pce){
			logger.error("Impossible de valider le document XML avec le fichier XSD car : « " + pce.getMessage() + " ».");
			return false;
		} catch (IOException ioe){
			logger.error("Impossible de valider le document XML avec le fichier XSD car : « " + ioe.getMessage() + " ».");
			return false;
		}
 
		return isValid;
	}
J'ai bien essayé d'utiliser les objets SchemaFactory et Schema mais sans succès. Il ne me reconnait plus un document XML valide comme tel.

Avez-vous une idée et une proposition à me faire pour pouvoir utiliser mon objet URL ?

Merci beaucoup,
F.