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!