Dúvidas com XStream

6 respostas
G

Pessoal,

Estou utilizando o XStream para ler um XML mas estou com um problema que não sei comom resolver…

Ele lê o arquivo, faz o parse (pelo menos parece fazer), mas não popula o objeto. Ele cria o objeto mas vem tudo nulo…

Sei que ele lê o arquivo pois durante minhas tentativas ocorreram algumas exceções por erros no xml, então entendo que o mesmo estava sendo lido.

Em princípio vou colocar somente a chamada da minha classe main, se com isso não conseguirem me ajudar depois complemento com mais partes do código e com o xml.

public static void main(String[] args) throws Exception
  {
    XStream stream = new XStream(new DomDriver());
    
    stream.alias("DADOS_FATURA", DadosFatura.class);
    stream.alias("CLIENTE", Cliente.class);
    stream.alias("ENCARGOS_FINANCEIROS", EncargosFinanceiros.class);
    stream.alias("FICHA_COMPENSACAO", FichaCompensacao.class);
    stream.alias("FATURA_CLIENTE", FaturaCliente.class);
    stream.alias("MOVIMENTACAO", Movimento.class); 
    
    FileInputStream fis = new FileInputStream("c:\\temp\\xml.xml");
    FaturaCliente fc = stream.fromXML(fis);
    System.out.println(fc.getCliente().getName());
  }

6 Respostas

T

Ponha seu arquivo XML…

G
<FATURA_CLIENTE>
  <DADOS_FATURA> 
    <DATA_VENCIMENTO>10/07/2007</DATA_VENCIMENTO>
    <SALDO_ANTERIOR>100,00</SALDO_ANTERIOR>
    <TOTAL_CREDITOS>100,00</TOTAL_CREDITOS>
    <TOTAL_DEBITOS>80,00</TOTAL_DEBITOS>
    <TOTAL_FATURA>80,00</TOTAL_FATURA>
    <PAGAMENTO_MINIMO>8,00</PAGAMENTO_MINIMO>
  </DADOS_FATURA>

  <CLIENTE>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <NOME_CLIENTE>FULANO DE TAL</NOME_CLIENTE>
    <TIPO_CARTAO>BANESCARD GOLD</TIPO_CARTAO>
    <LIMITE_CREDITO>1.000,00</LIMITE_CREDITO>
    <LIMITE_SAQUE>500,00</LIMITE_SAQUE>
  </CLIENTE>

  <ENCARGOS_FINANCEIROS>
    <TAXA_MULTA_MES_ATUAL>1,00</TAXA_MULTA_MES_ATUAL>
    <TAXA_MORA_MES_ATUAL>0,00</TAXA_MORA_MES_ATUAL>
    <TAXA_ROTATIVO_MES_ATUAL>4,90</TAXA_ROTATIVO_MES_ATUAL>
    <TAXA_MULTA_PROXIMO_MES>1,00</TAXA_MULTA_PROXIMO_MES>
    <TAXA_MORA_PROXIMO_MES>0,00</TAXA_MORA_PROXIMO_MES>
    <TAXA_ROTATIVO_PROXIMO_MES>4,90</TAXA_ROTATIVO_PROXIMO_MES>
    <VALOR_MULTA>0,00</VALOR_MULTA>
    <VALOR_MORA>0,00</VALOR_MORA>
    <VALOR_ROTATIVO>0,00</VALOR_ROTATIVO>
  </ENCARGOS_FINANCEIROS>

  <FICHA_COMPENSACAO>
    <LOCAL_PAGAMENTO>PAGAVEL EM QUALQUER BANCO ATE O VENCIMENTO</LOCAL_PAGAMENTO>
    <CEDENTE>BANESTES-BANCO DO ESTADO DO ESPIRITO SANTO S/A</CEDENTE>
    <AGENCIA>0001</AGENCIA>
    <CODIGO_CEDENTE>[telefone removido]</CODIGO_CEDENTE>
    <NOSSO_NUMERO>101010101010</NOSSO_NUMERO>
    <LINHA_DIGITAVEL>02190.00112 01010.101013 00000.000664 5 00000000000000</LINHA_DIGITAVEL>
    <CODIGO_BARRA>02195000000000000000001101010101010000000066</CODIGO_BARRA>
    <CHAVE_ASBACE>[telefone removido]</CHAVE_ASBACE>
    <DATA_DOCUMENTO>01/07/2007</DATA_DOCUMENTO>
    <NUMERO_DOCUMENTO>000000001</NUMERO_DOCUMENTO>
    <ESPECIE_DOCUMENTO>DM</ESPECIE_DOCUMENTO>
    <ACEITE>N</ACEITE>
    <DATA_PROCESSAMENTO>01/07/2007</DATA_PROCESSAMENTO>
    <CARTEIRA>66</CARTEIRA>
    <INSTRUCAO_COBRANCA_1>APOS O VENCIMENTO SOMENTE NO BANESTES</INSTRUCAO_COBRANCA_1>
    <INSTRUCAO_COBRANCA_2>''</INSTRUCAO_COBRANCA_2>
    <INSTRUCAO_COBRANCA_3>FATURA DE CARTAO</INSTRUCAO_COBRANCA_3>
    <INSTRUCAO_COBRANCA_4>RECEBER PELO MENOS O VALOR MINIMO</INSTRUCAO_COBRANCA_4>
    <INSTRUCAO_COBRANCA_5>LIMITE RESTABELECIDO APOS A COMPENSACAO</INSTRUCAO_COBRANCA_5>
  </FICHA_COMPENSACAO>

  <MOVIMENTACAO>
    <SEQUENCIAL>001</SEQUENCIAL>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <DATA_MOVIMENTO>15/06/2007</DATA_MOVIMENTO>
    <HISTORICO>POSTO ALVORADA</HISTORICO>
    <NUMERO_AUTORIZACAO>900001</NUMERO_AUTORIZACAO>
    <VALOR_PARCELA>50,00</VALOR_PARCELA>
    <NUMERO_PARCELA>1</NUMERO_PARCELA>
    <QUANTIDADE_PARCELAS>1</QUANTIDADE_PARCELAS>
    <VALOR_TRANSACAO>50,00</VALOR_TRANSACAO>
  </MOVIMENTACAO>
  <MOVIMENTACAO>
    <SEQUENCIAL>002</SEQUENCIAL>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <DATA_MOVIMENTO>16/06/2007</DATA_MOVIMENTO>
    <HISTORICO>PADARIA ABC</HISTORICO>
    <NUMERO_AUTORIZACAO>900002</NUMERO_AUTORIZACAO>
    <VALOR_PARCELA>30,00</VALOR_PARCELA>
    <NUMERO_PARCELA>1</NUMERO_PARCELA>
    <QUANTIDADE_PARCELAS>1</QUANTIDADE_PARCELAS>
    <VALOR_TRANSACAO>30,00</VALOR_TRANSACAO>
  </MOVIMENTACAO>                        
