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

Persistance des données Java Discussion :

[JAXB] Cannot find the declaration of element


Sujet :

Persistance des données Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [JAXB] Cannot find the declaration of element
    Bonjour à tous,

    j'ai un petit (gros) souci d'utilisation de JAXB pour la manipulation de mes fichiers XML.

    J'ai créé une XSD définissant l'ensemble de mes types, dont voici un extrait :

    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
     
    <xsd:schema targetNamespace="http://www.mycompany.com/mynamespace" elementFormDefault="qualified"
    	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:myns="http://www.mycompany.com/mynamespace">
     
            <xsd:complexType name="TProductProperties">
    		<xsd:sequence>
    			<xsd:choice>
    				<xsd:element name="emailBox" type="myns:TEmailBox" />
    				<xsd:element name="redirection" type="myns:TRedirection" />
    			</xsd:choice>
    			<xsd:element name="domain" type="myns:TDomain" minOccurs="0" maxOccurs="1" />
    		</xsd:sequence>
    	</xsd:complexType>
     
            [...]
     
    	<xsd:element name="productProperties" type="myns:TProductProperties" />
     
    </xsd:schema>
    J'ai ensuite généré mes classes JAXB sans souci (après vérification, le code a l'air correct), puis j'ai écrit un fichier XML à la main que j'ai fait validé de 3 façons différentes (Eclipse, JAXB validator et ma propre librairie de validation) sans aucun problème.

    Cependant, au parsing JAXB, pour me transformer le fichier XML en classe, j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    javax.xml.bind.UnmarshalException
     - with linked exception:
    [org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'myns:productProperties'.]
    	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)
    	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:506)
    	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:324)
    	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:297)
           [...]

    Voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    JAXBContext jaxbContext = JAXBContext.newInstance(TPRoductProperties.class);
    URL xsdURL = new URL(xsdUri);
    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = schemaFactory.newSchema(xsdURL);
     
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    unmarshaller.setSchema(schema);
     
    Document xmlDocument = [...];
     
    JAXBElement<TProductProperties> root = (JAXBElement<TProductProperties>) unmarshaller.unmarshal(xmlDocument);
    J'ai déjà bien épluché le Web à la recherche d'une solution (comme celle-ci), mais sans succès.

    J'utilise Maven2 pour rapatrier les dépendances:
    • javax.xml.bind:jaxb-api:2.2
    • com.sun.xml.bind:jaxb-impl:2.1.9


    Please help !

    Merci par avance,
    Thomas

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Je viens de trouver mon erreur: il s'agissait du mode de chargement du XML sous forme de DOM document:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String xml = "<myexample></myexample>";
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    return dbf.newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes()));
    Je n'ai pas encore cherché pourquoi, mais ce mode de chargement ne semble pas prendre en compte la définition des namespaces dans l'élément racine. Par conséquence, le noeud n'était pas défini avec le bon namespace, et JAXB n'était pas capable de le lire.

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

Discussions similaires

  1. cvc-elt.1: Cannot find the declaration of element
    Par jbelis dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 15/02/2011, 13h12
  2. [JAXB] XmlRootElement & Cannot find the declaration of element ...
    Par ZuZu dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 13/10/2010, 11h21
  3. Réponses: 1
    Dernier message: 27/08/2010, 14h10
  4. [DOM] Sax Exception: 'cvc-elt.1: Cannot find the declaration of element 'site:blog'
    Par laurent_m dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 05/03/2009, 22h52
  5. Réponses: 4
    Dernier message: 25/04/2006, 11h47

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