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

Estou com dúvida no curso de XStream: Trabalhando com XML, no exercício do capítulo Conversores complexos.

O código abaixo está correto, funciona! Porém fiquei com dúvida quanto ao funcionamento do Xstream quando utiliza um conversor: mesmo delegando(context.convertAnother(compra.getProdutos());) no método "marshal" a conversão da coleção, ele ignora as configurações externas de coleção implícita, por exemplo. Não deveria ser obedecido e a própria delegação colocar as tags da coleção se necessário? Qual a lógica? Tudo que estiver acessível diretamente na classe convertida tem as configurações que impactariam ignoradas, mas de 1 nível abaixo pra frente não?

Obrigado

@Override
    public Object unmarshal(HierarchicalStreamReader reader,
            UnmarshallingContext context) {
        String estilo = reader.getAttribute("estilo");

        reader.moveDown();
        String nomeId = reader.getNodeName();
        String valorId = reader.getValue();
        reader.moveUp();

        reader.moveDown();
        String fornecedor = reader.getValue();
        reader.moveUp();

        reader.moveDown();
        String nomeTagEndereco = reader.getNodeName();
        reader.moveDown();
        String linha1 = reader.getValue();
        reader.moveUp();
        reader.moveDown();
        String linha2 = reader.getValue();
        reader.moveUp();
        reader.moveUp();

        List<Produto> produtos = new ArrayList<>();
        int id = Integer.parseInt(valorId);
        Compra compra = new Compra(id, produtos);

        reader.moveDown();
        List<Produto> produtosConvertidos = (List<Produto>) context.convertAnother(compra, List.class);
        produtos.addAll(produtosConvertidos);
        reader.moveUp();

        return compra;
    }
1 resposta
solução!

É isso mesmo Pablo, se nós vamos delegar, não estamos passando para o delegador o campo, mas sim o valor, por isso ele não tem como saber qual era o campo original e as anotações que possam estar presentes lá, infelizmente.

Abraço