Usando o XStream para lidar com XML em Java

Estamos desenvolvendo uma API que cria um cliente e um servidor para fazer o meio de campo entre aplicações web e catracas da DIMEP. Eu já tinha escrito a um certo tempo atrás como, havíamos integrado as catracas da DIMEP em uma apliacação de um cliente que rodava todos os servidores em Linux, e por isso tivemos que criar um mini cliente em Java. Agora o objetivo é criar algo que possa ser plugado em diversas aplicações que queiram usar as catracas ou os relógios de ponto da DIMEP do modelo IP Realtime.

Ocorre que esse servidor vai usar muita troca de pequenos arquivos XML. Para lidar com isso, voltamos ao estudo, para avaliar os melhores, e nisso velocidade era crucial, parseadores (analisadores) de arquivos XML. Nessa busca, entre os vários existentes, acabamos optando pelo XStream. Ele é, como diz a definição em sua própria página, uma biblioteca para serializar arquivos XML para objetos e vice-versa.

Por padrão, o XStream vai usar o XPP3 para ler o arquivo XML e gerar a estrutura hierárquica (os nós) do arquivo XML. O XPP3 é bastante rápido e isso contribui para a velocidade global. Mas isso é detalhe, vamos a utilização do XStream, que é bem simples. Aliás, vou me basear fortemente, usando os meus próprios comentários, do tutorial de 2 minutos existente na próprio site do XStream.

Vamos supor que você possua um objeto Person (nem me dei o trabalho de traduzir) como o descrito abaixo:

package br.com.riopro.model;

public class Person {
private String firstname;
private String lastname;
// … construtores e métodos
}
Se quisermos exportar o objeto Person para XML faríamos:

XStream xstream = new XStream();
xstream.alias("person", br.com.riopro.model.Person.class);

Dois comentários. O primeiro é que, ao instanciarmos dessa forma o objeto xstream, estaremos usando o parseador XPP3. Se você preferir usar o JAXP DOM padrão, crie a instancia usando:

XStream xstream = new XStream(new DomDriver());

Aqui preferimos usar o XPP3. O segundo comentário se refere ao método alias. Ele cria, como o próprio nome diz, um alias para que o XStream saiba qual nome chamar o objeto XML ao criar e qual a etiqueta de marcação recuperar como o objeto Person. Continuando com o exemplo, instanciamos um objeto Person.

Person myself = new Person();
myself.setFirstname("Otávio");
myself.setLastname("Sampaio");

Em seguida exportamos para XML:

String xml = xstream.toXML(myself);

A String xml conteria:

<person>
<firstname>Otávio</firstname>
<lastname>Sampaio</lastname>
</person>

Fazendo o inverso agora. Pegando essa String, que poderia ser um InputStream ou um BufferedReader também, seria assim:

Person theNewMe = (Person) xstream.fromXML(xml);

É isso, simples e funcional. O XStream tem algumas coisas mais legais, como um alias para um campo (usando o método aliasField. Para ver mais sobre o alias e o aliasField, veja o micro tutorial sobre alias. Uma das coisas que mais gostei foi a simplicidade de sintaxe e como o site deles é funcional. Além disso, o XStream pode ser usado para criar arquivos JSON, veja mais nesse tutorial. Nem parece Java, sério.

1 opinião sobre “Usando o XStream para lidar com XML em Java”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *