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

Entrée/Sortie Java Discussion :

Problème avec l'interface java.io.serializable.


Sujet :

Entrée/Sortie 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 Problème avec l'interface java.io.serializable.
    salut à tous,

    J'ai une Classe A qui contient une sous classe B.
    B est attribut de A.
    A et B implémente toutes les deux l'interface java.io.serializable.
    B contient plusieurs objet de la classe PlainDocument qui elle aussi implémente notre fameuse interface.

    Code de sauvegarde d'une instance de A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     public void save(Object o, File name) {
            FileOutputStream os = null;
            try {
                os = new FileOutputStream(name);
            } catch (FileNotFoundException e) {
                System.out.println("File not Found :" + e);
            }
     
     
           XMLEncoder e = new XMLEncoder(
                              new BufferedOutputStream(os));
           e.writeObject(o);
           e.close();
        }
    avec un appel comme ceci :

    résultat :

    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="monpackage.A"/> 
    </java>
    problème : aucune introspection de l'objet.
    Qu'est ce qui ne va pas dans cette façon de faire ?
    Merci

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    La classe XMLEncoder ne neccessite pas d'implémenter Serializable, mais elle utilise les accesseurs/mutateurs de la classe pour générer un fichier XML et recréer l'objet (cf l'API de XMLEncoder)...

    As-tu bien des accesseurs/mutateurs pour chacun des attributs à sauvegarder ???

    a++

  3. #3
    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
    Citation Envoyé par adiGuba
    Salut,


    La classe XMLEncoder ne neccessite pas d'implémenter Serializable, mais elle utilise les accesseurs/mutateurs de la classe pour générer un fichier XML et recréer l'objet (cf l'API de XMLEncoder)...



    a++
    merci, je savais pas.



    As-tu bien des accesseurs/mutateurs pour chacun des attributs à sauvegarder ???
    j'ai bien tout les accesseurs mais pas les mutateurs, je vais implémenter ça et je vous donne des news.

  4. #4
    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
    voilà c'est fait, ya quand même du mieux, j'ai des exception qui se produise :
    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
    20
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getRSE();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getAdresse();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getContenant();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getDesignation();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getDestination();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getFax();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getRemplissage();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getResponsable();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getTel();
    Continuing ...
    java.lang.NoSuchMethodException: <unbound>=Entreprise.getUnite();
    Continuing ...
    Entreprise est a remplacé par B, c'est ma sous classe. Les méthodes mentionnés ci dessus existe bien.
    des idées ?
    Par contre le résultat n'a pas changé.

  5. #5
    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
    j'ai trouver,

    B était inclus dans le même source que A, donc B ne pouvait être déclaré public et c'est en fait ce qu'il manquait.
    merci pour ta réponse adiGuba.

    A+

  6. #6
    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
    J'ai encore régler quelques petit problème et tout semble fonctionner sauf que le contenu de mes PlainDocument n'est jamais introspecter.

    Je m'explique :

    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 : 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 C comme modèle pour un JTextField, que je saisie dans ce champ cette chaîne "1234567890".
    Qu'ensuite j'encode 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 retourve une trace de cette item selectionner dans mon fichier XML.
    La preuve :
    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>
    quelqu'un aurait-il une idée de ce qui se passe ?

Discussions similaires

  1. Interface Java avec NetBeans
    Par chercheur111 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 30/01/2011, 17h08
  2. JAXWS wsimport & mapping xml avec interfaces java
    Par ZZelle dans le forum Services Web
    Réponses: 0
    Dernier message: 23/04/2010, 17h11
  3. Interfacer Java avec C
    Par Oompa dans le forum Langage
    Réponses: 4
    Dernier message: 19/03/2010, 15h24
  4. [votre avis m'interesse] Interface avec un programme Java
    Par LineLe dans le forum Interfaces Graphiques en Java
    Réponses: 29
    Dernier message: 11/12/2004, 11h39

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