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

API standards et tierces Java Discussion :

[XStream] Désérialisation personnalisée


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut [XStream] Désérialisation personnalisée
    Salut,

    J'ai une classe qui contient plusieurs attributs, dont 1 dont le type réel peut ne pas être présent dans le Class-Loader.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class UneClasse {
        private String name;
        private UneInterface value;
        ...
    }
    Le type réel de l'objet référencé par value peut être du type UnTypeImplementantUneInterface, et cette classe peut ne pas être accessible au moment de la désérialisation (imaginons que ce type soit dans un plugin, et que le plugin ait été désinstallé).

    Donc, ce que je voudrais, c'est que si la désérialisation de value s'est bien passée, très bien, il garde sa valeur, sinon, on lui donne une valeur par défaut.

    Ça je sais le faire avec readResolve(), dans le cas de la sérialisation binaire, implantée dans Java.
    Sauf que là, je veux de la sérialisation XML avec XStream, et je n'ai pas trouvé l'équivalent.

    J'ai bien trouvé la méthode registerConverter, mais je ne vois pas en quoi on peut garantir que c'est ce Converter qui sera utilisé, et pas celui par défaut.
    Dans le début de la documentation, ils parlent d'une méthode changeConverter (ils donnent même un exemple)... Mais cette méthode n'existe pas lol...

    Donc voilà mon problème...

    Merci d'avance si vous avez des pistes

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Je pense qu'une solution pourrait être de le déclarer transient, et de stocker dans un Object[] UneClasse, suivie de l'instance de value.

    [UneClasse, sa_valeur, UneClasse, sa_valeur, UneClasse, sa_valeur...]
    Comme ça quand on désérialise une classe par une classe, on détecte les ClassNotFoundException qui ne gènent pas la création de UneClasse...

    Ça rendrait indépendant de la méthode de sérialisation/désérialisation...

    Qu'en pensez-vous?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    Salut,

    Je ne sais pas si ça sera possible car XStream va toujours essayé de trouver la classe d'un objet avant de le désérialiser.
    En fait, quand tu met un Converter perso, XStream va lui demander si il est capable de s'occuper de telle classe via la méthode canConvert(Class type). Si tu met Object, il va mettre en attribut la classe.

    En tout cas, à ta place j'essaierais de modifier le fichier XML avant de le fournir à XStream.

Discussions similaires

  1. [XStream] Désérialiser une collection
    Par Manu300886 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 03/12/2013, 19h55
  2. [xStream] Désérialisation de collection
    Par nims dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/10/2010, 13h11
  3. [Xstream] Problème désérialisation avec xstream et les annotations
    Par riderfun dans le forum Persistance des données
    Réponses: 1
    Dernier message: 26/04/2010, 17h11
  4. [XStream] NullPointerException lors de la désérialisation
    Par debous dans le forum Persistance des données
    Réponses: 0
    Dernier message: 07/04/2009, 15h50
  5. Annotations - Un cas d'application pour la désérialisation avec XStream
    Par bobuse dans le forum Persistance des données
    Réponses: 3
    Dernier message: 04/07/2007, 12h35

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