</FATURA_CLIENTE>
Pedrosa

Como esta a classe FaturaCliente , os atributos dos seus beans são maiusculos, pode ser isso o motivo do erro.

G

Está tudo com o nome maiúsculo. Eu havia colocado minúsculo, mas ele deu pau. Então coloquei todos os nomes iguais e funcionou, mas continua criando os objetos nulos.

Abaixo segue o código da classe FaturaCliente (a principal). Se precisarem de mais informações me avisem…

public class FaturaCliente
{
  private DadosFatura dadosFatura;
  private Cliente cliente;
  private EncargosFinanceiros encargosFinanceiros;
  private FichaCompensacao fichaCompensacao;
  private ArrayList listaMovimento;

  public FaturaCliente()
  {
    this.dadosFatura = new DadosFatura();
    this.cliente = new Cliente();
    this.encargosFinanceiros = new EncargosFinanceiros();
    this.fichaCompensacao = new FichaCompensacao();
    this.listaMovimento = new ArrayList();
  }
    
  public ArrayList getListaMovimento()
  {
    return this.listaMovimento;
  }
  public void setListaMovimento(ArrayList listaMovimento)
  {
    this.listaMovimento = listaMovimento;
  }
  
  public Movimento getItemMovimento(int indice)
  {
    Object item = this.listaMovimento.get(indice); 
    return item == null? null:(Movimento)item;
  }
  
  public void setItemMovimento(Movimento item)
  {
    this.listaMovimento.add(item);
  }

  public Cliente getCliente()
  {
    return this.cliente;
  }
  public void setCliente(Cliente cliente)
  {
    this.cliente = cliente;
  }

  public DadosFatura getDadosFatura()
  {
    return this.dadosFatura;
  }
  public void setDadosFatura(DadosFatura dadosFatura)
  {
    this.dadosFatura = dadosFatura;
  }
  
