Bonjour,

Je développe actuellement une application Swing et j'essaie, avec XStream, de déserialiser un fichier XML vers une classe qui implémente le design pattern du singleton (la sérialisation a été faite à partir de cette même classe plus tôt dans l'application): Je procède de la manière suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
XStream xstream = new XStream();
xstream.alias("account", Account.class);
Account acc = Account.getInstance();
acc = (Account) xstream.fromXML(inXML);  //inXML représente le XML contenu dans le fichier à déserialiser
La classe Account définit deux String, login et password. Si j'essaie d'afficher le login de l'object 'acc' juste après (cad: dans la même méthode), tout roule:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
System.out.println("Login: " + acc.getLogin);
>>> Login: MonLogin
Cependant, si je souhaite accéder à un champ de cet objet à partir d'une autre classe, ceux-ci sont vides:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Account acc = Account.getInstance();
System.out.println("Login: " + acc.getLogin);>>> Login:
J'ai remarqué que si j'utilise explicitement les setters de la classe Account au lieu de caster directement 'xstream.fromXML(inXML)' vers Account, je peux accéder aux champs de Account à travers toute l'application.

Etant donné que j'ai absolument besoin de n'avoir qu'une seule instance de Account, la seule solution que j'entrevois serait de déclarer une classe similaire à Account, sans que celle-ci n'implémente le pattern Singleton et de renseigner explicitement les champs de Account par le biais de ses setters:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Account2 acc2 = (Account2) xstream.fromXML(inXML);
Account acc = Account.getInstance();
acc.setLogin(acc2.getLogin());
Mais je ne trouve pas cette solution vraiment très propre. Pourquoi le cast ne fonctionne pas comme il le devrait ? Me faut-il utiliser une autre API que XStream ?

Merci,
Tom