Bonjour,

Je suis entrain de mettre en place un système de serialisation et j'ai quelques problemes lors de la deserialisation.

Lorsque je serialise mon objet j'enregistre une ArrayList d'object de type MesureAttenuante. Cependant chaque objet n'est pas directement du type MesureAttenuante mais en hérite (car j'ai un systeme de plugin derrière donc de cette manière je n'ai pas besoin de connaitre le code de chaque classe, le code de ma classe abstraite suffit).

La serialisation de mon objet ne pose pas de probleme cependant lorsque j'essaye de le déserialiser j'ai une erreur ClassNotFound

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
java.lang.ClassNotFoundException: plugin.mesureAttenuante.mehari.MesureFirewall
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at java.io.ObjectInputStream.resolveClass(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at mehari.ActionLiee.readObject(ActionLiee.java:173)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
	at java.io.ObjectInputStream.readSerialData(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at mehari.ActionLiee.load(ActionLiee.java:128)
	at test.Test.main(Test.java:58)
Exception in thread "main" java.lang.NullPointerException
	at test.Test.main(Test.java:59)
Au début je me suis dit que c'etait normal car je n'avais pas la classe MesureFirewall (qui herite de MesureAttenuante). Donc j'ai redéfini la fontion readObject comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
	private void readObject(java.io.ObjectInputStream in) throws IOException,ClassNotFoundException {
		in.defaultReadObject();
		int nb = in.readInt();
		lesMesuresAttenuantes = new ArrayList<MesureAttenuante>();
		for(int i=0;i<nb;i++){
			MesureAttenuante ma = (MesureAttenuante) in.readObject();
			lesMesuresAttenuantes.add(ma);
		}
De cette manière je pensais casté mon object selon ma classe MesureAttenuante mais apparemment cela ne change rien.

Quelqu'un saurait comme je pourrais caster les objets que je lis comme objets MesureAttenuante et non plus comme objet héritant de MesureAttenuante ?