Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

XStream - setMode

Olá, no meu código os seguintes comandos estão retornando a mesma sintaxe:

XStream.XPATH_RELATIVE_REFERENCES
XStream.XPATH_ABSOLUTE_REFERENCES
XStream.NO_REFERENCES

Todos estão funcionando como se fossem "NO_REFERENCES"

Alguém sabe o que pode estar acontecendo?

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.thoughtworks.xstream.XStream;

public class CompraTest2 {

    @Test
    public void CompraXML() {

        String xmlEsperado =
            "<compra id=\"15\">\n"+
            "  <produtos>\n"+
            "    <produto codigo=\"1587\">\n"+
            "      <nome>armario</nome>\n"+
            "      <preco>1500.0</preco>\n"+
            "      <descrição>armario duas portas</descrição>\n"+
            "    </produto>\n"+
            "    <produto codigo=\"1587\">\n"+
            "      <nome>armario</nome>\n"+
            "      <preco>1500.0</preco>\n"+
            "      <descrição>armario duas portas</descrição>\n"+
            "    </produto>\n"+
            "  </produtos>\n"+            
            "</compra>";

        List<Produto> lista = new ArrayList<>();
        lista.add(new Produto("armario", 1500.0, "armario duas portas", 1587));
        lista.add(new Produto("armario", 1500.0, "armario duas portas", 1587));
        Compra compra = new Compra(15, lista);

        XStream xstream = new XStream();
        xstream.setMode(XStream.NO_REFERENCES);
        xstream.alias("produto", Produto.class);
        xstream.alias("compra", Compra.class);
        xstream.aliasField("descrição", Produto.class,"descricao");
        xstream.useAttributeFor(Produto.class, "codigo");
        xstream.useAttributeFor(Compra.class, "id");

        String xmlGerado = xstream.toXML(compra);

        assertEquals(xmlEsperado,xmlGerado);

    }


}
1 resposta
solução!

Já descobri, parece que o "toXML" do XStream compara os objetos através de posições de memória e não do método "equals";

Assim funciona:

Produto produto = new Produto("armario", 1500.0, "armario duas portas", 1587);
lista.add(produto);
lista.add(produto);