Strict Standards: Non-static method themeGluedIdeas_Subtle::initOptions() should not be called statically in /home/riopro/www/blog.riopro.com.br/wp-content/themes/gluedideas_subtle/header.php on line 19
Riopro Blog - » Usando o XStream para lidar com XML em Java

Usando o XStream para lidar com XML em Java



Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

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.

Informações e Links

Junte-se comentando, lendo o que os outros dizem ou colocando um link a partir do seu blog.


Outros Artigos

Strict Standards: Only variables should be assigned by reference in /home/riopro/www/blog.riopro.com.br/wp-includes/post.php on line 117
KillBill versão 0.3.0 disponível para download

Strict Standards: Only variables should be assigned by reference in /home/riopro/www/blog.riopro.com.br/wp-includes/post.php on line 117
Versão 0.2.0 do KillBill já está na rua

Comente

Tire um tempo para comentar e nos dizer o que você acha. Alguns códigos HTML são permitidos para formatação.

Comentários dos Leitores


Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

Mas e ai, como visualizo esse xml?