Validation XML avec un document XSD en utilisant une URL
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:
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:
getClass().getRessource("/monFichierXSD.xsd");
mais depuis, je n'arrive pas à valider mon document.
Code:
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.