Pergunta

Não é cara aqui jurando que JAXB é a melhor coisa desde o pão fatiado. Estou curioso para ver o que os usuários Stack Overflow acho que o caso de uso é para JAXB eo que o torna uma boa ou uma má solução para esse caso.

Foi útil?

Solução

Eu sou um grande fã de JAXB para manipular XML. Basicamente, ele fornece uma solução para este problema (estou assumindo familiaridade com XML, estruturas de dados Java e esquemas XML):

Trabalho com XML é difícil. Um precisa uma maneira de levar um arquivo XML - que é basicamente um arquivo de texto -. E convertê-lo em algum tipo de estrutura de dados, que seu programa pode então manipular

JAXB terá um esquema XML que você escrever e criar um conjunto de classes que correspondem a esse esquema. Os utilitários JAXB irá criar a hierarquia de estruturas de dados para manipular que XML.

JAXB pode então ser usado para ler um arquivo XML, e em seguida, criar instâncias das classes geradas - carregados com os dados do seu XML. JAXB também faz o inverso:. Toma 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 os .jars JAXB.) A forma como ele cria a hierarquia de classes é intuitivo, e na minha experiência, faz um trabalho decente abstrair o "XML" para que eu possa focar em "dados".

Assim, para responder à sua pergunta: eu esperaria que, para pequenos arquivos XML, JAXB pode ser um exagero. Ela exige que você para criar e manter um esquema XML, e de usar "métodos didáticos padrão" de utilizar classes Java para estruturas de dados. (Classes principais, pequenas internas-classes para representar "nós", e uma enorme hierarquia deles.) Assim, JAXB provavelmente não é tão grande para um simples linear lista de "preferências" para um aplicativo.

Mas se você tem um esquema XML bastante complexo, e um monte de dados contido dentro dele, então JAXB é fantástico. No meu projeto, eu estava convertendo grandes quantidades de dados entre binário (que foi consumido por um programa C) e XML (de modo que os seres humanos poderiam consumir e modificar esses dados). O esquema XML resultante era não triviais (muitos níveis de hierarquia, alguns campos poderiam ser repetidas, outros não poderia) para JAXB foi útil para ser capaz de manipular isso.

Outras dicas

Aqui está uma razão para não usá-lo: sofre de desempenho. Há uma boa dose de sobrecarga quando o empacotamento e unmarshaling. Você também pode querer considerar outra API para a ligação XML a objetos - como JiBX: http://jibx.sourceforge.net/

É um "ORM para XML". Na maioria das vezes usado juntamente com JAX-WS (e de fato as implementações Sun são desenvolvidas em conjunto) para sistemas WS da Estrela da Morte.

Eu uso JAXB no trabalho o tempo todo e eu realmente adoro isso. É perfeito para esquemas XML complexas que estão sempre mudando e especialmente bom para acesso aleatório de marcas em um arquivo XML.

Eu odeio a pimp mas eu só comecei um blog e isso é, literalmente, a primeira coisa que eu postei sobre!

Confira aqui:

http://arthur.gonigberg.com/2010 / 04/21 / getting-started-com-jaxb /

Com JAXB você pode criar automaticamente representações XML de seus objetos (triagem) e representações de objetos do XML (unmarshalling).

Quanto ao esquema XML está em causa, você tem duas opções:

  • Gerar classes Java a partir de um XSD
  • Gerar um XSD a partir de suas classes Java

Existem também algumas bibliotecas de serialização XML simples, como XStream , digestor ou XMLBeans que possa ser alternativas.

JAXB é ótimo se você tem que código para alguma especificação XML externo definido como um esquema XML (xsd).

Por exemplo, você tem um aplicativo de negociação e você deve relatar os comércios à Uber Lame Trade Relatório App e eles te dei ultra.xsd para estar ficando com. Use o compilador $JAVA_HOME/bin/xjc para transformar o XML em um monte de classes Java (por exemplo UltraTrade).

Depois, é só escrever uma simples adaptador camada para converter seus objetos comerciais para UltraTrades e usar o JAXB para empacotar os dados através de Ultra-Corp. Muito fácil do que brincar sobre a conversão de seus comércios em seu formato XML.

Onde tudo acontece é quando Ultra-Corp realmente não tenho obedecido a sua própria especificação, eo price comércio que eles têm para baixo como um xsd:float realmente deve ser expressa como uma double!

Por que precisamos de JAXB? Os componentes remotos (escrito em Java) de usos de web services XML como um meio para trocar mensagens entre si. Por que XML? Como o XML é considerado opção leve para troca de mensagens em redes com recursos limitados. Então, muitas vezes precisamos converter esses documentos XML em objetos e vice-versa. Por exemplo:. Simples Java POJO empregado pode ser usado para enviar os dados dos funcionários para componente remoto (também um programa Java)

class Employee{
 String name;
 String dept;
 ....
}

Esta Pojo devem ser convertidos (Marshall) no documento XML da seguinte forma:

<Employee>
  <Name>...</Name>
  <Department>...</Department>
</Employee>

E no componente remoto, de volta ao objeto Java a partir de documentos XML (Un-Marshall).

O que é JAXB?

JAXB é uma biblioteca ou uma ferramenta para executar esta operação de triagem e unmarshalling. Ela não poupa você deste dor de cabeça, tão simples como isso.

Você também pode verificar jibx também. É também uma boa pasta de dados XML, que também é especializada em OTA (Travel Alliance Open) e é apoiada por servidores Axis2. Se você está à procura de desempenho e compatibilidade, você pode verificá-la:

http://jibx.sourceforge.net/index.html

JAXB oferece desempenho melhorado através de otimizações de triagem padrão. JAXB define uma API programador para ler e escrever objetos Java para e de documentos XML, assim, simplificar a leitura e escrita de XML através de Java.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top