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 :

Constructeur de l'objet Document [JDOM]


Sujet :

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

  1. #1
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Points : 1 267
    Points
    1 267
    Par défaut Constructeur de l'objet Document
    Bonjour,
    Je crée un objet XMLKeyDocument extends Document.

    Je construit un Document doc par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SAXBuilder sxb = new SAXBuilder();
     document = sxb.build(f);
    puis le constructeur de XMLKeyDocument se fait ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public XMLKeyDocument(Document document, String key)
    {
    super(document.getContent());
    this.key=key;
    }
    J'ai alors une ClassCastException à la ligne super(document.getContent());

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    org.jdom.Comment
    java.lang.ClassCastException: org.jdom.Comment
            at org.jdom.ContentList.add(ContentList.java:214)
            at org.jdom.ContentList.add(ContentList.java:140)
            at org.jdom.ContentList.addAll(ContentList.java:292)
            at org.jdom.ContentList.clearAndSet(ContentList.java:338)
            at org.jdom.Document.setContent(Document.java:494)
            at org.jdom.Document.<init>(Document.java:169)
            at robusta.xml.XMLKeyDocument.<init>(XMLKeyDocument.java:26)
    autrement dit le org.jdom.Document n'arrive pas à se construire à partir de son Content. J'ai un peu du mal à capter...

    Pour info contextuelle, un XMLKeyDocument me permet de faire des algorithmes sur des docs xml ayant une DTD particulière.

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Points : 1 267
    Points
    1 267
    Par défaut
    Précisions que si je fais dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    super(document.getRootElement());
    alors, j'ai comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    The element "root" could not be added as the root of the document: The Content already has an existing parent document
    org.jdom.IllegalAddException: The element "root" could not be added as the root of the document: The Content already has an existing parent document
            at org.jdom.ContentList.add(ContentList.java:214)
            at org.jdom.ContentList.add(ContentList.java:140)
            at java.util.AbstractList.add(AbstractList.java:89)
            at org.jdom.Document.setRootElement(Document.java:236)
            at org.jdom.Document.<init>(Document.java:117)
            at org.jdom.Document.<init>(Document.java:154)
            at robusta.xml.XMLKeyDocument.<init>(XMLKeyDocument.java:26)
            at robusta.xml.XMLKeyDocumentBuilder.createXMLKeyDocument(XMLKeyDocumentBuilder.java:49)
            at robusta.xml.XMLKeyDocumentBuilderTest.testBuild(XMLKeyDocumentBuilderTest.java:41)
    Si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    super(document.getRootElement().getContent());
    alors j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    A Text is not allowed at the document root
    org.jdom.IllegalAddException: A Text is not allowed at the document root
            at org.jdom.ContentList.documentCanContain(ContentList.java:178)
            at org.jdom.ContentList.add(ContentList.java:205)
            at org.jdom.ContentList.add(ContentList.java:140)
            at org.jdom.ContentList.addAll(ContentList.java:292)
            at org.jdom.ContentList.clearAndSet(ContentList.java:338)
            at org.jdom.Document.setContent(Document.java:494)
            at org.jdom.Document.<init>(Document.java:169)
            at robusta.xml.XMLKeyDocument.<init>(XMLKeyDocument.java:26)
            at robusta.xml.XMLKeyDocumentBuilder.createXMLKeyDocument(XMLKeyDocumentBuilder.java:49)
            at robusta.xml.XMLKeyDocumentBuilderTest.testBuild(XMLKeyDocumentBuilderTest.java:41)
    Pour l'instant je m'en tire en mettant le Document en attribut de ma classe puis xmlKeyDoc.getDocument().maFonction(), mais c'est pas franchement ce que je souhaite.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    super(document.detachRootElement())
    devrait marcher, regarde bien les erreurs il y a des indices.
    Mais j'aurai plutôt gardé le document propriété de la classe.

  4. #4
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Points : 1 267
    Points
    1 267
    Par défaut
    Excellent ! Ca marche !

    Effectivement, quand il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    super(document.getRootElement());
    alors on rajoute le parent du root, c'est-à-dire le document.
    Etant débutant en JDOM, je n'ai pas encore ces concepts dans ma petite tête.
    Ceci dit, je ne comprend toutjours pas pourquoi super(document.getContent()) ne marche pas.

    Tanks anyway !

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

Discussions similaires

  1. Faire appel à un constructeur d'un objet
    Par ploxien dans le forum Langage
    Réponses: 8
    Dernier message: 03/05/2007, 10h32
  2. créer un objet Document à partir d'un String XML
    Par Tanebisse dans le forum Services Web
    Réponses: 1
    Dernier message: 21/03/2007, 15h03
  3. [AJAX] les constructeurs de l'objet xmlHttpRequest
    Par inter_amine dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/12/2006, 21h06
  4. Réponses: 3
    Dernier message: 02/05/2006, 15h12
  5. Réponses: 17
    Dernier message: 18/10/2005, 21h19

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