eu consegui criar o XML como eu queria usando Converter
[code]public class Conversor implements Converter {
public boolean canConvert(Class classe) {
if(classe.getGenericSuperclass().equals(Quadrado.class))
return true;
return false;
}
public void marshal(Object objeto, HierarchicalStreamWriter escritor,
MarshallingContext contexto) {
escritor.setValue(objeto.toString());
}[/code]
o resultado fica assim:
<list>
<Pe>0,0</Pe>
<A>-3,0</A>
<F>-2,0</F>
<F>-1,0</F>
<F>0,0</F>
<F>1,0</F>
<F>2,0</F>
<A>3,0</A>
<C>1,0</C>
<C>-1,0</C>
<Pa>-4,0</Pa>
<Pa>4,0</Pa>
<Pa>-4,1</Pa>
<Pa>-3,1</Pa>
<Pa>-2,1</Pa>
<Pa>-1,1</Pa>
<Pa>0,1</Pa>
<Pa>1,1</Pa>
<Pa>2,1</Pa>
<Pa>3,1</Pa>
<Pa>4,1</Pa>
<Pa>-4,-1</Pa>
<Pa>-3,-1</Pa>
<Pa>-2,-1</Pa>
<Pa>-1,-1</Pa>
<Pa>0,-1</Pa>
<Pa>1,-1</Pa>
<Pa>2,-1</Pa>
<Pa>3,-1</Pa>
<Pa>4,-1</Pa>
</list>
O problema é pra desfazer o processo! eu n consigo, por exemplo, pegar a tag 0,0 e transformar em uma instancia da classe Personagem e, em seguida, instanciar a classe Alvo apartir da tag -3,0.
Como criar instancias de classes q podem variar? Uma hora eu preciso que o metodo me retorne um personagem, outra hora um alvo, dpois uma caixa, parede, etc…
No tutorial do site do XStream ele ensina a usar o metodo unmarshal, mas a classe a instanciar é fixa (Person).
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
Person person = new Person();
reader.moveDown();
person.setName(reader.getValue());
reader.moveUp();
return person;
}