Artigo Java Magazine 52 - De Objetos a XML e Vice-Versa
Nesse artigo veremos duas APIs para a serialização de objetos usando XML. Vamos apresentar as vantagens e desvantagens de cada uma.
Esse artigo faz parte da revista Java Magazine edição 52. Clique aqui para ler todos os artigos desta edição
Clique aqui para ler esse artigo em PDF.
De Objetos a XML e Vice-Versa
Persistindo JavaBeans através de APIs de serialização
Sabemos que a tecnologia XML é usada em aplicações com as naturezas mais diversas, para armazenamento de configurações, troca de dados entre aplicativos, exportação/importação... Documentos XML podem também servir para a persistência, em algumas situações substituindo bem um banco de dados local como HSQLDB ou Derby. Esse é o caso, por exemplo, do programa do Imposto de Renda Pessoa Física, usado anualmente por milhões de pessoas, que durante o preenchimento de uma declaração IRPF armazena em XML as informações digitadas.
Mas habituado a trabalhar com objetos, o programador Java comumente precisa aprender diferentes – e às vezes complicadas – abordagens para usar XML em suas aplicações. A boa notícia é que existem APIs de serialização de objetos, que se encarregam de cuidar das transformações de/para XML. A serialização é o processo de gravar um objeto em um meio de armazenamento (como um arquivo) ou transmiti-lo por uma conexão de rede, seja em forma binária ou em formato de texto como o XML.A desserialização é o processo inverso, de recriar o objeto a partir do XML com o mesmo estado interno que o original.
Nesse artigo veremos duas APIs para a serialização de objetos usando XML. Vamos apresentar as vantagens e desvantagens de cada uma, para que o desenvolvedor possa escolher a que mais se adapta às suas necessidades. Usar essas soluções pode simplificar bastante o uso de XML com Java e abrir novas possibilidades para o armazenamento de dados em suas aplicações.
Uso tradicional de XML em aplicações
Sistemas escritos em Java costumam usar duas abordagens básicas para ler e gravar arquivos XML. A primeira é através de APIs como o SAX (Simple API for XML), com as quais é possível processar arquivos XML de forma seqüencial. À medida que o documento é lido, são disparados eventos (por exemplo, ao iniciar cada elemento ou atributo) para que a aplicação possa processá-los. Outra opção nessa linha é o StAX (Streaming API for XML), que oferece boa performance e maior facilidade de uso em relação ao SAX. Ambas as APIs são recomendadas para arquivos grandes, pelo seu baixo consumo de recursos, já que o documento não é carregado inteiro em memória de uma única vez.
A segunda abordagem é baseada no DOM (Document Object Model), que é um padrão de representação de XML em objetos organizados hierarquicamente1. Uma árvore de objetos é criada em memória, de forma a permitir acesso direto a um determinado elemento ou atributo, usando a notação XPath. Essa é uma opção normalmente mais fácil de ser utilizada (se dessecomparada a SAX e StAX), porém consome mais memória e não é aconselhável para arquivos muito grandes.
As duas abordagens (SAX/StAX e DOM), no entanto, exigem conhecimentos adicionais para o programador, que precisará dominar nuances de cada uma para escolher a melhor opção em seu caso (em termos de performance, facilidade de uso, flexibilidade etc.).
Nesse contexto, surge a alternativa de serializar e desserializar objetos Java de/ para XML. Com essa técnica, o desenvolvedor continua trabalhando com seus objetos Java e tira proveito de bibliotecas que realizam todo o trabalho de transformação.
|
Nota 1: Existem implementações de DOM para diversas linguagens além de Java, como PHP, Python, Perl e Visual Basic. A padronização é importante porque o programador que utiliza DOM sabe que encontrará a mesma hierarquia de objetos em qualquer linguagem que utilizar. |
O exemplo
Para avaliar as opções de serialização XML apresentadas, serão utilizados objetos Java para um cadastro de clientes, conforme o diagrama de classes apresentado na Figura 1. A proposta do exemplo é ilustrar o uso mais comum de serialização para XML, com as duas APIs. O códigofonte de cada uma das classes é mostrado na Listagem 1.
Figura 1. Diagrama de classes do exemplo
Listagem 1" [...] continue lendo...
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo