2010-09-28 3 views
0

J'ai une instance de XStream dans laquelle j'ai enregistré des convertisseurs et fait une configuration comme je veux que les choses fonctionnent.Comment accéder à l'objet XStream à l'intérieur du convertisseur

XStream xstream = new XStream(); 
xstream.registerConverter(new SomeConverter()); 
(...) 

Et j'ai une classe SomeConverter qui implémente Converter.

Pour une raison quelconque, j'aimerais accéder à l'objet xstream dans le code du convertisseur.

Existe-t-il un moyen de l'obtenir à partir d'une méthode ou d'un attribut de conversion ou de l'obtenir ailleurs?

Répondre

2

Le convertisseur est juste une interface, donc il n'y a rien qui vous empêche de changer le constructeur de SomeConverter pour prendre dans l'objet XStream. Ensuite, vous auriez accès à cela avec vos méthodes implémentées. Par exemple.

XStream xstream = new XStream(); 
xstream.registerConverter(new SomeConverter(xstream)); 
1

Je crois que les convertisseurs XStream ne stockent pas de contexte à l'objet xstream. Cela aide avec le couplage. Bien sûr, une option pourrait être de déclarer un argument constructeur et de lui passer l'objet xstream. Mais je pense qu'une meilleure solution serait d'obtenir les informations sur tout ce dont vous avez besoin de l'objet Xstream et de le transmettre au convertisseur personnalisé, afin de maintenir un couplage lâche entre XStream et ses convertisseurs

+0

Je ne avez pas besoin de l'objet xstream. Je veux changer la configuration d'alias par défaut xstream dans le convertisseur à la volée. Le xstream sait que c'est un convertisseur enregistré, je pensais qu'il y aurait un moyen pour un convertisseur de connaître l'objet XStream qui l'appelait d'une manière ou d'une autre. – pablosaraiva

+0

J'ai eu un problème similaire, la meilleure façon que j'ai pu trouver était d'utiliser le ClassAliasingMapper que XStream prend en argument pour générer des alias dynamiques. Mais, bien sûr, vous devez avoir un mappage bi-directionnel unique entre cartes et classes. Peut-être que cela pourrait vous aider – ajayr

Questions connexes