2010-03-16 12 views
3

J'utilise XStream pour sérialiser mes objets au format XML. Le xml formaté que je reçois est comme ci-dessous: node1, node2, node 3 sont des attributs de pojo, DetailDollarsconvertisseur personnalisé dans XStream

J'ai l'exigence où je dois calibrer un pourcentage, par exemple 100/25 et ajouter le nouveau nœud à la ceux qui existent Ainsi, la sortie finale devrait être:

<DetailDollars> 
    <node1>100 </node1> 
    <node2>25</node2> 
    <node3>10</node3> 
</DetailDollars> 

J'ai écrit un convertisseur personnalisé et enregistré sur mon objet xstream.

public void marshal(..){ 
     writer.startNode("node4");   
     writer.setValue(getNode1()/ getnode2()); 
     writer.endNode(); 
} 

Mais, le flux xml je reçois a seulement le nouveau nœud:

<DetailDollars> 
    <node4>4</node4> 
</DetailDollars> 

Je ne suis pas sûr api xstream me obtenir le format souhaité. pourriez-vous s'il vous plaît m'aider avec cela.

Répondre

4

Voici le convertisseur dont vous avez besoin:

public class DetailDollarsConverter extends ReflectionConverter { 

public DetailDollarsConverter(Mapper mapper, 
     ReflectionProvider reflectionProvider) { 
    super(mapper, reflectionProvider); 
} 

@Override 
public void marshal(Object obj, HierarchicalStreamWriter writer, 
     MarshallingContext context) { 
    super.marshal(obj,writer,context); 

    DetailDollars dl = (DetailDollars) obj; 

    writer.startNode("node4"); 
    writer.setValue(Double.toString(dl.getNode1()/dl.getNode2())); 
    writer.endNode(); 
} 

@Override 
public Object unmarshal(HierarchicalStreamReader reader, 
     UnmarshallingContext context) { 
    return super.unmarshal(reader,context); 
} 

@SuppressWarnings("unchecked") 
@Override 
public boolean canConvert(Class clazz) { 
    return clazz.equals(DetailDollars.class); 
} 

}

+0

Merci bourgeon. Cela marche. –

+0

De rien! – pablosaraiva