Bom dia!
Não consegui entender o porquê tivemos que formatar o XML com alias, aliasField e useAttributeFor na deserialização visto que o código de origem já apresenta as características desejadas como nome da classe, descrição e codigo.
Código da dúvida:
String xmlDeOrigem = "<compra>\n"+
" <id>15</id>\n"+
" <produtos>\n"+
" <produto codigo=\"1587\">\n"+
" <nome>geladeira</nome>\n"+
" <preco>1000.0</preco>\n"+
" <descrição>geladeira duas portas</descrição>\n"+
" </produto>\n"+
" <produto codigo=\"1588\">\n"+
" <nome>ferro de passar</nome>\n"+
" <preco>100.0</preco>\n"+
" <descrição>ferro com vaporizador</descrição>\n"+
" </produto>\n"+
" </produtos>\n"+
"</compra>";
XStream xstream = new XStream();
xstream.alias("compra", Compra.class);
xstream.alias("produto", Produto.class);
xstream.aliasField("descrição", Produto.class, "descricao");
xstream.useAttributeFor(Produto.class, "codigo");
Obrigado!