2010-03-16 2 views
3

Я использую XStream для сериализации формата «Объекты в XML». Отформатированный xml, который я получаю, приведен ниже: node1, node2, node 3 являются атрибутами pojo, DetailDollarscustom converter in XStream

У меня есть требование, где я должен вычислять процент, например 100/25, и добавлять новый узел к существующие. Таким образом, конечный результат должен быть:

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

Я написал пользовательский конвертер и зарегистрирован для своего объекта xstream.

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

Но поток XML я получаю есть только новый узел:

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

Я не уверен, какой XStream апи бы мне получить нужный формат. не могли бы вы помочь мне с этим.

ответ

4

Вот конвертер вам нужно:

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

Благодаря бутон. Это работает. –

+0

Добро пожаловать! – pablosaraiva