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 :

Lecture du noeud principal


Sujet :

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

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 549
    Par défaut Lecture du noeud principal
    salut

    je tente de lire un fichier xml via jaxb

    voici le début de mon fichier xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!--Sample XML file generated by XMLSpy v2010 rel. 3 sp1 (http://www.altova.com)-->
    <flx:ModeleREP xsi:schemaLocation="urn:rep:flux:011:rep-1.0.xsd rep-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flx="urn:rep:flux:011:rep-1.0.xsd">
    lorsque je tente de le lire avec jaxb j'ai l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.xml.bind.UnmarshalException: unexpected element (uri:"urn:rep:flux:011:rep-1.0.xsd", local:"ModeleREP"). Expected elements are <{}flx:ModeleREP>
    ma classe principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @XmlRootElement(name="flx:ModeleREP")
    @XmlAccessorType(XmlAccessType.NONE)
    public class ModeleREP {
     ...
    }
    il y a un truc de spécial à faire?

  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
    Citation Envoyé par lequebecois79 Voir le message
    il y a un truc de spécial à faire?
    Oui. flx: ne fait pas partie du nom de la balise. Ce n'est qu'un préfixe d'association au namespace urn:rep:flux:011:rep-1.0.xsd. Ce pourrait aussi bien être toto:ModeleREP, du moment que tu as xmlns:toto="urn:rep:flux:011:rep-1.0.xsd", ça fera la même chose.
    Donc il ne fait pas partie du nom de la balise.

    Ce devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @XmlRootElement(name="ModeleREP", namespace="urn:rep:flux:011:rep-1.0.xsd")
    Il est peut-être possible de forcer l'usage du préfixe flx: plutôt qu'un autre, avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @XmlNs(prefix="flx", namespaceURI="urn:rep:flux:011:rep-1.0.xsd")
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 549
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Oui. flx: ne fait pas partie du nom de la balise. Ce n'est qu'un préfixe d'association au namespace urn:rep:flux:011:rep-1.0.xsd. Ce pourrait aussi bien être toto:ModeleREP, du moment que tu as xmlns:toto="urn:rep:flux:011:rep-1.0.xsd", ça fera la même chose.
    Donc il ne fait pas partie du nom de la balise.

    Ce devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @XmlRootElement(name="ModeleREP", namespace="urn:rep:flux:011:rep-1.0.xsd")
    Il est peut-être possible de forcer l'usage du préfixe flx: plutôt qu'un autre, avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @XmlNs(prefix="flx", namespaceURI="urn:rep:flux:011:rep-1.0.xsd")
    le xsd doit être au même emplacement que le fichier xml?
    dois-je rajouter le namespace pour chacun de mes éléments?

    car là en enlevant tous les flx, ça fonctionne.... mais bon j'ai pas de contrôle sur le fichier xml donc je dois faire avec les flx

    j'ai du me faire une classe qui implémente ValidationEventHandle au niveau du Unmarshaller afin de ne pas avoir d'ennuie avec les éléments xml que je ne désire pas ajouter inutilement dans mes classes java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public boolean handleEvent(ValidationEvent evt) {
     
            if(evt.getMessage().contains("unexpected element")) {
               return true;
            }
            return false;
        }
    l'objet retourné par unmarshal n'est pas nulle, mais son attribut l'est...

    donc le hic semble bien être le namespace

  4. #4
    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
    Citation Envoyé par lequebecois79 Voir le message
    le xsd doit être au même emplacement que le fichier xml?
    ? Euh, ça je sais pas. Qu'est-ce que le xsd vient faire dans cette histoire ? On parlait de namespace, là...

    Citation Envoyé par lequebecois79 Voir le message
    dois-je rajouter le namespace pour chacun de mes éléments?
    Probablement.

    Le principe étant qu'un même document peut avoir des éléments de différents namespaces. (Pour mêler du XHTML, du SVG, du Docbook, du RSS, et tes propres éléments, dans un seul doc, en sachant faire la différence entre <title>, <title>, <title>, <title> et <title>.)

    car là en enlevant tous les flx, ça fonctionne.... mais bon j'ai pas de contrôle sur le fichier xml donc je dois faire avec les flx

    Citation Envoyé par lequebecois79 Voir le message
    j'ai du me faire une classe qui implémente ValidationEventHandle au niveau du Unmarshaller afin de ne pas avoir d'ennuie avec les éléments xml que je ne désire pas ajouter inutilement dans mes classes java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public boolean handleEvent(ValidationEvent evt) {
     
            if(evt.getMessage().contains("unexpected element")) {
               return true;
            }
            return false;
        }
    l'objet retourné par unmarshal n'est pas nulle, mais son attribut l'est...

    donc le hic semble bien être le namespace
    ?? Je comprends pas trop ce que ça fait, ni le raisonnement derrière.

    Je précise que je ne connais pas JAXB. Par contre, je connais bien XML, les namespaces, et je peux donc pointer la question à ceux qui ne la connaissent pas. La JavaDoc des annotations JAXB étant assez claire, je n'ai pas eu trop de mal à trouver les exemples de principe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 549
    Par défaut
    Citation Envoyé par thelvin Voir le message
    ?
    Probablement.
    je vais tester

    Citation Envoyé par thelvin Voir le message
    ?? Je comprends pas trop ce que ça fait, ni le raisonnement derrière.
    c'est le seul moyen que j'ai trouvé pour par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <maison>
      <portes>
         <a>arriere</a>
         <b>devant</b>
      </portes>
      <piece nb="12"/>
    </maison>
    dans mon objet maison mettre qu'un attribut piece car porte et ses descendant ne m'interesse pas...

    il y a peut-être mieux....

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 549
    Par défaut
    bon au final toujours le même problème au niveau du prefix, rien n'y fait

Discussions similaires

  1. [Débutant] Lecture de noeud XML en c#
    Par FruitSellers dans le forum C#
    Réponses: 1
    Dernier message: 06/06/2014, 12h20
  2. Réponses: 3
    Dernier message: 11/02/2011, 19h31
  3. [C# & XML] Lecture de noeuds adajcents
    Par nerozen dans le forum Services Web
    Réponses: 2
    Dernier message: 25/06/2008, 16h30
  4. probleme de lecture de noeud en c++
    Par Labotrain dans le forum XML
    Réponses: 0
    Dernier message: 27/03/2008, 11h05
  5. [AJAX] ajax et les lecture de noeuds
    Par tiger63 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/03/2007, 10h00

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