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 :

Objet sérialisé : suppression d'attribut


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 35
    Par défaut Objet sérialisé : suppression d'attribut
    Bonjour,

    Je rencontre actuellement un léger problème avec une de mes classe sérialisée. J'enregistre l'ensemble de mes données avec un writeObject, et je les récupère par la suite avec un readObject, mais depuis quelques temps, j'ai supprimé un attribut de ma classe, et cela fausse d'anciens fichiers qui avaient été sauvegardés avec cet attribut.

    Existe t'il un moyen (au travers probablement d'un resolveClass, resolveObject ou readResolve) de faire en sorte que lors de la lecture d'un ancien fichier, les attributs, qui, depuis ont été supprimés, ne soient pas pris en compte ?

    Pour éclairer un peu mon problème voici un exemple :

    Première version de ma classe, avec laquelle j'ai sauvegardé mes fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class test {
        private String test;
        private String test2;
        private Boolean test3;
    }
    Nouvelle version de ma classe, avec laquelle j'aimerai pouvoir lire mes fichiers (l'attribut "test2" a été supprimé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class test {
        private String test;
        private Boolean test3;
    }
    Actuellement, lorsque je souhaite lire un fichier ayant été modifié de la sorte, j'obtiens une belle ClassCastException car j'ai comme l'impression qu'il décale les champs et qu'il essaye d'affecter la valeur de test2 (String) à test3 (Boolean)
    Voilà le type d'erreurs que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: cannot assign instance of java.lang.String to field project.obj.test.test3 of type java.lang.Boolean in instance of project.obj.test
    Auriez vous une solution ? Je peux remettre le champs dans ma classe, mais je ne souhaite pas conserver indéfiniment cette donnée devenue inutile (et le fait de rajouter le mot clé "transient" (qui m'aurait permis de ne plus resauvegarder l'attribut) fait planter la lecture :/)

    Merci d'avance pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 35
    Par défaut
    J'ai bien sûr enviseagé la solution de conserver l'ancienne classe en @deprecated afin de créer l'objet, et à partir de l'objet, créer un objet de la nouvelle classe. Ceci étant, celà m'oblige à conserver un fichier désuet et s'il existe une solution me permettant de supprimer cette ancienne classe je suis preneur

Discussions similaires

  1. [DOM] RegEx - Suppression d'attributs dans une balise
    Par jumbay dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 17/10/2007, 20h40
  2. Réponses: 4
    Dernier message: 21/02/2007, 16h46
  3. HTTPClient - Objet sérialisé
    Par naonednus dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 06/12/2006, 13h42
  4. Réponses: 4
    Dernier message: 20/07/2006, 10h35
  5. [Sécurité] Problème de récupération d'objet sérialisé
    Par Mysticlolly dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2006, 14h16

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