Salut,

Il se trouve que j'ai une classe qui doit être sérialisée (dans une application jsf) seulement la classe en question possède des attributs dont le type n'est pas sérialisable, j'entend par la que la sérialisation de cet objet serait vraiment trop lourde car l'objet dépend d'une librairie geoapi et geotools, la serialisation de l'objet entrainerait la sérialisation de toute les dépendances de ce dernier.

exemple voici la classe :

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
public class Layer implements Serializable {
  ...
  private String name;
  private transient Dimension dim;

  ...

  private void writeObject(ObjectOutputStream out) throws IOException {
        // calling the default serialization.
        out.defaultWriteObject();
    }

    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        // calling the default deserialization.
        in.defaultReadObject();
    }

    Object writeReplace() throws ObjectStreamException, CloneNotSupportedException {
        ????
    }

    Object readResolve() throws ObjectStreamException {
        ???
    }
}
comment peut-on réecrire les methodes writeReplace() readResolve() readObject() et writeObject() pour garder la persistance de l'attribut Dimension dim sans utiliser static Dimension dim;.


voici un exemple de la classe Dimension :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
public class Dimension {
 
 private Style style;
 private GeoFeature feature;
 .....
 
}
la classe Dimension ne peut pas être serializable car ça entrainerai la serialisation des classes Style et Geofeature qui ne peuvent pas être modifiés en aucun cas. et on ne veut surtout pas bloquer ces attributs avec transient.


est-il donc possible d'ecrire dans le flux de données un attribut qui est marqué transient dont le type n'est pas un type simple comme String ou int ...etc c'est à dire qui n'est pas sérializable.

merci d'avance !