XMLEncoder e XMLDecoder

1 resposta
R

Então galera... estou tendo que fazer um projeto que trata dados persistentes usando essas duas classes. O problema é que eu não estou conseguindo gerar o XML.

Aqui está a classe que tenta gerar o XML

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.beans.XMLEncoder;

public class Blogao {
	private Usuario pessoa;

	public void createProfile(String login, String senha, String nome_exibicao, String email, String sexo, String dataNasc, String endereco, 
			String interesses, String quem_sou_eu, String filmes, String musicas, String livros) throws Exception {

		pessoa = new Pessoa(login,senha,nome_exibicao,email,sexo,dataNasc,endereco,interesses,quem_sou_eu,filmes,musicas,livros);
		XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("Usuario.xml")));
		encoder.writeObject(pessoa);
		encoder.close();
	}
}

Aqui está a classe pessoa:

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Pessoa implements Usuario {

	public Pessoa(String login, String senha, String nomeExib, String email, String sexo, String dataNasc, String endereco,
			String interesses, String quemSou, String filmesFav, String musicasFav, String livrosFav) throws Exception {

		if (login == null || login.equals("")) {
			throw new Exception("Login inválido");
		}

		if (senha == null || senha.equals("")) {
			throw new Exception("Senha inválida");
		}

		if (email == null || email.equals("")) {
			throw new Exception("Email inválido");
		}

		if (!sexo.equals("Masculino") && !sexo.equals("Feminino") && !sexo.equals("Não informado")) {
			throw new Exception("Sexo inválido");
		}

		if (!dataValida(dataNasc)) {
			throw new Exception("Data inválida");
		}
	}

	private boolean dataValida(String dataNasc) {
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		sdf.setLenient(false);
		try {
			sdf.parse(dataNasc);
		} catch (ParseException e) {
			return false;			
		}
		return true;
	}

}

O que estou fazendo de errado? Aqui estão as excessões lançadas:

java.lang.InstantiationException: Pessoa
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Pessoa);
Continuing ...
java.lang.InstantiationException: Pessoa
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Pessoa);
Continuing ...
java.lang.InstantiationException: Pessoa
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Pessoa);
Continuing ...
java.lang.InstantiationException: Pessoa
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Pessoa);
Continuing ...

1 Resposta

C

Olá,

Embora a documentação do XMLEncoder (e a do XMLDecoder) não indique, as funções writeObject e readObject exigem que o objeto tenha um construtor sem argumentos e que tenha os setters e getters pertinentes.
Assim, para fazer teu programa funcionar, você tem que criar um construtor sem argumentos em Pessoa e os getters e setters para as propriedades que você pretende gravar.
Recomendo, ainda, que você implemente a interface Serializable para garantir uma fluência regular dos dados.
Abraço,

Paulo.

Criado 3 de junho de 2008
Ultima resposta 25 de jan. de 2009
Respostas 1
Participantes 2