XStream - Converta objetos Java para XML
Por Caio Paes
(caio.paes@ccc.ufcg.edu.br)
A Coluna Java de março fala um pouco sobre o XStream - uma biblioteca para a conversão de objetos para XML. O XStream é open source e, sem necessidade de configurações e com muita rapidez, pode-se escrever e ler objetos em texto XML muito limpo.

O XStream é uma biblioteca para a conversão de objetos Java para XML (Extensible Markup Language) e vice-versa. A sua interface é muito simples e fácil de ser usada. Com apenas uma chamada de método ao Xstream, o programador Java realiza a conversão de objetos em um texto XML. O texto gerado pode ser serializado utilizando as funções disponíveis na biblioteca padrão de Java ou qualquer outra forma definida pelo desenvolvedor. Com a mesma simplicidade, um código XML pode ser lido e objetos serão criados.

Além da facilidade de uso, o XStream faz o seu trabalho sem a necessidade de mapeamentos, modificações nas classes ou arquivos de configuração. Outra característica muito forte dessa biblioteca é a sua capacidade de gerar XML facilmente lido por seres humanos. Por meio da aplicação de aliases (apelidos), as tags que compõem o XML podem ser personalizadas pelo desenvolvedor.

A seguir, vamos criar um exemplo bem simples. Afinal de contas, o objetivo, quando se procura o XStream, é não complicar a vida do programador. Inicialmente, criaremos as classes para os dados utilizados na nossa aplicação.

package petnews.colunajava.xstream.model;
// Usuario.java
import java.util.List;
import java.util.ArrayList;
public class Usuario {
    private String login;
    private List<Tweet> tweets;
    public Usuario() {
        this.tweets = new ArrayList<Tweet>();
    }
    public String getLogin() {
        return this.login;
    }
    public void setLogin(String login) {
        this.login = login;
    }
    public List<Tweet> getTweets() {
        return this.tweets;
    }
    public void setTweets(List<Tweet> tweets) {
        this.tweets = tweets;
    }
    public void addTweet(Tweet tweet) {
        if (this.getTweets() != null) {
            this.tweets.add(tweet);
        }
    }
}

Observe, que não precisamos fazer nenhuma modificação no código do usuário para que possamos realizar a conversão de um objeto dessa classe para texto XML. Outra observação importante está no fato de podermos converter coleções de dados (“List<Tweet>”). O XStream converte listas, mapas e arrays. Veja, a seguir, o código da classe Tweet.

package petnews.colunajava.xstream.model;
// Tweet.java
import java.sql.Timestamp;
public class Tweet {
    private String mensagem;
    private Timestamp timestamp;
    public Tweet() {
        this.setTimestamp(new Timestamp(System.currentTimeMillis()));
    }
    public String getMensagem() {
        return this.mensagem;
    }
    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }
    public Timestamp getTimestamp() {
        return this.timestamp;
    }
    public void setTimestamp(Timestamp timestamp) {
        this.timestamp = timestamp;
    }
}

Agora, vamos criar um pequeno exemplo que utiliza o XStream para converter objetos instanciados em um texto XML.

package petnews.colunajava.xstream;
import petnews.colunajava.xstream.model.Usuario;
import petnews.colunajava.xstream.model.Tweet;
import com.thoughtworks.xstream.XStream;
public class XStreamTeste {
    public static void main(String[] args) {
        XStream xstream = new XStream();
        xstream.alias("usuario", Usuario.class);
        xstream.alias("tweet", Tweet.class);
        
        Usuario usuario = new Usuario();
        usuario.setLogin("petccufcg");
        Tweet tweet = new Tweet();
        tweet.setMensagem("#PETNews XStream - Converta objetos Java para XML - Por @CaioCMPaes");
        usuario.addTweet(tweet);
        String xml = xstream.toXML(usuario);
        System.out.println(xml);
        Usuario usuarioCopia = (Usuario) xstream.fromXML(xml);
        System.out.println("Nome: " + usuarioCopia.getLogin());
        System.out.println("Tweet: " + usuarioCopia.getTweets().get(0).getMensagem());
    }
}

Os aliases criados indicam para o XStream que, em substituição ao uso do nome completo da classe (indicando todos os pacotes), ele use apenas “usuario” e “tweet”. Lembrando o início da matéria, apenas um método é utilizado para fazer toda a conversão da hierarquia de dados do objeto Usuario no XML a seguir. Observe, também, a leitura do conteúdo XML, resultando num objeto com os mesmos dados que existam antes da conversão.

<usuario>
  <login>petccufcg</login>
  <tweets>
    <tweet>
      <mensagem>#PETNews XStream - Converta objetos Java para XML - Por @CaioCMPaes</mensagem>
      <timestamp>2012-03-13 00:49:38.574</timestamp>
    </tweet>
  </tweets>
</usuario>
Nome: petccufcg
Tweet: #PETNews XStream - Converta objetos Java para XML - Por @CaioCMPaes

O XStream é open source e seu desenvolvimento é corrente. A release mais recente foi lançada no dia 03 de novembro de 2011. Além da biblioteca ser bem documentada e possuir vários tutoriais na Internet, seu uso é muito comum para a serialização de objetos. É muito útil para salvar os dados de projetos de pequeno e médio porte (quanto à quantidade de dados). Isso tudo, vale lembrar, sem a necessidade de configurações, mudanças no código, ou criação de esquemas relacionais, etc. O código-fonte do exemplo pode ser encontrado aqui.

Jornal PETNews - Edição: Jeymisson Oliveira - Revisão: Savyo Igor e Joseana Fechine
Grupo PET Computação UFCG, 2012. All rights reserved.