XStream é uma biblioteca simples para serializar objetos em arquivos XML, e desserializá-los em objetos Java. Ou seja, com essa biblioteca você é capaz de salvar seus objetos em arquivos XML e restaurar esse arquivos em objetos novamente.
Entre as principais vantagens de usar essa biblioteca estão:
- É fácil de usar – Existe uma classe de alto nível que encapsula a biblioteca, com apenas uma classe você consegui salvar seus objetos em arquivos XML.
- Desempenho – É rápido e consome pouca memória, por isso pode ser usado para objetos com muitos dados, ou em sistema que necessitem salvar muitos XML’s.
- Não é necessário modificar classes e objetos - Serializa campos internos, incluindo os private e final. Suporta classes internas e não públicas, e não exige que as classe possuam um construtor padrão.
Para aplicações pequenas, em que não seja necessário XML complexo, o XStream se mostra como uma excelente opção. Sua facilidade de uso torna tudo mais simples, e o desenvolvedor precisa de poucas linhas para salvar e recuperar seus objetos.
Primeiramente é necessário fazer o download do arquivo .jar da biblioteca, o endereço é http://xstream.codehaus.org/download.html. Se o código for usado como mostrado nessa postagem não é necessário incluir nenhuma outra biblioteca ao seu projeto.
O Exemplo a seguir foi adaptado do site da biblioteca. Primeiramente são criadas duas classes simples:
public class Pessoa {
private String nome;
private String sobreNome;
private Fone fone;
private Fone celular;
}
public class Fone {
private int codigo;
private String numero;
}
Após ter as classes que deseja serializar, e adicionar a biblioteca ao seu ClassPath, inicie um objeto XStream. Ele será responsável pela serialização e desserialização dos objetos.
XStream xstream = new XStream(new DomDriver());
//O código abaixo é opcional
xstream.alias("pessoa", Pessoa.class);
xstream.alias("telefone", Fone.class);
Agora vamos mostrar os códigos para serializar um objeto da classe Pessoa. Basta usar o objeto xstream criado:
Pessoa joao = new Pessoa(“João”, “da Silva”);
joao.setFone(new Fone(1,”1234-456”));
joao.setCelular(new Fone(2,”9999-9999”));
String xml = xstream.toXML();
Com essa “manobra” a variável xml recebe o seguinte valor:
<pessoa>
<nome>João</nome>
<sobrenome>da Silva</sobrenome>
<fone>
<codigo>1</codigo>
<numero>1234-456</numero >
</fone>
<celular>
<codigo>2</codigo>
<numero>9999-999</numero >
</celular>
</pessoa>
Para desserializar é tão fácil quanto serializar:
Pessoa novoJoao = (Pessoa)xstream.fromXML(xml);
É muito fácil né?!
E tem muitas utilidades! Quando desenvolvi o ecf, utilizei para restaurar itens vendidos quando o programa fechava ou havia queda de energia, ele salvava, a cada item vendido o arquivo xml da classe Cupom, e se ocorrece alguma eventualidade, ele transforma esse xml em objeto, e pronto, a aplicação ficava no mesmo
estado em que estava quando aconteceu o problema.
estado em que estava quando aconteceu o problema.
Abaixo seguem alguns códigos que podem ajudar :
//Para omitir algum campo do xml
//Não salvaremos o campo celular da classe Pessoa
xstream.omitField(Pessoa.class, “celular”);
---------------------------------------------------
//Para salvar em uma arquivo – podemos salvar em uma OutPutStream
xstream.toXML(joao, new FileOutPutStream(“arquivo.xml”));
---------------------------------------------------
//Para recuperar de um arquivo- usando InputStream
Pessoa novoJoao;
novojoao = (Pessoa) xstream.fromXML(new FileInputStream(“arquivo.xml”));
---------------------------------------------------
//Para aceitar caracteres especiais
XStream stream = newXStream(new DomDriver("ISO-8859-1"));