  public EncargosFinanceiros getEncargosFinanceiros()
  {
    return this.encargosFinanceiros;
  }
  public void setEncargosFinanceiros(EncargosFinanceiros encargosFinanceiros)
  {
    this.encargosFinanceiros = encargosFinanceiros;
  }
  
  public FichaCompensacao getFichaCompensacao()
  {
    return this.fichaCompensacao;
  }
  public void setFichaCompensacao(FichaCompensacao fichaCompensacao)
  {
    this.fichaCompensacao = fichaCompensacao;
  }
}
rbamartins
gandja99:
<FATURA_CLIENTE>
  <DADOS_FATURA> 
    <DATA_VENCIMENTO>10/07/2007</DATA_VENCIMENTO>
    <SALDO_ANTERIOR>100,00</SALDO_ANTERIOR>
    <TOTAL_CREDITOS>100,00</TOTAL_CREDITOS>
    <TOTAL_DEBITOS>80,00</TOTAL_DEBITOS>
    <TOTAL_FATURA>80,00</TOTAL_FATURA>
    <PAGAMENTO_MINIMO>8,00</PAGAMENTO_MINIMO>
  </DADOS_FATURA>

  <CLIENTE>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <NOME_CLIENTE>FULANO DE TAL</NOME_CLIENTE>
    <TIPO_CARTAO>BANESCARD GOLD</TIPO_CARTAO>
    <LIMITE_CREDITO>1.000,00</LIMITE_CREDITO>
    <LIMITE_SAQUE>500,00</LIMITE_SAQUE>
  </CLIENTE>

  <ENCARGOS_FINANCEIROS>
    <TAXA_MULTA_MES_ATUAL>1,00</TAXA_MULTA_MES_ATUAL>
    <TAXA_MORA_MES_ATUAL>0,00</TAXA_MORA_MES_ATUAL>
    <TAXA_ROTATIVO_MES_ATUAL>4,90</TAXA_ROTATIVO_MES_ATUAL>
    <TAXA_MULTA_PROXIMO_MES>1,00</TAXA_MULTA_PROXIMO_MES>
    <TAXA_MORA_PROXIMO_MES>0,00</TAXA_MORA_PROXIMO_MES>
    <TAXA_ROTATIVO_PROXIMO_MES>4,90</TAXA_ROTATIVO_PROXIMO_MES>
    <VALOR_MULTA>0,00</VALOR_MULTA>
    <VALOR_MORA>0,00</VALOR_MORA>
    <VALOR_ROTATIVO>0,00</VALOR_ROTATIVO>
  </ENCARGOS_FINANCEIROS>

  <FICHA_COMPENSACAO>
    <LOCAL_PAGAMENTO>PAGAVEL EM QUALQUER BANCO ATE O VENCIMENTO</LOCAL_PAGAMENTO>
    <CEDENTE>BANESTES-BANCO DO ESTADO DO ESPIRITO SANTO S/A</CEDENTE>
    <AGENCIA>0001</AGENCIA>
    <CODIGO_CEDENTE>[telefone removido]</CODIGO_CEDENTE>
    <NOSSO_NUMERO>101010101010</NOSSO_NUMERO>
    <LINHA_DIGITAVEL>02190.00112 01010.101013 00000.000664 5 00000000000000</LINHA_DIGITAVEL>
    <CODIGO_BARRA>02195000000000000000001101010101010000000066</CODIGO_BARRA>
    <CHAVE_ASBACE>[telefone removido]</CHAVE_ASBACE>
    <DATA_DOCUMENTO>01/07/2007</DATA_DOCUMENTO>
    <NUMERO_DOCUMENTO>000000001</NUMERO_DOCUMENTO>
    <ESPECIE_DOCUMENTO>DM</ESPECIE_DOCUMENTO>
    <ACEITE>N</ACEITE>
    <DATA_PROCESSAMENTO>01/07/2007</DATA_PROCESSAMENTO>
    <CARTEIRA>66</CARTEIRA>
    <INSTRUCAO_COBRANCA_1>APOS O VENCIMENTO SOMENTE NO BANESTES</INSTRUCAO_COBRANCA_1>
    <INSTRUCAO_COBRANCA_2>''</INSTRUCAO_COBRANCA_2>
    <INSTRUCAO_COBRANCA_3>FATURA DE CARTAO</INSTRUCAO_COBRANCA_3>
    <INSTRUCAO_COBRANCA_4>RECEBER PELO MENOS O VALOR MINIMO</INSTRUCAO_COBRANCA_4>
    <INSTRUCAO_COBRANCA_5>LIMITE RESTABELECIDO APOS A COMPENSACAO</INSTRUCAO_COBRANCA_5>
  </FICHA_COMPENSACAO>

  <MOVIMENTACAO>
    <SEQUENCIAL>001</SEQUENCIAL>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <DATA_MOVIMENTO>15/06/2007</DATA_MOVIMENTO>
    <HISTORICO>POSTO ALVORADA</HISTORICO>
    <NUMERO_AUTORIZACAO>900001</NUMERO_AUTORIZACAO>
    <VALOR_PARCELA>50,00</VALOR_PARCELA>
    <NUMERO_PARCELA>1</NUMERO_PARCELA>
    <QUANTIDADE_PARCELAS>1</QUANTIDADE_PARCELAS>
    <VALOR_TRANSACAO>50,00</VALOR_TRANSACAO>
  </MOVIMENTACAO>
  <MOVIMENTACAO>
    <SEQUENCIAL>002</SEQUENCIAL>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <DATA_MOVIMENTO>16/06/2007</DATA_MOVIMENTO>
    <HISTORICO>PADARIA ABC</HISTORICO>
    <NUMERO_AUTORIZACAO>900002</NUMERO_AUTORIZACAO>
    <VALOR_PARCELA>30,00</VALOR_PARCELA>
    <NUMERO_PARCELA>1</NUMERO_PARCELA>
    <QUANTIDADE_PARCELAS>1</QUANTIDADE_PARCELAS>
    <VALOR_TRANSACAO>30,00</VALOR_TRANSACAO>
  </MOVIMENTACAO>                        
