Custom XStream Converter

I use XStream to serialize the Objects to XML format. The formatted xml I get is below: node1, node2, node 3 are attributes of pojo, DetailDollars

I have a requirement when I have to calculate the percentage, for example 100/25, and add new nodes to the existing ones. So, the end result should be:

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

I wrote my own converter and registered to my xstream object.

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

But, the xml stream that I get has only a new node:

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

I'm not sure which xstream api will provide me with the desired format. could you help me with this.

+3
source share
1 answer

Here is the converter for you:

 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); } 

}

+4
source

Source: https://habr.com/ru/post/1235128/


All Articles