IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Validation XML avec un document XSD en utilisant une URL


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut 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 : 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.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    J'ai trouvé la réponse sur cette page : http://www.ibm.com/developerworks/xm...lvalidapi.html

    Voici la méthode :

    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
     
    /**
             * Méthode qui se charge de valider un document XML avec l'URL d'un document XSD.
             * @param xmlFile : fichier XML à valider. 
             * @param urlXSD :  url du document XML Schema (XSD) permettant de valider.
             * @return true si le document XML est valide, false dans le cas contraire.
             */
    	public static boolean validXMLWithSAX(File xmlFile, URL urlXSD) {
    		isValid = true;
     
    		// 1. Lookup a factory for the W3C XML Schema language
    		SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA);
     
    		try {
    			// 2. Compile the schema.
    			// Here the schema is loaded from a java.io.URL, but you could use 
    	        // a java.net.File or a javax.xml.transform.Source instead.
    			Schema schema = schemaFactory.newSchema( urlXSD );
     
    			// 3. Get a validator from the schema.
    	        Validator validator = schema.newValidator();
     
    	        // 4. Parse the document you want to check.
    	        Source source = new StreamSource(xmlFile);
     
    	        // 5. Check the XML document
    	        validator.validate(source); 
     
    		} catch (SAXException se) {
    			logger.error("Impossible de valider le document XML avec le fichier XSD car : « " + se.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;
    	}
    Merci,
    F.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSD] [Xerces-J 1.4.4] Validation XML avec schéma XSD
    Par g_rare dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 08/04/2008, 17h40
  2. Valider XML avec XSD
    Par neilbgr dans le forum Langage
    Réponses: 10
    Dernier message: 26/03/2008, 17h01
  3. Validation XML avec un schema XSD
    Par eods dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/05/2006, 15h33
  4. [Xml/Xsd]valider son fichier Xml avec un schéma xsd
    Par ePoX dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/02/2006, 23h30
  5. [XSD][xerces] validation xml avec un xsd
    Par chand_bing dans le forum Valider
    Réponses: 2
    Dernier message: 05/02/2004, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo