Tenho o seguinte XML de exemplo que tenho interesse de tratar utilizando o XStream:
Obs: Não fiquei fazendo alias para os nomes dos tipos e colunas, é bem genérico para reproduzir a situação
<Elemento>
<A>4DAF2BBB410393C0</A>
<b>
<a>valorA</a>
<b>valorB</b>
<c>valorC</c>
<d>valorD</d>
</b>
<TipoC>
<x>2</x>
<y>Y</y>
<y>T</y>
<y>N</y>
<y>B</y>
<z>7</z>
<z>7</z>
<z>7</z>
<z>7</z>
<w>H</w>
</TipoC>
<TipoC>
<x>4</x>
<y>Y</y>
<y>T</y>
<y>N</y>
<y>B</y>
<z>7</z>
<z>7</z>
<z>7</z>
<z>7</z>
<w>O</w>
</TipoC>
</Elemento>
Para trata-lo. Criei os beans abaixo:
[code]package guj;
public class Elemento {
private String A;
private TipoB b;
private TipoC[] c;
//getters and setters
}
[/code]
[code]package guj;
public class TipoB {
private String a;
private String b;
private String c;
private String d;
//getters and setters
}
[/code]
[code]package guj;
public class TipoC {
private String x;
private String[] y;
private String[] z;
private String w;
//getters and setters
}
[/code]
E gerei a classe principal de teste conforme abaixo:
[code]package guj;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class Test {
public static void main(String[] args) {
XStream xstream = new XStream(new DomDriver());
// testar criação
TipoC c1 = new TipoC();
TipoC c2 = new TipoC();
TipoB b = new TipoB();
Elemento elem = new Elemento();
// TipoC1
c1.setX("2");
c1.setY(new String[]{"Y","T","N","B"});
c1.setZ(new String[]{"7","7","7","7"});
c1.setW("H");
//TipoC2
c2.setX("4");
c2.setY(new String[]{"Y","T","N","B"});
c2.setZ(new String[]{"7","7","7","7"});
c2.setW("O");
b.setA("valorA");
b.setB("valorB");
b.setC("valorC");
b.setD("valorD");
elem.setA("4DAF2BBB410393C0");
elem.setB(b);
elem.setC(new TipoC[]{c1, c2});
System.out.println(xstream.toXML(elem));
}
}
[/code]
O resultado foi o seguinte XML:
<guj.Elemento>
<A>4DAF2BBB410393C0</A>
<b>
<a>valorA</a>
<b>valorB</b>
<c>valorC</c>
<d>valorD</d>
</b>
<c>
<guj.TipoC>
<x>2</x>
<y>
<string>Y</string>
<string>T</string>
<string>N</string>
<string>B</string>
</y>
<z>
<string>7</string>
<string>7</string>
<string>7</string>
<string>7</string>
</z>
<w>H</w>
</guj.TipoC>
<guj.TipoC>
<x>4</x>
<y>
<string>Y</string>
<string>T</string>
<string>N</string>
<string>B</string>
</y>
<z>
<string>7</string>
<string>7</string>
<string>7</string>
<string>7</string>
</z>
<w>O</w>
</guj.TipoC>
</c>
</guj.Elemento>
Notem que comparando com a idéia original, ele falhou na geração dos arrays. A lib criou uma Tag “C” para colocar os elementos C dentro dele quando na verdade cada C deveria vir diretamente abaixo sem a necessidade de outra TAG.
O atributo Y e Z do TipoC também sofrem problema semelhante. Ele abre a tag respectiva e coloca cada String dentro dela. Eu queria que fosse feito diversas tags com o mesmo nome.
Alguém sabe o que fiz errado. Será necessário o uso dos “converters” para essa situação?
Agradeço qualquer ajuda.