[Java]Validation xml par un schema xsd

lewis -  
 Zora -
Bonjour,

Je developpe un programme java qui permet de creer un fichier xml. Cependant j'aimerais que ce fichier xml soit valide par rapport à schema xsd pour cela j'ai écris une classe mais qui malheuresement ne fonctionne pas. Je précise que le fichier xml contient des namespaces et qu'il ne contient pas de lien xsi. Voila je poste le code (trouver sur le net et légèrement modifié) pour savoir s'il y a une erreur :

public static boolean validXML(String xmlFile, String xsdFile) {
isValid = true;
System.out.println(xmlFile+" *** "+xsdFile);
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) {
System.out.println("Erreur de validation XSD - Erreur fatal");
isValid = false;
}
public void error(SAXParseException e) {
System.out.println("Erreur de validation XSD - Erreur");
isValid = false;
}
public void warning(SAXParseException e) {
System.out.println("Erreur de validation XSD - Warning");
isValid = false;
}
});
}catch (SAXException se) {
System.out.println(se);
return false;
}catch (ParserConfigurationException pce){
System.out.println(pce);
return false;
}catch (IOException ioe){
System.out.println(ioe);
return false;
}
return isValid;
}

PS : si vous connaissez une autre solution je suis preneur ;)

3 réponses

  1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Bonjour,

    Je sais que ça fait un bail mais ne sais on jamais ^^
    J'ai fais le même genre de chose que toi et voici brièvement mon code (qui fonctionne) :
    DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = null;
    
    dbfactory.setValidating(true);
    // --- Attribution du schéma de validation
    dbfactory.setAttribute( JAXP_SCHEMA_LANGUAGE, "http://www.w3.org/2001/XMLSchema" );
    // --- Le chemin d'accès à mon fichier xsd se trouve dans un fichier de config
    File f = new File( getConfig().getXsdPath() );
    dbfactory.setAttribute( JAXP_SCHEMA_SOURCE, f );
    
    db = dbfactory.newDocumentBuilder();
    // --- J'ai un error handler pour filtrer certain type d'erreur que je ne considère pas comme de réelles erreurs.
    // --- Ce n'est donc pas obligatoire
    myHandler = new XmlValiderHandlerManager();
    db.setErrorHandler( myHandler );
    // --- Entity resolver pour passer outre les messages d'erreur sur les entity connu de mon process
    db.setEntityResolver( new NplEntityResolver(getConfig().getRoot()) );
    
    // --- Parsing du fichier xml en entrée
    db.parse(new File(myRootDirectory.concat(File.separator).concat(myCurrentInputFile)));
    


    En espérant que ça puisse un jour aider.
    5
  2. ramirva
     
    SLT TT LE MONDE

    EN FAITE JE VEUX PARSER UN FICHIER XSD POUR GENERER APRES DES OBJECTS CLASSES

    MERCI DE ME DONNER UNE IDEE
    1