</FATURA_CLIENTE>

Pode até ser rídiculo o que vou falar (posso está errando feio :D ), não tenho certeza disso e não tenho como testar agora. Vale até como dúvida.

No código de seu arquivo XML não consta a tag de XML que deve aparecer no inicio de tudo, como mostro abaixo:

&lt?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt

Se puder fazer este teste e me responder depois.

E sempre vale dar uma olhada em http://xstream.codehaus.org/tutorial.html

Abraços

mchiareli
rbamartins:
gandja99:
<FATURA_CLIENTE>
  <DADOS_FATURA> 
    <DATA_VENCIMENTO>10/07/2007</DATA_VENCIMENTO>
    <SALDO_ANTERIOR>100,00</SALDO_ANTERIOR>
    <TOTAL_CREDITOS>100,00</TOTAL_CREDITOS>
    <TOTAL_DEBITOS>80,00</TOTAL_DEBITOS>
    <TOTAL_FATURA>80,00</TOTAL_FATURA>
    <PAGAMENTO_MINIMO>8,00</PAGAMENTO_MINIMO>
  </DADOS_FATURA>

  <CLIENTE>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <NOME_CLIENTE>FULANO DE TAL</NOME_CLIENTE>
    <TIPO_CARTAO>BANESCARD GOLD</TIPO_CARTAO>
    <LIMITE_CREDITO>1.000,00</LIMITE_CREDITO>
    <LIMITE_SAQUE>500,00</LIMITE_SAQUE>
  </CLIENTE>

  <ENCARGOS_FINANCEIROS>
    <TAXA_MULTA_MES_ATUAL>1,00</TAXA_MULTA_MES_ATUAL>
    <TAXA_MORA_MES_ATUAL>0,00</TAXA_MORA_MES_ATUAL>
    <TAXA_ROTATIVO_MES_ATUAL>4,90</TAXA_ROTATIVO_MES_ATUAL>
    <TAXA_MULTA_PROXIMO_MES>1,00</TAXA_MULTA_PROXIMO_MES>
    <TAXA_MORA_PROXIMO_MES>0,00</TAXA_MORA_PROXIMO_MES>
    <TAXA_ROTATIVO_PROXIMO_MES>4,90</TAXA_ROTATIVO_PROXIMO_MES>
    <VALOR_MULTA>0,00</VALOR_MULTA>
    <VALOR_MORA>0,00</VALOR_MORA>
    <VALOR_ROTATIVO>0,00</VALOR_ROTATIVO>
  </ENCARGOS_FINANCEIROS>

  <FICHA_COMPENSACAO>
    <LOCAL_PAGAMENTO>PAGAVEL EM QUALQUER BANCO ATE O VENCIMENTO</LOCAL_PAGAMENTO>
    <CEDENTE>BANESTES-BANCO DO ESTADO DO ESPIRITO SANTO S/A</CEDENTE>
    <AGENCIA>0001</AGENCIA>
    <CODIGO_CEDENTE>[telefone removido]</CODIGO_CEDENTE>
    <NOSSO_NUMERO>101010101010</NOSSO_NUMERO>
    <LINHA_DIGITAVEL>02190.00112 01010.101013 00000.000664 5 00000000000000</LINHA_DIGITAVEL>
    <CODIGO_BARRA>02195000000000000000001101010101010000000066</CODIGO_BARRA>
    <CHAVE_ASBACE>[telefone removido]</CHAVE_ASBACE>
    <DATA_DOCUMENTO>01/07/2007</DATA_DOCUMENTO>
    <NUMERO_DOCUMENTO>000000001</NUMERO_DOCUMENTO>
    <ESPECIE_DOCUMENTO>DM</ESPECIE_DOCUMENTO>
    <ACEITE>N</ACEITE>
    <DATA_PROCESSAMENTO>01/07/2007</DATA_PROCESSAMENTO>
    <CARTEIRA>66</CARTEIRA>
    <INSTRUCAO_COBRANCA_1>APOS O VENCIMENTO SOMENTE NO BANESTES</INSTRUCAO_COBRANCA_1>
    <INSTRUCAO_COBRANCA_2>''</INSTRUCAO_COBRANCA_2>
    <INSTRUCAO_COBRANCA_3>FATURA DE CARTAO</INSTRUCAO_COBRANCA_3>
    <INSTRUCAO_COBRANCA_4>RECEBER PELO MENOS O VALOR MINIMO</INSTRUCAO_COBRANCA_4>
    <INSTRUCAO_COBRANCA_5>LIMITE RESTABELECIDO APOS A COMPENSACAO</INSTRUCAO_COBRANCA_5>
  </FICHA_COMPENSACAO>

  <MOVIMENTACAO>
    <SEQUENCIAL>001</SEQUENCIAL>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <DATA_MOVIMENTO>15/06/2007</DATA_MOVIMENTO>
    <HISTORICO>POSTO ALVORADA</HISTORICO>
    <NUMERO_AUTORIZACAO>900001</NUMERO_AUTORIZACAO>
    <VALOR_PARCELA>50,00</VALOR_PARCELA>
    <NUMERO_PARCELA>1</NUMERO_PARCELA>
    <QUANTIDADE_PARCELAS>1</QUANTIDADE_PARCELAS>
    <VALOR_TRANSACAO>50,00</VALOR_TRANSACAO>
  </MOVIMENTACAO>
  <MOVIMENTACAO>
    <SEQUENCIAL>002</SEQUENCIAL>
    <NUMERO_CARTAO>6000 0000 0000 0001</NUMERO_CARTAO>
    <DATA_MOVIMENTO>16/06/2007</DATA_MOVIMENTO>
    <HISTORICO>PADARIA ABC</HISTORICO>
    <NUMERO_AUTORIZACAO>900002</NUMERO_AUTORIZACAO>
    <VALOR_PARCELA>30,00</VALOR_PARCELA>
    <NUMERO_PARCELA>1</NUMERO_PARCELA>
    <QUANTIDADE_PARCELAS>1</QUANTIDADE_PARCELAS>
    <VALOR_TRANSACAO>30,00</VALOR_TRANSACAO>
  </MOVIMENTACAO>                        
</FATURA_CLIENTE>

Pode até ser rídiculo o que vou falar (posso está errando feio :D ), não tenho certeza disso e não tenho como testar agora. Vale até como dúvida.

No código de seu arquivo XML não consta a tag de XML que deve aparecer no inicio de tudo, como mostro abaixo:

&lt?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt

Se puder fazer este teste e me responder depois.

E sempre vale dar uma olhada em http://xstream.codehaus.org/tutorial.html

Abraços

não precisa disto no xstream....

vc pode postar suas classes completas ae, paa mim rodar aqui e ver oq rola....??

Criado 16 de julho de 2007
Ultima resposta 17 de jul. de 2007
Respostas 6
Participantes 5