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 :

[Xerces] pb de validation xml avec un schema stocké dans un jar


Sujet :

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

  1. #1
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut [Xerces] pb de validation xml avec un schema stocké dans un jar
    Salut à tous,

    je sais que cela revient souvent mais j'utilise Xerces pour valider un xml avec mon schema stocké dans un jar.

    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
     
     
    URL xsdURL = Thread.currentThread().getContextClassLoader().getResource( "config/maven-dashboard-config.xsd" );
     
            try
            {
                InputSource xmlFile = new InputSource( new FileInputStream( this.configfile ) );
     
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                dbf.setIgnoringComments(true);
                dbf.setNamespaceAware(true);
                dbf.setValidating(true);
                dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
                dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File(xsdURL.getFile()));
               DocumentBuilder db = dbf.newDocumentBuilder();
                db.setErrorHandler(new MyDefaultHandler() );
                Document doc = db.parse(xmlFile);
     
     
            }
            catch ( SAXException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
            catch ( IOException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
            catch ( ParserConfigurationException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
    ça ne fonctionne pas , j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Error Line 3: schema_reference.4: Failed to read schema document 'file:\C:\PIC\maven-repo-sonate5\org\codehaus\mojo\dashboarddb-maven-plugin\1.0-SNAPSHOT\dashboarddb-maven-plugin-1.0-SNAPSHOT.jar!\config\maven-dashboard-config.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
     
    Error Line 3: schema_reference.4: Failed to read schema document 'null', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
     
    Error Line 3: cvc-elt.1: Cannot find the declaration of element 'configuration'.
    par contre si je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File(xsdURL.getFile()));
    par un accés en dur sur mon schema (sur mon disque)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File("F:\\projects\\dashdb-maven-plugin\\src\\main\\resources\\config\\maven-dashboard-config.xsd"));
    là ça marche nickel !!!


    Quelqu'un a-t'il pu résoudre ce souci, sachant que mon xsd doit être obligatoirement dans mon jar ?

    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    Essaye d'implémenter l'interface org.xml.sax.EntityResolver de sorte à récupérer le contenu de ton xsd (code à ta main) et de le retourner sous d'InputSource.

    Je n'ai pas testé avec un xsd, mais cela fonctionne pour moi pour les références à des fichiers xml cryptés, que je dois donc décrypter à la volée avant de les parser.

    Jacques Desmazières

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 146
    Points : 150
    Points
    150
    Par défaut
    essaye avec la méthode setSystemId de InputSource, qui permet de définir le chemin de référence.
    Best Web Design Software ever - http://tweakstyle.com

  4. #4
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    Salut à tous,

    Un ami m'a trouvé la solution :

    Au lieu d'utiliser un objet URL et aprés un object File pour passer mon schema , il faut directement prendre un inputStream sur le schema :

    mon code existant était :

    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
     
    URL xsdURL = Thread.currentThread().getContextClassLoader().getResource( "config/maven-dashboard-config.xsd" );
     
            try
            {
                InputSource xmlFile = new InputSource( new FileInputStream( this.configfile ) );
     
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                dbf.setIgnoringComments(true);
                dbf.setNamespaceAware(true);
                dbf.setValidating(true);
                dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
                dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File(xsdURL.getFile()));
               DocumentBuilder db = dbf.newDocumentBuilder();
                db.setErrorHandler(new MyDefaultHandler() );
                Document doc = db.parse(xmlFile);
     
     
            }
            catch ( SAXException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
            catch ( IOException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
            catch ( ParserConfigurationException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
    et il faut faire :

    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
     
    InputStream stream =
                Thread.currentThread().getContextClassLoader().getResourceAsStream( "config/maven-dashboard-config.xsd" );
            try
            {
                InputSource xmlFile = new InputSource( new FileInputStream( this.configfile ) );
     
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                dbf.setIgnoringComments( true );
                dbf.setNamespaceAware( true );
                dbf.setValidating( true );
                dbf.setAttribute( JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA );
                dbf.setAttribute( JAXP_SCHEMA_SOURCE, stream );
                DocumentBuilder db = dbf.newDocumentBuilder();
                db.setErrorHandler( new MyDefaultHandler() );
                Document doc = db.parse( xmlFile );
     
            }
            catch ( SAXException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
            catch ( IOException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
            catch ( ParserConfigurationException e )
            {
                isValidXSD = false;
                e.printStackTrace();
            }
    et là ça marche nickel, le schema xsd est bien stocké dans mon jar et je valide un xml passé par l'utilisateur.

    ceci avec JDK 1.4 et Xerces comme parser.

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

Discussions similaires

  1. [XSD] [XERCES] validation xml avec ou sans schema
    Par zulot dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/05/2008, 09h59
  2. [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, 16h40
  3. Validation XML avec un schema XSD
    Par eods dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/05/2006, 14h33
  4. Valider un fichier XML avec un Schema
    Par Groove dans le forum Valider
    Réponses: 4
    Dernier message: 09/11/2005, 08h15
  5. [XSD][xerces] validation xml avec un xsd
    Par chand_bing dans le forum Valider
    Réponses: 2
    Dernier message: 05/02/2004, 20h21

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