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 d'un xml avec xsd


Sujet :

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

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut validation d'un xml avec xsd
    voici ma méthode pour la validation

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    public static Vector validateXML(String xmlMessage,String path) {
    final Vector errorsList = new Vector();
     File f=new File(xmlMessage);
     
     try{
                     FileInputStream is = new FileInputStream(f);
     
                          byte[] attBody = new byte[is.available()];
     
                        is.read(attBody);
                        String msg = new String(attBody);
    System.out.println(msg);
     
    	InputStream IS = null;
    		try {
                        System.out.println("okkk");
    			IS = new java.io.ByteArrayInputStream(msg.getBytes("UTF-8"));
    		} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}
    		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    		dbf.setIgnoringComments(true);
    		dbf.setNamespaceAware(true);
    		dbf.setValidating(true);
    		System.out.println("okkk2");
     
    		SAXParserFactory factory = SAXParserFactory.newInstance();
    		factory.setNamespaceAware(true);
    		factory.setValidating(true);
    		SAXParser saxParser = null;
    		try {
                        System.out.println("okkk3");
    			saxParser = factory.newSAXParser();
    			try {
                                System.out.println("okkk4");
    				saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
    				saxParser.setProperty(JAXP_SCHEMA_SOURCE, path);
     
    			} catch (SAXNotRecognizedException e) {} catch (SAXNotSupportedException e) {}
    		 	} catch (ParserConfigurationException e1) {e1.printStackTrace();
    		 	} catch (SAXException e1) {e1.printStackTrace();}
     
    		try {
                        System.out.println("okkk5");
    			saxParser.parse(IS, new DefaultHandler(){
    				public void fatalError(SAXParseException e) {
    				errorsList.add("E516"+e.getMessage()+"");
                                    System.out.println("okkk");
    				System.out.println(e.getMessage());
                                    isValid=false;
    				}
     
    				public void error(SAXParseException e) {
    				errorsList.add("E516"+e.getMessage()+"");
                                    System.out.println("okkk1111");
    				System.out.println(e.getMessage());
                                    isValid=false;
    				}
     
    				public void warning(SAXParseException e) {
    				errorsList.add("E516"+e.getMessage()+"");
                                    System.out.println("okkk22222222222");
    				System.out.println(e.getMessage());
                                    isValid=false;
    				}
    			});
    		} catch (IOException ioe) {
    			System.out.println(ioe);	
    		} catch (SAXException saxe) {
    			System.out.println(saxe);
                    isValid=false;}
     
    		/*}
    		else
    		{errorsList.add("E514"+""+"");}*/
    	/*}
    	else {System.out.println("E515 jok");errorsList.add(new gdpError("E515","",""));}
    	*/
     
     }catch(Exception e){System.out.println(e.getMessage());}	
    System.out.println(isValid);
    return errorsList;
    }
    mon problème c'est que mon xsd fait appel aux autres xsd

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ean.ucc:2">  <xsd:include schemaLocation="ean.ucc/common/ApplicationReceiptAcknowledgement.xsd"/>
    </xsd:schema>
    et les fichiers xml commence par une entête et sa définition est dans un autre fichier xsd

    je ne sais pas que donner à ma methode comme path pour valider tout le fichier commenant par l'entête.

  2. #2
    Membre averti
    Inscrit en
    Février 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 40
    Par défaut
    Tu donnes simplement le fichier racine, les autres qui sont imbriqués de façon appropriée avec les include seront automatiquement considérés moyennant qu'ils sont accessibles et que la spécification du chemin d'accès est correcte.

    Maintenant, j'ai eu des problèmes à effectuer une validation SAX avec une méthode correspondant plus ou moins à ce que tu fais, le problème n'était pas avec le XSD, mais avec le fait que la méthode setValidating(true) ne semble pas fonctionner correctement ici, j'ai donc ajouté un setFeature("http://apache.org/xml/features/validation/schema", true) et ça a résolu le problème. Toutefois, je n'ai encore eu aucune explication pour ce comportement et si pour tout un simple setValidating(true) fonctionne, j'aimerais bien que tu le laisses savoir.

    Mon fil de discussion sur ce sujet est ici.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut
    le problèma qu'une partie de mon fichier xml(l'entête) doit être validé par un xsd qui ne fait pas appel aux autres fichiers qui font valider le reste du fichier

  4. #4
    Membre averti
    Inscrit en
    Février 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 40
    Par défaut
    Pas trop sûr de suivre ton histoire. Pas très clair ce que tu veux faire exactement.

    Mais, là, de ce je comprends. Tu as un XML que tu veux valider avec un schéma XSD qui se trouve dans plusieurs fichiers imbriqués. Mais, dans ton XML, il y a une partie dont la définition XSD ne se trouve pas dans ton schéma XSD résultant de fichiers imbriqués. Est-ce que c'est ça?

    Alors, pourquoi tu n'ajoutes pas tout simplement le XSD manquant à ton schéma?

Discussions similaires

  1. [JAXB] Problème parsing XML avec XSD validant
    Par vano dans le forum Persistance des données
    Réponses: 2
    Dernier message: 26/08/2008, 09h59
  2. [WD 12] MSXML - validation xml avec xsd externe
    Par nicol9 dans le forum WinDev
    Réponses: 1
    Dernier message: 29/07/2008, 15h08
  3. Valider XML avec XSD
    Par neilbgr dans le forum Langage
    Réponses: 10
    Dernier message: 26/03/2008, 16h01
  4. [XSD] Valider un document XML avec plusieurs XSD
    Par Cbast dans le forum Valider
    Réponses: 1
    Dernier message: 11/02/2008, 08h57
  5. [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, 22h30

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