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

Java Discussion :

[Conception][Serialisation] Interdiction de rendre la superclasse sérialisable


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 5
    Par défaut [Conception][Serialisation] Interdiction de rendre la superclasse sérialisable
    Bonjour,

    Je suis face à un problème original : J'ai besoin de sérializer une classe A1 qui hérite de A. Cependant, je n'ai absolument pas le droit de modifier A.

    A n'implements pas Serializable et déclare un constructeur ayant 2 arguments de type String.

    A1 impléments Serializable et déclare également un constructeur avec deux arguments String , puis super(arg1,arg2).

    Je n'ai aucun problème pour la sérialization. Mais lors de la déserialization, j'ai l'erreur suivante :

    InvalidClassException : no valid constructor.

    Evidemment, j'aurais besoin que A déclare un constructeur sans arguments. Mais ne pouvant pas modifier cette classe, je me retrouve bloqué. Quelqu'un a une idée ?

    Merci pour vos réponses, j'avoue ne pas avoir trouvé la solution après une bonne recherche .. vous êtes mon seul espoir Obewan ..

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 5
    Par défaut Un petit plus d'infos....
    Visiblement, il n'y a pas le choix. Il faut bien que ma classe A déclare un constructeur par defaut, selon les spécifs de SUN :
    public A(){}

    Ceci est du au fait que lors de la désérialisation, l'API doit faire un newInstance() pour l'allocation mémoire qui appel le constructeur pas defaut de la superclasse. Donc pas de constructeur par defaut = pas de serialisation. (La je pleure)

    Sauf que je n'ai accès qu'au binaire de A qui n'est pas modifiable. N'y a t il pas un moyen de contourner ce problème ? SVP SVP SVP ))

  3. #3
    duj
    duj est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Par défaut
    Une solution simpl et rapide: tu stocke toutes les données que tu veux sauver ds une nouvelle classe, que tu sérialises.

    du genre :

    public class InfoA implements Serializable{

    public String champ1;
    public String champ2;
    ....
    ....


    }


    Pour sérialiser, tu construit une instance de cette classe avec les données de tes objets à sauver.
    Pour désérialiser, tu récupère un InfoA contenant les champs te permettant de reconstruire tes objets.

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 5
    Par défaut
    je suis content de ta réponse et merci , j'étais en train de me faire la même réflexion ... Cependant, bonjour le boulot (J'ai une arborescence compliqué derriere) . Je trouve dommage de devoir bidouiller a cause du simple manque d'un constructeur par defaut (vide en plus ). D'ailleurs, etant donné la complexité du modèle que j'ai derriere je ne sais pas encore exactement comment je vais m'y prendre.. je te tiens au courant ..

    Si il y a d'autres suggestions ....

  5. #5
    duj
    duj est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Par défaut
    Ben oui, il y a toujours la solution de décompiler la classe qui cause problème, de la modifier et de la recompiler.

    Mais évidemment, il faut que tu aie le droit de le faire !!

    Et aussi que tu sois le seul à utiliser ce programme ou alors que tout le monde aie la classe modifiée.

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 5
    Par défaut
    Merci pour ta réponse.
    C'est bien le problème, je n'ai PAS le droit de la modifier cette ****** de classe , c'est toute l'histoire de ma vie . Allez, j'attends toujours la solution miracle, même si je suis en train de mettre en oeuvre la premiere solution pour voir ...

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 5
    Par défaut
    ca marche, solution 1 opérationnelle , merci et longue vie aux developpeurs...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Par défaut
    Bonjour, je ré-ouvre un vieux sujet datant de mathusalem, mais je suis confronté au même problème, et la solution proposée ne peut pas s'appliquer à mon souci :

    Voici l'architecture simplifiée de mon problème:


    J'ai plusieurs objets que je place dans un JTree, pour une représentation en arborescence, les éléments E1 E2...En

    je veux sauvegarder cette arborescence pour pouvoir la ré-ouvrir par la suite (tout en conservant les attributs/objets configurés des éléments)

    Et là, c'est le drame, après plusieurs jours de boulot, j'arrive enfin à Sérialiser correctement, mais lors de la désérialisation, l'erreur "No valid constructor" surgit !

    J'ai regardé et effectivement, la superclasse 'DefaultMutableTreeNode' a plusieurs constructeurs (3), un vide, 1 avec 1 objet, 1 avec 2 objets. Donc évidement le constructeur valable est celui avec 2 objets.

    J'ai tenté de copier/coller l'intégralité de la source de cette classe dans une classe perso, en virant les constructeurs non-vides, ça ne change rien.


    Pour ce qui est de la solution proposée ici, je ne peux pas la mettre en oeuvre puisque je ne peux pas créer une classe 'fixe', vu que mes éléments n'ont pas les mêmes attributs selon leur fonction.


    Je sais plus quoi tenter ou faire...

    Si quelqu'un peut m'aider..


    Minimus.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/06/2011, 13h38
  2. [Conception]Rendre un champ dependant d'un autre
    Par raph07 dans le forum Modélisation
    Réponses: 1
    Dernier message: 14/04/2007, 23h55
  3. Réponses: 2
    Dernier message: 05/04/2007, 15h52
  4. [Concept][Définition] Sérialisation
    Par darkbob dans le forum Général Java
    Réponses: 4
    Dernier message: 02/01/2006, 10h35
  5. [Concept][Sérialisation] XML ou serializable
    Par christopheJ dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 03/06/2004, 13h11

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