Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Instanciar valores para o XStream

Ola,

Como eu faço para trazer o valor que está sendo colocado no setId da classe Balanco no momento da Serialização?

@XStreamAlias("balanco")
public class Balanco {

    @XStreamAlias("id") 
    //@XStreamAsAttribute //isso afeta somente para geração de xml. para json, usar useAttributeFor
    private int id;

    private List<Operacao> compras = new ArrayList<Operacao>();
    private List<Operacao> vendas = new ArrayList<Operacao>();

    public void addCompra(Operacao operacao) {
        this.compras.add(operacao);
    }
    public void addVenda(Operacao operacao) {
        this.vendas.add(operacao);
    }
    public List<Operacao> getCompras() {
        return compras;
    }
    public List<Operacao> getVendas() {
        return vendas;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }    

}
@XStreamAlias("operacao")
public class Operacao {

    private String papel;
    private double valor;
    private double quantidade;
    private Date data;

    public Date getData() {
        return data;        
    }
    public void setData(Date date) {
        this.data = date;
    }
    public String getPapel() {
        return papel;
    }
    public void setPapel(String papel) {
        this.papel = papel;
    }
    public double getValor() {
        return valor;
    }
    public void setValor(double valor) {
        this.valor = valor;
    }
    public double getQuantidade() {
        return quantidade;
    }
    public void setQuantidade(double quantidade) {
        this.quantidade = quantidade;
    }

    @Override
    public String toString() {

        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.append("\noperacao  ");
        stringBuilder.append("\npapel: ");
        stringBuilder.append(papel);
        stringBuilder.append("\nvalor: ");
        stringBuilder.append(valor);
        stringBuilder.append("\nquantidade: ");
        stringBuilder.append(quantidade);
        stringBuilder.append("\ndata: ");
        stringBuilder.append(data);    
        stringBuilder.append("\n");

        return stringBuilder.toString();
    }

}
public class XStreamBalancoTester {

    public static void main(String[] args) {

        ArrayList<Object> balancos = new ArrayList<Object>();
        XStreamBalancoTester tester = new XStreamBalancoTester();

        //Serialização
        XStream xstream = new XStream(new DomDriver()); //Stax imprime em linha unica com cabeçalho
        xstream.autodetectAnnotations(true);
        xstream.alias("id", Balanco.class);
        xstream.setMode(XStream.NO_REFERENCES);
        balancos = tester.getBalancos(5);
        String xml = xstream.toXML(balancos);
        System.out.println(xml);

        //Desserialização
        XStream xstreamRead = new XStream(new DomDriver());
        xstreamRead.autodetectAnnotations(true);
        xstreamRead.alias("balanco", Balanco.class);
        xstreamRead.alias("operacao", Operacao.class);
        Balanco balanco2 = (Balanco)xstreamRead.fromXML(xml);

        System.out.println(balanco2.getCompras());
        System.out.println(balanco2.getId());

    }

    private ArrayList<Object> getBalancos(int contador) {

      Operacao o1 = null;
      Balanco b1 = null;
      ArrayList<Object> objectList = new  ArrayList<Object>();
      int contadorr = 1;

      while(contadorr <= contador) {        

      b1 = new Balanco();
      b1.setId(contadorr);
      o1 = new Operacao();
      o1.setPapel("ub22");
      o1.setQuantidade(150);
      o1.setValor(30.62);
      Calendar c1 = Calendar.getInstance();
      o1.setData(c1.getTime());             

      contadorr++;      
      objectList.add(o1);    
      System.out.println(b1.getId());

      }
      return objectList;
    }
}
3 respostas

Pessoal, eu consegui. Mas acredito que deve existir uma forma melhor de compor as classes..

private ArrayList<Object> getBalancos(int contador) {

      Operacao o1 = null;
      Balanco b1 = null;
      ArrayList<Object> objectList = new  ArrayList<Object>();
      int contadorr = 1;

      while(contadorr <= contador) {        

      b1 = new Balanco();
      b1.setId(contadorr);
      o1 = new Operacao();
      o1.setPapel("ub22");
      o1.setQuantidade(150);
      o1.setValor(30.62);
      Calendar c1 = Calendar.getInstance();
      o1.setData(c1.getTime());             

      contadorr++;      
      objectList.add(b1);
      b1.addCompra(o1); // pi b1.addVenda(o1)    
      System.out.println(b1.getId());

      }
      return objectList;
    }
solução!

Eu percebi que o XML cria uma tag . Tem como remover ela?

<list>
  <balanco>
    <id>1</id>
    <compras>
      <operacao>
        <papel>ub22</papel>
        <valor>30.62</valor>
        <quantidade>150.0</quantidade>
        <data>2020-01-27 19:11:09.227 UTC</data>
      </operacao>
    </compras>
    <vendas/>
  </balanco>
  <balanco>
    <id>2</id>
    <compras>
      <operacao>
        <papel>ub22</papel>
        <valor>30.62</valor>
        <quantidade>150.0</quantidade>
        <data>2020-01-27 19:11:09.227 UTC</data>
      </operacao>
    </compras>
    <vendas/>
  </balanco>
  <balanco>
    <id>3</id>
    <compras>
      <operacao>
        <papel>ub22</papel>
        <valor>30.62</valor>
        <quantidade>150.0</quantidade>
        <data>2020-01-27 19:11:09.227 UTC</data>
      </operacao>
    </compras>
    <vendas/>
  </balanco>
  <balanco>
    <id>4</id>
    <compras>
      <operacao>
        <papel>ub22</papel>
        <valor>30.62</valor>
        <quantidade>150.0</quantidade>
        <data>2020-01-27 19:11:09.227 UTC</data>
      </operacao>
    </compras>
    <vendas/>
  </balanco>
  <balanco>
    <id>5</id>
    <compras>
      <operacao>
        <papel>ub22</papel>
        <valor>30.62</valor>
        <quantidade>150.0</quantidade>
        <data>2020-01-27 19:11:09.227 UTC</data>
      </operacao>
    </compras>
    <vendas/>
  </balanco>
</list>

Oi John, tudo bem?

Não entendi, você quer remover todas as tags do XML?