segunda-feira, 26 de outubro de 2015

Introdução à conversão de objetos Java para XML

Nessa postagem vamos brevemente abordar a API de conversão para XML em Java (e vice-versa): O JAXB.

JAXB


JAXB significa Java API for XML Binding, e é uma especificação do Java para trazer uma API para fazer a correspondência entre objetos Java e dados no formato XML.

Sob a JSR 222, JAXB é especificado e mantido por um grupo de especialista. Hoje, sem nos aprofundar muitos, vamos mostrar exemplos de criação de XML a partir de objetos Java.

Notem que, ao contrário de outras postagens desse blog, nossos exemplos não vão precisar de um servidor de aplicação, pois as classes do JAXB são parte do Java! Se utilizar uma versão nova do Java, você não enfrentará nenhum problema.

De POJO para documentos XML


POJO é o significado de Plain Old Java Object, objetos Java simples com atributos privados, construtores sem argumentos e métodos de acesso aos atributos.
Vamos começar imaginando que você quer ter uma representação de um objeto Java em XML sem se preocupar com a formatação do XML em sí, logo o método mais simples é usar a anotação @javax.bind.xml.XmlRootElement na declaração de sua classe. Basicamente qualquer classe Java pode ser transformada em XML depois que você adiciona essa anotação, pois o nome dos atributos, as subclasses, formatos de data, etc, tudo tem uma forma padrão que você pode modificar com outras anotações Java!
Em seguida temos que usar um código simples de entender que é o utilizado para invocar o JAXB e fazer a conversão do objeto para XML. A forma mais fácil e menos burocrática é utilizando a classe javax.xml.bind.JAXB e seus métodos estáticos. Com essa classe podemos invocar o método marshall e informar o objeto a ser transformado para XML e onde será armazenado o resultado, que pode ser um OutputStream, um arquivo e até uma StringWriter. Enfim, veja abaixo em código o que descrevemos.


Trazendo do XML para objetos Java



O caminho inverso é tão simples quanto o mostrado anteriormente. Você deve fornecer ao método unmarshall da classe JAXB uma fonte de entrada que pode ser um arquivo, um leitor de String, um InputStream ou outros. Você também deve fornecer o tipo, que é classe que contém as anotações JAXB. Essencial sempre é pelo menos a anotação @javax.bind.xml.XmlRootElement. Veja novamente em código o que estamos falando:


Aprendendo mais


O que mostramos nesse breve artigo foi o começo de um mundo novo a ser explorado. Documentos XMLs não são tão simples quanto se pensa e há diversas conversões que podemos fazer, por exemplo: podemos usar atributos nos elementos, utilizar formas diferentes de fazer listas de outros subelementos, ignorar alguns campos, utilizar alguma forma específica de conversão para objetos, entre muitas outras possibilidades.

Nenhum comentário:

Postar um comentário