Ler e gravar objetos com Xstream

1 resposta
java
rafael_moreira1

Estou com o seguinte código gravando Objeto Produto e Historico . sendo a relação deone to many de produto para histórico, em um xml. como poderia lê lo. estou ganhando uma exception .

Abaixo segue o código:

public static void main(String[] args) throws FileNotFoundException {
	Calendar nov2009 = Calendar.getInstance();
	nov2009.set(2009, 11, 21);
	
	Calendar dez2009 = Calendar.getInstance();
	dez2009.set(2009, 12, 21);
	
	Calendar jan2010 = Calendar.getInstance();
	jan2010.set(2010, 01, 21);
	
	Calendar fev2010 = Calendar.getInstance();
	fev2010.set(2010, 01, 21);
	// DateFormat df = new DateFormat();
//		DateFormat formatador = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
//		System.out.println(formatador.format(dez2009.getTime()));
	
	
	XStream xstream = new XStream(new DomDriver());
	xstream.alias("produto", Produto.class);
	xstream.alias("historico", Historico.class);
//		xstream.aliasAttribute(Produto.class, "codigo", "codigo");

	Historico mes1 = new Historico();
	mes1.setMesesHistoricos(nov2009.getTime());
	mes1.setQuantidade(6735);
	
	Historico mes2 = new Historico();
	mes2.setMesesHistoricos(dez2009.getTime());
	mes2.setQuantidade(5940);
	
	Historico mes3 = new Historico();
	mes3.setMesesHistoricos(jan2010.getTime());
	mes3.setQuantidade(4824);
	
	Historico mes4 = new Historico();
	mes4.setMesesHistoricos(fev2010.getTime());
	mes4.setQuantidade(7869);
	
	Produto produto1 = new Produto("PAVESINO 800X15", new BigDecimal("2.30"));

	produto1.getHistoricos().add(mes1);
	produto1.getHistoricos().add(mes2);
	produto1.getHistoricos().add(mes3);
	produto1.getHistoricos().add(mes4);
	String xml = xstream.toXML(produto1);
	System.out.println(xml);
	
	List<Produto> carrinho = (List<Produto>) xstream.fromXML(xml);
	
	for (Produto p : carrinho) {
		System.out.println(p.getCodigoProduto());
		System.out.println(p.getDescricao());
		System.out.println(p.getValor());
		System.out.println(p.getHistoricos());
	}

	OutputStream os = new FileOutputStream("./produto2.xml");
	xstream.toXML(produto1, os);

e abaixo segue a saida com a exception:

<produto>
  <descricao>PAVESINO 800X15</descricao>
  <valor>2.30</valor>
  <historicos>
    <historico>
      <mesesHistoricos>2009-12-21 16:09:06.987 UTC</mesesHistoricos>
      <quantidade>6735</quantidade>
    </historico>
    <historico>
      <mesesHistoricos>2010-01-21 16:09:06.989 UTC</mesesHistoricos>
      <quantidade>5940</quantidade>
    </historico>
    <historico>
      <mesesHistoricos>2010-02-21 17:09:06.990 UTC</mesesHistoricos>
      <quantidade>4824</quantidade>
    </historico>
    <historico>
      <mesesHistoricos>2010-02-21 17:09:06.990 UTC</mesesHistoricos>
      <quantidade>7869</quantidade>
    </historico>
  </historicos>
</produto>

Exception in thread “main” java.lang.ClassCastException: br.com.confiabilidade.model.Produto cannot be cast to java.util.List
at SalvandoProduto.main(SalvandoProduto.java:77)

1 Resposta

Jeanderson_Silva

Bom, o erro está dizendo:
Produto não pode ser convertido para List na linha 77.
Então eu acho que a treta é aqui:

Ele deve está retornando um Produto e não uma Lista de Produtos
Eu nunca mexi com isso ai ainda, mas olhando o seu código, bem aqui:

Vc passa UM objeto da Classe Produto, ou seja, não é um array de produtos. Então o erro pela lógica é isso mesmo

Criado 3 de maio de 2017
Ultima resposta 4 de mai. de 2017
Respostas 1
Participantes 2