XStream - Nao consigo setar dois objetos iguais

2 respostas
blackfalcon

Ola pessoal, estou fazendo o seguinte codigo:

//Produtos da Nota prod prod = new prod(); det[] det = new det[numeroLinhasTabela]; for(int linha = 0; linha < numeroLinhasTabela; linha++){ prod.setcProd(String.valueOf(adicionarProduto.getValueAt(linha, 0))); prod.setxProd(String.valueOf(adicionarProduto.getValueAt(linha, 1))); prod.setNCM(String.valueOf(adicionarProduto.getValueAt(linha, 7))); prod.setCFOP(String.valueOf(adicionarProduto.getValueAt(linha, 6))); prod.setuCom(String.valueOf(adicionarProduto.getValueAt(linha, 2))); prod.setqCom(String.valueOf(adicionarProduto.getValueAt(linha, 3))); prod.setvUnCom(String.valueOf(adicionarProduto.getValueAt(linha, 4))); prod.setvProd(String.valueOf(adicionarProduto.getValueAt(linha, 5))); prod.setuTrib(String.valueOf(adicionarProduto.getValueAt(linha, 2))); prod.setqTrib(String.valueOf(adicionarProduto.getValueAt(linha, 3))); prod.setvUnTrib(String.valueOf(adicionarProduto.getValueAt(linha, 4))); det[linha] = new det(); det[linha].setProd(prod); det[linha].setnItem(String.valueOf(linha+1)); xstream.useAttributeFor(det.class, "nItem"); infNFe.setDet(det[linha]); }

Ele consegue ate jogar o det no xml e tals, porem sempre sai apenas o ultimo item da tabela, ou seja, o nItem sempre fica o numero dois. Eu estou tentando percorrer e jogar um a um, mas ele nao deixa e joga apenas uma vez o ultimo produto, ficando assim:



15015-106

[telefone removido]



1

Produto Teste
00
10203040
UN
2.00
186.00
4.00

UN
2.00
186.00
1




Nao reparem que esteja tudo errado porque eu adicionei uma coluna na tabela, entao os campos estao em lugares diferentes de onde deveriam estar… Mas esse nao eh o problema, como voces veem, antes do ele nao tem o fechamento do nItem 1 porque ele nao jogou no xml…

Como eu faço para fazer isso que estou necessitando?

Abraços

2 Respostas

blackfalcon

Bem pessoal, minha duvida agora eh outra. Estou ate conseguindo adicionar dois objetos, mas estou fazendo assim:

List<det> dete = new ArrayList();
            NFe nfe = new NFe(infNFe);
            for(int linha = 0; linha < numeroLinhasTabela; linha++){
                det det = new det();
                prod prod = new prod();
                    prod.setcProd(String.valueOf(adicionarProduto.getValueAt(linha, 0)));
                    prod.setxProd(String.valueOf(adicionarProduto.getValueAt(linha, 1)));
                    prod.setNCM(String.valueOf(adicionarProduto.getValueAt(linha, 7)));
                    prod.setCFOP(String.valueOf(adicionarProduto.getValueAt(linha, 6)));
                    prod.setuCom(String.valueOf(adicionarProduto.getValueAt(linha, 2)));
                    prod.setqCom(String.valueOf(adicionarProduto.getValueAt(linha, 3)));
                    prod.setvUnCom(String.valueOf(adicionarProduto.getValueAt(linha, 4)));
                    prod.setvProd(String.valueOf(adicionarProduto.getValueAt(linha, 5)));
                    prod.setuTrib(String.valueOf(adicionarProduto.getValueAt(linha, 2)));
                    prod.setqTrib(String.valueOf(adicionarProduto.getValueAt(linha, 3)));
                    prod.setvUnTrib(String.valueOf(adicionarProduto.getValueAt(linha, 4)));
                    det.setProd(prod);
                    det.setnItem(String.valueOf(linha+1));
                    dete.add(det);

                    xstream.useAttributeFor(det.class, "nItem");
                    xstream.alias("det", det.class);
                    
            }
            infNFe.setDet(dete);

Entao, estou jogando tudo pra um List e depois jogo isso para o bean infNFe que tem uma variavel chamada te:

private List te = new ArrayList();

Entao, o meu xml esta ficando assim:


...
...

Até ai ok, antes o det estava jogando errado, mas agora esta tudo certo. O problema eh que tenho que tirar o te dai. Entao tentei usar o Annotation @XStreamImplicit, mas nao funcionou. Entao tentei mudar o nome dele, como vi em alguns exemplos, dessa maneira:

@XStreamImplicit(itemFieldName="part")

Mas tambem nao funcionou. Estou fazendo algo errado ou configurei algo errado?

----------------------
[EDITADO]

Pessoal, 1 minuto apos esse post, eu consegui resolver meu problema dessa maneira:

xstream.addImplicitCollection(infNFe.class, "te");

Porem, gostaria de saber porque nao consigo usar Annotation?

Claro que o melhor eh que esteja funcionando, mas se alguem souber o motivo e puder me explicar, eu ficaria agradecido.

Abraços

V

Amigo tow com esse mesmo problema, como vc solucionou isso?

Criado 10 de janeiro de 2011
Ultima resposta 21 de mar. de 2011
Respostas 2
Participantes 2