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:
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
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
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 System.out.println("Login: " + acc.getLogin); >>> Login: MonLogin
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Account acc = Account.getInstance(); System.out.println("Login: " + acc.getLogin);>>> Login:
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:
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 ?
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());
Merci,
Tom
Partager