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 :

XMLEncoder ne sauvegarde pas la donnée d'un PlainDocument.


Sujet :

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

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut XMLEncoder ne sauvegarde pas la donnée d'un PlainDocument.
    Bonjour,

    A,B sont des classes.
    B est attribut de A.
    B a pour attribut private C qui est un PlainDocument.

    Le fait est que l'instrospection de PlainDocument donne ceci :
    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <void property="c">
        <void property="documentProperties">
         <void method="put">
          <object class="java.awt.font.TextAttribute" field="RUN_DIRECTION"/>
          <boolean>false</boolean>
         </void>
         <void method="put">
          <string>tabSize</string>
          <int>0</int>
         </void>
        </void>
       </void>

    et alors là, je n'ai aucune trace de ma donnée.
    Par exemple, si j'utilise ube instance de c comme modèle pour un JTextField, que je saisie dans ce champ cette chaîne "1234567890".
    Qu'ensuite j'encode une instance de A dans un fichier avec XMLEncoder et bien je ne retrouve aucune trace de cette chaine.
    Par contre, supposons que C soit un DefaultComboBoxModel, et bien si je change d'item dans ma ConboBox et qu'ensuite j'encode et bien je retrouve une trace de cette item selectionner dans mon fichier XML.
    La preuve :
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <void property="c">
        <void property="selectedItem">
         <string>3/4</string>
        </void>
        <void method="addElement">
         <string>1/2</string>
        </void>
        <void method="addElement">
         <string>3/4</string>
        </void>
        <void method="addElement">
         <string>Plein</string>
        </void>
       </void>
    Pourquoi l'instrospection d'un PlainDocument ne sauvegarde t'elle pas la donnée ?
    Merci d'avance pour vos réponses, désolé pour les premiers qui sont passé lire le post, j'avais même pas dis bonjour ?

  2. #2
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    3H du mat, toujours pas résolut ce foutu problème, mais j'ai quand même une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    A o = new A();
    XMLEncoder e = new XMLEncoder(
                              new BufferedOutputStream(os));
           e.setPersistenceDelegate(javax.swing.text.PlainDocument.class,
                             new java.beans.DefaultPersistenceDelegate(
                                 new String[]{ "text"
                                               }));
           e.writeObject(o);
           e.close();
    ce bout de code crée un appel à PainDocument.getText() au moment ou l'encodeur tombe sur une instance de PlainDocument.
    Le fait est que l'encodeur ne tombe jamais sur une instance de PlainDocument puisque si je remplace "text" par "toto", celui-ci est sensé appelé la méthode getToto() ce qui devrait envoyer une exception du genre : NoSuchMethodException. et cela n'arrive jamais.
    Donc l'introspection n'arrive pas jusqu'aux méthodes de la classe PlainDocument.
    PAr exmple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    XMLEncoder e = new XMLEncoder(
                              new BufferedOutputStream(os));
           e.setPersistenceDelegate(javax.swing.text.PlainDocument.class,
                             new java.beans.DefaultPersistenceDelegate(
                                 new String[]{ "toto"
                                               }));
           e.writeObject(new javax.swing.text.PlainDocument());
           e.close();
    ce code génère bien l'erreur noSuchMethodError, ensuite le statement est annulé.
    Si je n'utilise pas le PersistenceDelegate, l'encodage donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?> 
    <java version="1.5.0_04" class="java.beans.XMLDecoder"> 
     <object class="javax.swing.text.PlainDocument"/> 
    </java>
    Je me demande bien ou son passer les balises
    <object class="javax.swing.text.PlainDocument"/>
    quand j'utilise mes classes A,B et C.

    J'ai aussi constater que la classe java.awt.font.TextAttribute ne posséder pas de constructeur sans argument donc celle-ci n'est pas un bean.

    Serait-ce possible que cet objet bloque l'introspection ?
    Voyez vous une autre possiblité de blocage ?
    C'est quoi cette propriété documentProperties ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/10/2008, 00h16
  2. [MySQL] Sauvegarde base de données en XML
    Par Ben42 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 15/02/2006, 12h37
  3. probleme XPath, j'obtiens pas ma données ?
    Par Bruno13 dans le forum Langage
    Réponses: 7
    Dernier message: 02/02/2006, 14h25
  4. Sauvegarde et Restauration données
    Par juniorAl dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 08/09/2005, 19h24
  5. [ORA-01403] Pas de données trouvées ; et alors ?
    Par szdavid dans le forum Oracle
    Réponses: 6
    Dernier message: 02/08/2005, 11h20

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