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 du fichier xml, element non trouvé


Sujet :

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

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 279
    Par défaut Validation du fichier xml, element non trouvé
    Bonjour,

    J'utilise JAXB pour recuperer le contenu du fichier xml, mais avant de le recuperer je lui donne un schema dont le contenu est le suivant :

    ROOT.xsd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:DGE="urn:ops:rncps:dge" elementFormDefault="qualified" attributeFormDefault="unqualified">
    	<xsd:import namespace="urn:ops:rncps:dge" schemaLocation="ROOT_DOCUMENT.xsd"/>
    	<!-- MAIN INSTANCES GLOBAL ELEMENTS -->
    	<xsd:element name="Documents" type="Documents"/>
    	<!-- PARTIAL BRANCH <<AGREGATE>> -->
    	<!-- CURRENT BRANCH TOP TYPE -->
    	<xsd:complexType name="Documents">
    		<xsd:sequence>
    			<xsd:group ref="DGE:Document" minOccurs="0" maxOccurs="unbounded"/>
    		</xsd:sequence>
    	</xsd:complexType>
    	<!-- END OF SCHEMA -->
    </xsd:schema>
    Mon fichier xml à la forme suivante (j'ai supprimé les autres balises du niveau bas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <Documents xmlns="urn:ops:rncps:dge"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="urn:ops:rncps:dge ROOT.xsd">
    	<Document>
    		<Mindex>
    			<Profil>CP1</Profil>
    			<Identification>CI1</Identification>
    			<Temps>2012-06-27T11:39:15+02:00</Temps>
    			<RefDGE>CodeRef1</RefDGE>
    		</Mindex>		
    	</Document>	
    </Documents>
    Pour lire le fichier xml, j'utilise ces instructions de JAXB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 
    Schema schema = schemaFactory.newSchema(new File("src/main/java/dev/xsd/", "ROOT.xsd")); 
     
    File xmlDocuments = new File("src/main/resources/xml/docs3.xml");
    JAXBContext jaxbContext = JAXBContext.newInstance(Documents.class);
     
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    jaxbUnmarshaller.setSchema(schema);
    Documents docs = (Documents) jaxbUnmarshaller.unmarshal(xmlDocuments);
    J'obtiens cette erreur qui me semble que l'element 'Documents' n'est pas déclarée dans le fichier xsd, alors qu'il exite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    javax.xml.bind.UnmarshalException
     - with linked exception:
    [org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'Documents'.]
    	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)
    	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:503)
    	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:204)
    	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173)
    	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
    	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142)
    	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151)
    	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169)
    	at faycal.dev.JAXBExemple.main(JAXBExemple.java:88)
    Si je met pas le schema, la lecture du fichier xml se passe bien sans aucune erreur.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    On sait pas trop ce que t'as mis dans ton import, mais en supposant que ce ne soit pas important :

    Il faut pas oublier targetNamespace dans ton fichier .xsd. Là tu as mis elementFormDefault="qualified" mais on se demande bien qualifié par quoi. targetNamespace obligatoire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    @facilus68
    D'abord, je prends le ROOT.xsd comme tel à sa valeur au pied de la lettre; puis je suppose que ROOT_DOCUMENT.xsd soit doté le targetNamespace intentionné et proprement fait pour le rest. Voici les déductions qu'on puisse faire:
    L'élément Documents est vécu dans un namespace null;
    L'élément Document et ses déscendants sont vécu dans un namespace urn:ops:rncps:dge.
    Le schéma ROOT_DOCUMENT.xsd est proprement importé dedans le ROOT.xsd.

    On doit faire les suivants sur le fichier xml:
    Déplacer la déclaration de namespace par défaut de Documents à Document;
    au lieu de xsi:schemaLocation="...", c'est xsi:noNamespaceSchemaLocation="ROOT.xsd" qu'on doit y mettre.

    Au final le fichier xml devrait s'écrire comme ça.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Documents
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="ROOT.xsd">
    	<Document xmlns="urn:ops:rncps:dge">
    		<Mindex>
    			<Profil>CP1</Profil>
    			<Identification>CI1</Identification>
    			<Temps>2012-06-27T11:39:15+02:00</Temps>
    			<RefDGE>CodeRef1</RefDGE>
    		</Mindex>		
    	</Document>	
    </Documents>
    Voilà!

Discussions similaires

  1. [xml][Java] Comment valider un fichier XML?
    Par ederf dans le forum Valider
    Réponses: 1
    Dernier message: 06/03/2006, 15h51
  2. [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
  3. Valider un fichier XML avec un Schema
    Par Groove dans le forum Valider
    Réponses: 4
    Dernier message: 09/11/2005, 08h15
  4. [XML] validation de fichier XML:l'ordre des balises compte ?
    Par longbeach dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 04/09/2005, 18h53
  5. [DOM] Valider un fichier xml
    Par P4dre dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 08/08/2005, 11h17

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