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 :

[Sérialisation] Exception et serialVersionUID


Sujet :

Persistance des données Java

  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut [Sérialisation] Exception et serialVersionUID
    Bonsoir.

    Oui monsieur le Juge je suis allé voir dans la FAQ, dans Google, dans les tutos... Oui j'ai lu qu'il fallait définir un long de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            static final long serialVersionUID = 42L;
    Mais moi y'en a être blonde... Ou moi y'en a pas avoir de cerveau mais moi y'en a toujours avoir erreur.

    Hum... En français ca donne ceci. J'avais une erreur:
    [serial] serializable class NutriCal.Repas has no definition of serialVersionUID
    Depuis mon static final long... j'ai ceci en compilant :
    Exception in thread "main" java.io.InvalidClassException: nutrical.Aliment; local class incompatible: stream classdesc serialVersionUID = 985974763921291337, local class serialVersionUID = 42
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at java.util.ArrayList.readObject(ArrayList.java:593)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1846)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at nutrical.IOData.readDesAliments(IOData.java:40)
    at nutrical.Instanciation.traitement(Instanciation.java:35)
    at nutrical.Application.main(Application.java:79)
    Pourquoi ca marche pas? T.T
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  2. #2
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    J'ai lu ceci mais je ne comprends pas le
    tu as modifié ta classe entre la sérialization et la désérialization.
    comment ca modifier la classe???
    on ne peut que modifier des objets non?

    Le pire c'est que NetBeans me dit que toutes mes classes sont valides T.T

    si celà peut vous aider, je vous mets le code de mon main...enfin de main de ma classe Application
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
        public static void main(String[] args) throws IOException, ClassNotFoundException {
    	ArrayList<Famille> desFamilles = new ArrayList<Famille>();
            ArrayList<Aliment> desAliments = new ArrayList<Aliment>();
            ArrayList<Plat> desPlats = new ArrayList<Plat>();
            ArrayList<Constituer> desConstitutions = new ArrayList<Constituer>();
            ArrayList<Type> desTypes = new ArrayList<Type>();
            ArrayList<Repas> desRepas = new ArrayList<Repas>();
            ArrayList<Personne> desPersonnes = new ArrayList<Personne>();
            IOData io = new IOData("D:/Scolarite/STS2/AP/AP4_Objet/NutriCal/src/nutrical/");
    	try {
    		desFamilles = io.readDesFamilles();
    	}catch (NullPointerException e) {
    		/*Famille00*/desFamilles.add(new Famille("Boisson"));
    		/*Famille01*/desFamilles.add(new Famille("Dessert"));
    		/*Famille02*/desFamilles.add(new Famille("Féculent"));
    		/*Famille03*/desFamilles.add(new Famille("Fromage"));
    		/*Famille04*/desFamilles.add(new Famille("Fruit"));
    		/*Famille05*/desFamilles.add(new Famille("Laitage"));
    		/*Famille06*/desFamilles.add(new Famille("Légume"));
    		/*Famille07*/desFamilles.add(new Famille("Oeuf"));
    		/*Famille08*/desFamilles.add(new Famille("Poisson)"));
    		/*Famille09*/desFamilles.add(new Famille("Sauce"));
    		/*Famille10*/desFamilles.add(new Famille("Viande"));
    		/*Famille11*/desFamilles.add(new Famille("Viennoiserie"));
    	}
    	try {
    		desAliments = io.readDesAliments();
    	}catch (NullPointerException e) {
    		/*Aliment00*/desAliments.add(new Aliment("Batavia",false,25,desFamilles.get(6))); //Légume
    		/*Aliment01*/desAliments.add(new Aliment("Pomme",false,52,desFamilles.get(4))); //Fruit
    		/*Aliment02*/desAliments.add(new Aliment("Pain (baguette)",false,283,desFamilles.get(2))); //Féculent
    		/*Aliment03*/desAliments.add(new Aliment("Pain au chocolat (unité)",true,280,desFamilles.get(11))); //Viennoiserie
    		/*Aliment04*/desAliments.add(new Aliment("Tomate",false,20,desFamilles.get(4))); //Fruit
    		/*Aliment05*/desAliments.add(new Aliment("Croissant (unité)",true,120,desFamilles.get(11))); //Viennoiserie
    		/*Aliment06*/desAliments.add(new Aliment("Haricots verts",false,40,desFamilles.get(6))); //Légume
    		/*Aliment07*/desAliments.add(new Aliment("Yaourt sveltesse citron",true,52,desFamilles.get(5))); //Laitage
    		/*Aliment08*/desAliments.add(new Aliment("Pain de seigle",false,231,desFamilles.get(2))); //Féculent
     		/*Aliment09*/desAliments.add(new Aliment("Pâtes (cuites)",false,90,desFamilles.get(2))); //Féculent
    		/*Aliment10*/desAliments.add(new Aliment("Fraise",false,36,desFamilles.get(4))); //Fruit
    		/*Aliment11*/desAliments.add(new Aliment("Jus d'orange",false,42,desFamilles.get(0))); //Boisson
    		/*Aliment12*/desAliments.add(new Aliment("Chocolat blanc",false,533,desFamilles.get(1))); //Dessert
    		/*Aliment13*/desAliments.add(new Aliment("Beurre salée",false,760,desFamilles.get(5))); //Laitage
    		/*Aliment14*/desAliments.add(new Aliment("Oeuf de poule (55g)",true,77,desFamilles.get(7))); //Oeuf
    		/*Aliment15*/desAliments.add(new Aliment("Lardons",false,290,desFamilles.get(10))); //Viande
    		/*Aliment16*/desAliments.add(new Aliment("Surimi",false,113,desFamilles.get(8))); //Poisson
    		/*Aliment17*/desAliments.add(new Aliment("Mayonnaise",false,720,desFamilles.get(9))); //Sauce
    		/*Aliment18*/desAliments.add(new Aliment("Gruyère",false,392,desFamilles.get(3))); //Fromage
    		/*Aliment19*/desAliments.add(new Aliment("Baba au rhum",true,324,desFamilles.get(1))); //Dessert
    		/*Aliment20*/desAliments.add(new Aliment("Eau Vittel",false,0,desFamilles.get(0))); //Boisson
     
    		desFamilles.get(0).addUnAliment(desAliments.get(11));
    		desFamilles.get(0).addUnAliment(desAliments.get(20)); //Boisson Jus d'orange Eau Vittel
    		desFamilles.get(1).addUnAliment(desAliments.get(19));
    		desFamilles.get(1).addUnAliment(desAliments.get(12)); //Dessert Baba au rhum Chocolat Blanc
    		desFamilles.get(2).addUnAliment(desAliments.get(2));
    		desFamilles.get(2).addUnAliment(desAliments.get(8));
    		desFamilles.get(2).addUnAliment(desAliments.get(9));  //Féculent Pain (baguette) Pain de seigle Pâtes (cuites)
    		desFamilles.get(3).addUnAliment(desAliments.get(18)); //Fromage Gruyère
    		desFamilles.get(4).addUnAliment(desAliments.get(1));
    		desFamilles.get(4).addUnAliment(desAliments.get(4));
    		desFamilles.get(4).addUnAliment(desAliments.get(10)); //Fruit Pomme Tomate Fraise
    		desFamilles.get(5).addUnAliment(desAliments.get(13));
    		desFamilles.get(5).addUnAliment(desAliments.get(7)); //Laitage Beurre salé Yaourt sveltesse citron
    		desFamilles.get(6).addUnAliment(desAliments.get(0));
    		desFamilles.get(6).addUnAliment(desAliments.get(6)); //Légume Batavia Haricots verts
    		desFamilles.get(7).addUnAliment(desAliments.get(14)); //Oeuf Oeuf de poule
    		desFamilles.get(8).addUnAliment(desAliments.get(16)); //Poisson Surimi
    		desFamilles.get(9).addUnAliment(desAliments.get(17)); //Sauce Mayonaise
    		desFamilles.get(10).addUnAliment(desAliments.get(3));
    		desFamilles.get(10).addUnAliment(desAliments.get(5)); //Viennoiserie Pain au chocolat Croissant
    	}
    	try {
    		desPlats = io.readDesPlats();
    	}catch (NullPointerException e) {
    		/*Plat00*/desPlats.add(new Plat("Entrée"));
    		/*Plat01*/desPlats.add(new Plat("Plat de résistance"));
    		/*Plat02*/desPlats.add(new Plat("Fromage"));
    		/*Plat03*/desPlats.add(new Plat("Dessert"));
    		/*Plat04*/desPlats.add(new Plat("Boisson"));
    		/*Plat05*/desPlats.add(new Plat("Plateau"));
    		/*Plat06*/desPlats.add(new Plat("Boisson"));
    		/*Plat07*/desPlats.add(new Plat("Collation"));
    	}
    	try {
    		desConstitutions = io.readDesConstitutions();
    	}catch (NullPointerException e) {
    		/*Constituer00*/desConstitutions.add(new Constituer(desPlats.get(0),desAliments.get(16),50)); //Entrée Surimi
    		/*Constituer01*/desConstitutions.add(new Constituer(desPlats.get(0),desAliments.get(17),15)); //Entrée Mayonnaise
    		/*Constituer02*/desConstitutions.add(new Constituer(desPlats.get(1),desAliments.get(9),100)); //Plat de résistance Pâtes
    		/*Constituer03*/desConstitutions.add(new Constituer(desPlats.get(1),desAliments.get(15),30)); //Plat de résistance Lardons
    		/*Constituer04*/desConstitutions.add(new Constituer(desPlats.get(1),desAliments.get(14),1));  //Plat de résistance Oeuf
    		/*Constituer05*/desConstitutions.add(new Constituer(desPlats.get(2),desAliments.get(18),30)); //Fromage Gruyère
    		/*Constituer06*/desConstitutions.add(new Constituer(desPlats.get(3),desAliments.get(19),1));  //Dessert Baba au Rhum
    		/*Constituer07*/desConstitutions.add(new Constituer(desPlats.get(4),desAliments.get(20),20)); //Boisson Vitel
    		/*Constituer08*/desConstitutions.add(new Constituer(desPlats.get(5),desAliments.get(3),2));   //Plateau Pain au chocolat
    		/*Constituer09*/desConstitutions.add(new Constituer(desPlats.get(6),desAliments.get(11),20)); //Boisson Jus d'orange
    		/*Constituer10*/desConstitutions.add(new Constituer(desPlats.get(7),desAliments.get(1),1));   //Encas Pomme
     
    		desPlats.get(0).addUneConstitution(desConstitutions.get(0)); 
    		desPlats.get(0).addUneConstitution(desConstitutions.get(1));  //Entrée Surimi Mayonnaise
    		desPlats.get(1).addUneConstitution(desConstitutions.get(2));
    		desPlats.get(1).addUneConstitution(desConstitutions.get(3));
    		desPlats.get(1).addUneConstitution(desConstitutions.get(4));  //Plat de résistance Pâtes Lardon Oeuf
    		desPlats.get(2).addUneConstitution(desConstitutions.get(5));  //Fromage Gruyère
    		desPlats.get(3).addUneConstitution(desConstitutions.get(6));  //Dessert Baba au rhum
    		desPlats.get(4).addUneConstitution(desConstitutions.get(7));  //Boisson Vitel
    		desPlats.get(5).addUneConstitution(desConstitutions.get(8));  //Plateau Pain au chocolat
    		desPlats.get(6).addUneConstitution(desConstitutions.get(9));  //Boisson Jus d'orange
    		desPlats.get(7).addUneConstitution(desConstitutions.get(10)); //Collation Pomme
    	}
    	try {
    		desTypes = io.readDesTypes();
    	} catch (NullPointerException e) {
    		/*Type00*/desTypes.add(new Type("Petit Déjeuner"));
    		/*Type01*/desTypes.add(new Type("Déjeuner"));
    		/*Type02*/desTypes.add(new Type("Encas"));
    		/*Type03*/desTypes.add(new Type("Diner"));
    		/*Type04*/desTypes.add(new Type("Souper"));
    		}
    		try {
    		desRepas = io.readDesRepas();
    	} catch (NullPointerException e) {
    		/*Repas00*/desRepas.add(new Repas("21/05/2008",desTypes.get(1))); //Déjeuner
    		/*Repas01*/desRepas.add(new Repas("21/05/2008",desTypes.get(0))); //Petit Déjeuner
    		/*Repas02*/desRepas.add(new Repas("21/05/2008",desTypes.get(2))); //Encas
     
    		desRepas.get(0).addUnIRepas(desPlats.get(0));
    		desRepas.get(0).addUnIRepas(desPlats.get(1));
    		desRepas.get(0).addUnIRepas(desPlats.get(2));
    		desRepas.get(0).addUnIRepas(desPlats.get(3));
    		desRepas.get(0).addUnIRepas(desPlats.get(4));  //Déjeuner Entrée Plat de résistance Fromage Dessert Boisson
    		desRepas.get(1).addUnIRepas(desPlats.get(5));
    		desRepas.get(1).addUnIRepas(desPlats.get(6));  //Petit Déjeuner Plateau Boisson
    		desRepas.get(2).addUnIRepas(desPlats.get(7));  //Encas Collation
    	}
    	try {
    		desPersonnes = io.readDesPersonnes();
    	} catch (NullPointerException e) {
    		/*Personne00*/desPersonnes.add(new Personne("Nyna"));
    		desPersonnes.get(0).addUnIRepas(desRepas.get(0));
    		desPersonnes.get(0).addUnIRepas(desRepas.get(1));
    		desPersonnes.get(0).addUnIRepas(desRepas.get(2));
    	}
    	io.writeDesAliments(desAliments);
    	io.writeDesPlats(desPlats);
    	io.writeDesConstitutions(desConstitutions);
    	io.writeDesRepas(desRepas);
    	io.writeDesPersonnes(desPersonnes);
            desPersonnes.get(0).getSesIRepas().get(0).calculerCalories();
        }
    Je serais infiniment reconnaissante de toute aide apportée *__*
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Il semblerait que le numéro de version entre ta classe source et ta classe cible soit différent.
    Vérifie que tu as la même valeur de "serialVersionUID" (42) dans les 2.

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    anoooo...
    pour ce qui est de la sérialisation je le définie avec mon long mais opur la désérialisation je fais comment?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  5. #5
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    u_u
    supprimer les fichiers a résolu le problème...
    pourquoi je n'en sais rien...
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  6. #6
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Points : 99
    Points
    99
    Par défaut
    je pense que c'est parce que quand tu avait sérializé tu n'avait pas encore définié de serial.

  7. #7
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    J'ai eu l'erreur alors que les serialVersionIUD devaient être générés automatiquement par java.

    En tout cas, il est vrai que lorsque j'en ai appliqué un, il ne correspondait plus à celui des *.ser
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  8. #8
    Membre éclairé Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Points : 695
    Points
    695
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    J'ai eu l'erreur alors que les serialVersionIUD devaient être générés automatiquement par java.

    En tout cas, il est vrai que lorsque j'en ai appliqué un, il ne correspondait plus à celui des *.ser
    Sérialiser un objet, ça veut dire le créer physiquement.
    Le désérialiser ça veut dire récupérer l'objet tel qu'il était avant la sérialisation.

    Maintenant, quand t'as sérialisé ton objet (donc créé physiquement), t'as utilisé par exemple un serialVersionIUD == 45 (ce champ fais partie de l'objet).
    Ensuite, t'as modifié la classe correspondant à cet objet (serialVersionIUD == 42 maintenant), et en désérialisant pour récupérer cet objet, l'API va vérifier que les deux serialVersionIUD correspondent bien.
    Si c'est pas le cas, ça plante.

    A corriger si ce n'est pas la procédure exacte qui est suivie
    Where is my mind

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/11/2011, 12h25
  2. Exception Sérialisation axis
    Par fatenatwork dans le forum Services Web
    Réponses: 1
    Dernier message: 28/04/2008, 14h10
  3. Exception Sérialisation axis
    Par fatenatwork dans le forum Services Web
    Réponses: 1
    Dernier message: 16/04/2008, 10h55
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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