Olá pessoal. O código abaixo não funciona quando tem mais de uma tag com o mesmo nome, sendo que isso é comum em arquivos XML. Eu fiz a leitura pelo xstream.alias, xstream.aliasField e xstream.useAttributeFor ao invés de usar Unmarshall com os moveDown e moveUp.
Segue meus codigos e, no final, o erro:
String xmlTeste2 = "<listaProdutos">\n"
+ "<produto codigo=\"1587\">\n"
+ " <nome>geladeira</nome>\n"
+ " <preco>1000.0</preco>\n"
+ " <descrição>geladeira duas portas</descrição>\n"
+ "</produto>"
+ "<produto codigo=\"1588\">\n"
+ " <nome>geladeira</nome>\n"
+ " <preco>1000.0</preco>\n"
+ " <descrição>geladeira duas portas</descrição>\n"
+ "</produto>"
+ "</listaProdutos>";
XStream xstream = new XStream();
xstream.alias("listaProdutos", Produto.class);
xstream.alias("produto", Produto.class);
xstream.useAttributeFor(Produto.class, "codigo");
xstream.alias("nome", Produto.class);
xstream.alias("preco", Produto.class);
xstream.aliasField("descrição", Produto.class, "descricao");
Produto compraTeste2 = (Produto) xstream.fromXML(xmlTeste2);
System.out.println("\n" + compraTeste2.getCodigo());
System.out.println(compraTeste2.getNome());
System.out.println(compraTeste2.getPreco());
System.out.println(compraTeste2.getDescricao());
classe:
public class Produto {
private String listaProdutos;
private String produto;
private String nome;
private double preco;
private String descricao;
private int codigo;
getters e setters...
Erro:
Exception in thread "main" com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$DuplicateFieldException: Duplicate field produto
---- Debugging information ----
field : produto
class : br.com.alura.Produto
required-type : br.com.alura.Produto
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path : /listaProdutos/produto[2]
line number : 7
version : null