Serializando objetos Java em XML com XStream
Algumas vezes é necessário obter uma representação XML a partir de dados de objetos Java. A operação inversa – gerar um objeto Java a partir de uma representação XML – também pode ser igualmente útil. O processo de transpor objetos da memória como uma seqüência de bits (seja para arquivos no disco ou para transmissão via rede) é chamado de serialização.
Neste primeiro artigo, abordamos o XStream, uma biblioteca para serialização de objetos em formato XML e vice-versa.
Introdução
Existem várias bibliotecas para serialização de objetos Java em XML, tais como JOX, JAXB, XOM, WOX, Simple e etc. Cada uma destas APIs possui suas peculiaridades e suas características de performance, flexibilidade e simplicidade de uso. No entanto, quase todas possuem limitações como forçar que os objetos serializáveis estejam em formato de beans (com métodos acessores e modificadores para cada atributo), que os atributos sejam públicos, que as classes implementem uma dada interface ou mesmo que se precise definir mapeamentos entre dados da classe e sua representação XML.
De todas as bibliotecas de serialização em XML de propósito geral, a XStream se destaca por não possuir muitas destas limitações. Ou seja, XStream é capaz de gerar representação XML de praticamente quaisquer objetos Java, sem implicar em modificações nas classes originais ou nenhum outro pré-requisito em especial. Segundo os desenvolvedores, XStream terá limitações apenas para serializar classes não-públicas ou classes internas (inner classes), classes anônimas ou sem construtor default. Mesmo assim, para certas implementações específicas da Java JVM, é possível contornar estas limitações utilizando a biblioteca em um modo avançado.
Conhecendo o XStream
XStream funciona reconhecendo o tipo de dados dos atributos do objeto por reflexão e invocando um conversor interno à biblioteca para cada tipo de dados, tanto primitivos quanto referências, e gerando uma representação XML consistente e a partir da qual pode-se obter exatamente os mesmo dados.
Por exemplo, considere a seguinte definição de classe Java:
// arquivo Aluno.java
package br.com.devmedia.exemplo;
public class Aluno {
private String nomeCompleto;
private long numeroMatricula;
private float[] mediasFinais = {0.0, 0.0, 0.0, 0.0};
private boolean ehBolsista;
// construtor default de teste
public Aluno() {
System.out.println(“Chamou construtor default...”);
}
// um construtor que inicializa os atributos
public Aluno(String nome, long matricula, ehBolsista, float[] medias) {
// segue a definição da classe...
}
Depois de fazer o download da biblioteca XStream e colocá-la no classpath de sua aplicação, podemos criar uma representação XML de um objeto do tipo Aluno desta forma.
// arquivo Teste.java
package br.com.devmedia.exemplo;
...
Exibição do post interrompida. Para ler conteúdo completo,
clique aqui