Duvida Xstream

3 respostas
R

Bom dia galera,esse é o xml q to recebendo:

<venda>
  <id>16</id>
  <itens>
     <produto>JOGO AMERICANO - MADEIRA ENCERADA - 0.45X0.35 M - RETANGULOS</produto>
     <valor>18.5</valor>
  </itens>
  <nomeCliente>ALEX PURY MAZUREC</nomeCliente></venda>

Essas são as classes:

public class Venda {

	Integer id;
	String nomeCliente;
	List<ItemVenda> itens;

Estou recebendo esse erro:

Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: produto : produto

Aparentemente o atributo produto está sendo mapeado como classe,mas n entendi pq.alguem pode ajudar?

3 Respostas

fantomas

Se entendi bem você precisa da classe Produto e não ItemVenda; logo sua linha ficaria assim: List itens;

flws

R

Não fui claro com relação ao problema,na verdade o problema é esse:

Eu tenho esse modelo de classes e preciso passar como XML ,estou usando JAX-RS:

public class Venda {
   	Integer id;
	String nomeCliente;
	List<ItemVenda> itens;
@XmlRootElement(name="item")
public class ItemVenda {
	String produto;
	Double valor;

O xml retornado é esse:

<venda>
  <id>3613</id>
  <itens>
     <produto>CAMINHO DE MESA - LINHA FINA - 1.50X0.40 M - RENDA</produto>
     <valor>157.5</valor></itens>
  <nomeCliente>RAFAEL ROQUE</nomeCliente>
</venda>

Mas eu queria que fosse algo do tipo:

<venda>
  <id>3613</id>
  <itens>
      <item>
       <produto>CAMINHO DE MESA - LINHA FINA - 1.50X0.40 M - RENDA</produto>
       <valor>157.5</valor>
     </item>
</itens>
  <nomeCliente>RAFAEL ROQUE</nomeCliente>
</venda>
fantomas
public class Teste {
	
	private File file = new File("teste.xml");

	private Teste() {
	}

	public Venda load() throws Exception {

		Venda venda = null;

		if (this.file.exists()) {

			FileReader reader = new FileReader(this.file);

			XStream xstream = new XStream();

			venda = (Venda) xstream.fromXML(reader);
		}

		return venda;
	}

	public void save(Venda venda) throws Exception {
		
		if (venda != null) {
			
			FileWriter writer = new FileWriter(this.file);

			XStream xstream = new XStream();

			xstream.alias("item", Item.class);

			xstream.toXML(venda, writer);
		}
	}
	
	public static void main(String[] args) {
		
		Teste teste = new Teste();
		
		Venda venda = new Venda();
		
		venda.setId(1);
		venda.setNomeCliente("CLIENTE 1");
		
		List<Item> itens = new ArrayList<Item>(0);
		
		itens.add(new Item("ABACAXI", 2.25));
		itens.add(new Item("BANANA", 1.50));
		
		venda.setItens(itens);
		
		try {
			teste.save(venda);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
public class Venda {

	Integer id;
	String nomeCliente;
	List<Item> itens;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getNomeCliente() {
		return nomeCliente;
	}
	public void setNomeCliente(String nomeCliente) {
		this.nomeCliente = nomeCliente;
	}
	public List<Item> getItens() {
		return itens;
	}
	public void setItens(List<Item> itens) {
		this.itens = itens;
	}
}
public class Item {
	
		String produto;
		Double valor;
		
		public Item() {
		}
		
		public Item(final String produto, final Double valor) {
			this.produto = produto;
			this.valor = valor;
		}
		
		public String getProduto() {
			return produto;
		}
		public void setProduto(String produto) {
			this.produto = produto;
		}
		public Double getValor() {
			return valor;
		}
		public void setValor(Double valor) {
			this.valor = valor;
		}
}

Evidencia:

<Venda>
  <id>1</id>
  <nomeCliente>CLIENTE 1</nomeCliente>
  <itens>
    <item>
      <produto>ABACAXI</produto>
      <valor>2.25</valor>
    </item>
    <item>
      <produto>BANANA</produto>
      <valor>1.5</valor>
    </item>
  </itens>
</Venda>

Entendi que é isto que você precisa.

flws

Criado 25 de setembro de 2012
Ultima resposta 25 de set. de 2012
Respostas 3
Participantes 2