Tem cara aqui jurando que JAXB é a coisa mais legal desde o pão fatiado. Estou curioso para ver o que os usuários do Stack Overflow acham que é o caso de uso para JAXB e o que o torna uma solução boa ou ruim para esse caso.
Tem cara aqui jurando que JAXB é a coisa mais legal desde o pão fatiado. Estou curioso para ver o que os usuários do Stack Overflow acham que é o caso de uso para JAXB e o que o torna uma solução boa ou ruim para esse caso.
Respostas:
Sou um grande fã de JAXB para manipular XML. Basicamente, ele fornece uma solução para esse problema (estou assumindo familiaridade com XML, estruturas de dados Java e esquemas XML):
Trabalhar com XML é difícil. É necessária uma maneira de pegar um arquivo XML - que é basicamente um arquivo de texto - e convertê-lo em algum tipo de estrutura de dados, que seu programa pode manipular.
JAXB pegará um Esquema XML que você escreve e cria um conjunto de classes que correspondem a esse esquema. Os utilitários JAXB criarão a hierarquia de estruturas de dados para manipular esse XML.
O JAXB pode então ser usado para ler um arquivo XML e, em seguida, criar instâncias das classes geradas - carregadas com os dados de seu XML. JAXB também faz o inverso: pega classes java e gera o XML correspondente.
Eu gosto de JAXB porque é fácil de usar e vem com Java 1.6 (se você estiver usando 1.5, você pode baixar o JAXB .jars.) A maneira como ele cria a hierarquia de classes é intuitiva e, na minha experiência, faz um trabalho decente abstraindo o "XML" para que eu possa me concentrar nos "dados".
Portanto, para responder à sua pergunta: Eu esperaria que, para pequenos arquivos XML, JAXB fosse um exagero. Ele requer que você crie e mantenha um esquema XML e use "métodos de livro-texto padrão" de utilização de classes Java para estruturas de dados. (Classes principais, pequenas classes internas para representar "nós" e uma grande hierarquia deles.) Portanto, JAXB provavelmente não é tão bom para uma lista linear simples de "preferências" para um aplicativo.
Mas se você tiver um esquema XML bastante complexo e muitos dados nele contidos, o JAXB é fantástico. Em meu projeto, eu estava convertendo grandes quantidades de dados entre binários (que eram consumidos por um programa C) e XML (para que humanos pudessem consumir e modificar esses dados). O esquema XML resultante era não trivial (muitos níveis de hierarquia, alguns campos podiam ser repetidos, outros não), então JAXB foi útil para ser capaz de manipular isso.
Aqui está um motivo para não usá-lo: o desempenho é prejudicado. Há uma boa quantidade de sobrecarga durante o empacotamento e o desempacotamento. Você também pode querer considerar outra API para vinculação de objeto XML - como JiBX: http://jibx.sourceforge.net/
É um "ORM para XML". Mais frequentemente usado junto com JAX-WS (e de fato as implementações da Sun são desenvolvidas juntas) para sistemas WS Death Star.
Eu uso JAXB no trabalho o tempo todo e realmente adoro isso. É perfeito para esquemas XML complexos que estão sempre mudando e especialmente bom para acesso aleatório de tags em um arquivo XML.
Eu odeio ser cafetão, mas acabei de começar um blog e esta é literalmente a primeira coisa que postei!
Confira aqui:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
Com JAXB você pode criar automaticamente representações XML de seus objetos (empacotamento) e representações de objeto do XML (descompactação).
No que diz respeito ao esquema XML, você tem duas opções:
Existem também algumas bibliotecas de serialização XML mais simples, como XStream , Digester ou XMLBeans, que podem ser alternativas.
JAXB é ótimo se você precisa codificar para alguma especificação XML externa definida como um esquema XML ( xsd
).
Por exemplo, você tem um aplicativo de negociação e deve relatar as negociações ao aplicativo Uber Lame Trade Reporting e eles lhe deram ultra.xsd
para continuar. Use o $JAVA_HOME/bin/xjc
compilador para transformar o XML em um monte de classes Java (por exemplo UltraTrade
).
Em seguida, você pode simplesmente escrever uma camada de adaptador simples para converter seus objetos de comércio UltraTrades
e usar o JAXB
para enviar os dados para o Ultra-Corp. Muito mais fácil do que bagunçar a conversão de suas negociações para o formato XML.
Quando tudo falha é quando a Ultra-Corp não obedece de fato suas próprias especificações, e o comércio price
que eles encerram como um xsd:float
deve ser expresso como um double
!
Por que precisamos do JAXB? Os componentes remotos (escritos em Java) de serviços da web usam XML como um meio para trocar mensagens entre si. Por que XML? Porque XML é considerada uma opção leve para troca de mensagens em redes com recursos limitados. Freqüentemente, precisamos converter esses documentos XML em objetos e vice-versa. Ex: Simple Java POJO Employee pode ser usado para enviar dados de Employee a um componente remoto (também um programa Java).
class Employee{
String name;
String dept;
....
}
Este Pojo deve ser convertido (Marshall) em um documento XML da seguinte forma:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
E no componente remoto, de volta ao objeto Java do documento XML (Un-Marshall).
O que é JAXB?
JAXB é uma biblioteca ou ferramenta para realizar esta operação de Marshalling e UnMarshalling. Isso o poupa dessa dor de cabeça, simples assim.
Você também pode verificar o JIBX. É também um excelente fichário de dados xml, especializado em OTA (Open Travel Alliance) e suportado por servidores AXIS2. Se você está procurando desempenho e compatibilidade, pode verificar:
JAXB fornece desempenho aprimorado por meio de otimizações de empacotamento padrão. JAXB define uma API de programador para ler e gravar objetos Java de e para documentos XML, simplificando assim a leitura e a gravação de XML via Java.