Construção de código personalizado com api java para xml ligação (jaxb)
Você pode construir o código personalizado com JAXB
Conteúdo
Quando você escreve SAX ou código DOM, você cria um programa de processamento de XML. Seu programa lê um documento, e usa o documento para fazer trabalho útil - começando com algo inofensivo como startElement public void ou node.getNodeName (). De qualquer maneira, seu programa não faz suposições sobre o que está dentro do documento. O documento tem um raiz elemento, alguns elementos filhos, e isso é tudo. Quaisquer hipóteses especiais que você faz sobre este documento realmente estreitar a utilidade do código.
código versátil contra código personalizado
Considere o código nas Listagens 1 e 2. Listagem 1, verifica cinco nós em uma árvore documento. Esses cinco nós temos que ser organizados de uma determinada maneira, ou então as falhas do programa. (A listagem quer um comentário e um nó raiz, com pelo menos dois filhos diretamente sob o nó raiz.)
Listagem 1: Exibindo alguns nós
importação org.w3c.dom.Node-
importação org.w3c.dom.NamedNodeMap-
classe MyTreeTraverser
{
MyTreeTraverser (nó do nó)
{
System.out.println (node.getNodeName ()) -
nó = node.getFirstChild () -
System.out.println (node.getNodeName ()) -
nó = node.getNextSibling () -
System.out.println (node.getNodeName ()) -
nó = node.getFirstChild () -
System.out.println (node.getNodeName ()) -
nó = node.getNextSibling () -
System.out.println (node.getNodeName ()) -
}
}
Listagem 2: percorrer a árvore DOM
importação org.w3c.dom.Node-
importação org.w3c.dom.NamedNodeMap-
classe MyTreeTraverser
{
Nó- nó
MyTreeTraverser (nó do nó)
{
this.node = Nó-
Mostrar nome()-
displayValue () -
se (node.getNodeType () == Node.ELEMENT_NODE)
displayAttributes () -
System.out.println () -
displayChildren () -
}
anular displayName ()
{
System.out.print ( “Name:“) -
System.out.println (node.getNodeName ()) -
}
anular displayValue ()
{
Corda nodeValue = node.getNodeValue () -
if (nodeValue! = null)
nodeValue = nodeValue.trim () -
System.out.print ( “Valor“) -
System.out.println (nodeValue) -
}
displayAttributes void ()
{
NamedNodeMap attribs = node.getAttributes () -
para (int i = 0- i lt; attribs.getLength () - i ++)
{
System.out.println () -
System.out.print ( “Atributo:“) -
System.out.print (attribs.item (i) .getNodeName ()) -
System.out.print (”=“) -
System.out.println (attribs.item (i) .getNodeValue ()) -
}
}
displayChildren void ()
{
criança nó = node.getFirstChild () -
while (criança! = null)
{
nova MyTreeTraverser (criança) -
child = child.getNextSibling () -
}
}
}
O código na Listagem 2 é muito mais geral. Este código verifica a estrutura do documento como ele é executado. Quando o código encontra um nó filho, ele verifica a criança e olha para os netos. Se não houver netos, o código procura por irmãos e irmãs. O código pode lidar com qualquer árvore de documentos - se ele tem um nó ou um milhar de nós.
Assim, Lista 2 é mais versátil do que Listagem 1. No entanto, esta versatilidade vem com inconvenientes - incluindo a possibilidade de muito alta sobrecarga. O código na Listagem 2 tem para analisar todo o documento XML - e depois colocar uma representação da árvore do documento na memória do computador. Se o documento for muito grande, então a representação é grande: Memória fica inchado com tudo o que os dados temporários, eo código na Listagem 2 retarda a um rastejamento.
Os benefícios da personalização
Imagine que você está tentando conduzir a Faneuil Hall, em Boston, Massachusetts. Não importa onde você começa de- a viagem será sempre confuso e difícil. De qualquer forma, você tem que planejar sua rota. Você pode se perder nas proximidades Revere ou Cambridge ou no centro de Boston. Dependendo de seus recursos, você tem duas opções:
- Você pode parar em um posto de gasolina e comprar um mapa. Se fizer isso, então você pode nunca chegar a Faneuil Hall. Afinal, você tem que encontrar onde você está no mapa, procurar rotas alternativas, escolher uma rota, e depois (céu ajudá-lo) tentar seguir o caminho sem se perder novamente.
- Você pode dizer ao seu sistema de GPS caro, falando que você quer chegar ao Faneuil Hall. O sistema irá traçar uma rota personalizada e guiá-lo, volta a volta, a partir de qualquer lugar miserável você está em para a melhor rota que leva de lá para Faneuil Hall. A rota é tão personalizada que a voz GPS diz (por exemplo), “Não há nenhum sinal neste cruzamento, mas vire à esquerda de qualquer maneira.” Mais tarde, a voz diz: “Há dois sinais neste cruzamento, e os sinais se contradizem . Mas vire à direita de qualquer maneira.”
Usando o mapa de papel dá mais trabalho (mais tempo, esforço, destreza e paciência) de usar o GPS falar. Por quê? Porque o mapa de papel não é personalizado para o seu necessidades- específica em vigor, ele diz: “Aqui está toda a área metropolitana de Boston. Faneuil Hall está em algum lugar. Você descobrir o que fazer a seguir.”
Um sistema personalizado é (como você pode esperar) mais fácil de usar do que aquele que não está adaptado à sua situação imediata. Assim, o código de processamento de XML da Listagem 2 faz uma enorme árvore DOM,-engolindo recurso no espaço de memória do seu computador ( “Aqui está a árvore - você descobrir o que fazer a seguir. . .”) Porque o código não é personalizado. O código funciona para qualquer documento antigo - e não apenas o que você tem na mão - e sempre engole recursos para fazê-lo.
Video: [ Web Service RESTful ] Aula 015 – java biblioteca JAXB gerar XML – video FullHD
A essência do JAXB
A idéia por trás JAXB é criar classe sob medida para atender às suas necessidades atuais. Você toma a descrição de um documento XML, executá-lo através de um programa especial chamado compilador esquema, e obter uma marca nova classe chamada classe gerada. Esta classe gerada é simplificado para trabalhar com determinados documentos XML.
Por exemplo, se seus documentos XML tem elementos nomeados total, então a classe gerada pode ter métodos setTotal e obterTotal. Se o elemento de um documento tem um atributo fullName, em seguida, a classe gerada pode ter métodos setFullName e getFullName. (Ver Figura 1.)
A conexão entre uma parte de um documento XML e uma parte de uma classe Java é chamado de obrigatório. Com todas essas ligações, uma instância da classe representa um único documento XML.
Assim como você conectar um objeto com um documento XML? Bem, a classe gerada tem métodos chamados unmarshal e marechal. (Ver Figura 2)
- O método unmarshal lê um arquivo XML. O método obtém valores a partir do documento XML, e atribui esses valores para variáveis no objeto Java.
- O método marechal grava um arquivo XML. O método obtém valores do objeto de Java, e usa esses valores para criar o documento XML.
Com métodos como estes, você pode recuperar e modificar os dados em um documento XML.