Lar Finanças Pessoais Construção de código personalizado com Java API for XML Binding (JAXB) - dummies

Construção de código personalizado com Java API for XML Binding (JAXB) - dummies

Índice:

Vídeo: AWS re:Invent 2015 | (DEV204) Building High-Performance Native Cloud Apps In C++ 2024

Vídeo: AWS re:Invent 2015 | (DEV204) Building High-Performance Native Cloud Apps In C++ 2024
Anonim

Você pode criar um código personalizado com JAXB - o Java API for XML Binding . Com o JAXB, você tira um documento XML e faz um arquivo de classe Java perfeito para processar o documento. Quando suas necessidades mudam e a classe já não faz o que você quer que faça, você acabou de criar uma nova subclasse.

Quando você escreve o código SAX ou DOM, você cria um programa de processamento XML. Seu programa lê um documento e usa o documento para fazer um trabalho útil - começando com algo inofensivo como public void startElement ou nó. getNodeName (). De qualquer forma, seu programa não faz suposições sobre o que está dentro do documento. O documento tem um elemento raiz, alguns elementos filho, e isso é tudo. Quaisquer hipóteses especiais que você faz sobre esse documento realmente restringem a utilidade do código.

Código versátil versus código personalizado

Considere o código nas Listagens 1 e 2. A Listagem 1, verifica cinco nós em uma árvore de documentos. Esses cinco nós precisam ser organizados de uma certa maneira, ou então o programa falha. (A lista quer um comentário e um nó raiz, com pelo menos dois filhos diretamente sob o nó raiz.)

Listagem 1: Exibindo alguns nós

importar org. w3c. dom. Nó;

import org. w3c. dom. NamedNodeMap;

classe MyTreeTraverser

{

MyTreeTraverser (nó do nó)

{

Sistema. Fora. println (node. getNodeName ());

node = node. getFirstChild ();

Sistema. Fora. println (node. getNodeName ());

node = node. getNextSibling ();

Sistema. Fora. println (node. getNodeName ());

node = node. getFirstChild ();

Sistema. Fora. println (node. getNodeName ());

node = node. getNextSibling ();

Sistema. Fora. println (node. getNodeName ());

}

}

Listagem 2: Percorrendo a árvore DOM

import org. w3c. dom. Nó;

import org. w3c. dom. NamedNodeMap;

classe MyTreeTraverser

{

Nó do nó;

MyTreeTraverser (nó do nó)

{

isto. node = node;

displayName ();

displayValue ();

se (nó. GetNodeType () == Nó. ELEMENT_NODE) ​​

displayAttributes ();

Sistema. Fora. println ();

displayChildren ();

}

void displayName ()

{

Sistema. Fora. imprimir ("Nome:");

Sistema. Fora. println (node. getNodeName ());

}

void displayValue ()

{

String nodeValue = node. getNodeValue ();

if (nodeValue! = Null)

nodeValue = nodeValue. aparar();

Sistema. Fora. imprimir ("Valor:");

Sistema. Fora. println (nodeValue);

}

void displayAttributes ()

{

NamedNodeMap attribs = nó. getAttributes ();

para (int i = 0; i

{

Sistema. Fora. println ();

Sistema. Fora. imprimir ("Atributo:");

Sistema. Fora. print (attribs. item (i). getNodeName ());

Sistema. Fora. imprimir ("=");

Sistema. Fora. println (attribs. item (i). getNodeValue ());

}

}

void displayChildren ()

{

Nó child = node. getFirstChild ();

while (child! = Null)

{

novo MyTreeTraverser (filho);

criança = criança. getNextSibling ();

}

}

}

O código na Listagem 2 é muito mais geral. Esse código verifica a estrutura do documento conforme ele é executado. Quando o código encontra um nó filho, ele varre a criança e procura por netos. Se não houver netos, o código procura irmãos e irmãs. O código pode lidar com qualquer árvore de documentos - se possui um nó ou mil nós.

Assim, o Listado 2 é mais versátil do que o Listado 1. No entanto, essa versatilidade vem com inconvenientes - incluindo a possibilidade de despesas gerais muito altas. O código na Listagem 2 tem que 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, a representação é grande: a memória fica inchada com todos os dados temporários e o código da Listagem 2 diminui para um rastreamento.

Os benefícios da personalização

Imagine que você está tentando dirigir para Faneuil Hall em Boston, Massachusetts. Não importa de onde você começar; a viagem sempre será confusa e difícil. De qualquer forma, você precisa planejar sua rota. Você pode se perder nas proximidades de Revere ou Cambridge ou no centro de Boston. Dependendo dos seus recursos, você tem duas opções:

  • Você pode parar em um posto de gasolina e comprar um mapa. Se você fizer isso, então você nunca pode chegar ao Faneuil Hall. Afinal, você tem que encontrar onde você está no mapa, procurar rotas alternativas, escolher uma rota e, em seguida, (o céu ajudá-lo) a tentar seguir a rota sem se perder novamente.
  • Você pode contar o seu caro sistema de GPS falando que deseja chegar ao Faneuil Hall. O sistema irá traçar uma rota personalizada e guiá-lo, girar por turno, de qualquer lugar miserável que você esteja na ótima rota que leva de lá para o Faneuil Hall. A rota é tão personalizada que a voz do GPS diz (por exemplo), "Não há nenhum sinal nesse cruzamento, mas vire à esquerda de qualquer maneira. "Mais tarde, a voz diz:" Há dois sinais nesse cruzamento, e os sinais se contradizem. Mas torne-se certo mesmo. "

Usar o mapa de papel leva mais trabalho (mais tempo, esforço, destreza e paciência) do que usar o GPS falante. Por quê? Como o mapa em papel não é personalizado para suas necessidades específicas; na verdade, diz: "Aqui está toda a área metropolitana de Boston. Faneuil Hall está lá 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 XML do Listado 2 faz uma enorme árvore de DOM que engasga recursos no espaço de memória do seu computador ("Aqui está a árvore - você descobrir o que fazer em seguida …") porque o código não é ' T personalizado.O código funciona para qualquer documento antigo - não apenas o que você tem em mãos - e sempre engolir recursos para fazê-lo.

A essência do JAXB

A idéia por trás do JAXB é criar uma classe customizada para atender às suas necessidades atuais. Você tira a descrição de um documento XML, execute-o através de um programa especial chamado compilador de esquema e obtenha uma nova classe chamada classe gerada . Essa classe gerada é simplificada para trabalhar com documentos XML específicos.

Por exemplo, se seus documentos XML possuem elementos denominados Total, a classe gerada pode ter métodos setTotal e getTotal. Se o elemento de um documento tiver um atributo fullName, a classe gerada pode ter os métodos setFullName e getFullName. (Veja a Figura 1.)

A conexão entre uma parte de um documento XML e uma parte de uma classe Java é chamada de vinculativo . Com todas essas ligações, uma instância da classe representa um único documento XML.

Figura 1: Um objeto representa um documento.

Então, como você conecta um objeto com um documento XML? Bem, a classe gerada possui métodos chamados unmarshal e marshal. (Veja a Figura 2.)

  • O método unmarshal lê um arquivo XML. O método obtém valores do documento XML e atribui esses valores a variáveis ​​no objeto Java.
  • O método marshal escreve um arquivo XML. O método obtém valores do objeto Java e usa esses valores para criar o documento XML.

Com métodos como esses, você pode recuperar e modificar os dados em um documento XML.

Figura 2: Valores de leitura e escrita.

Construção de código personalizado com Java API for XML Binding (JAXB) - dummies

Escolha dos editores

Acalma suas emoções ao praticar Mindfulness - dummies

Acalma suas emoções ao praticar Mindfulness - dummies

Aqui, você descobre a maneira consciente de gerenciar as emoções - as etapas para tome quando estiver sentindo baixo, excessivamente irritado ou desconfortavelmente ansioso. As emoções positivas podem ser um sentimento maravilhoso. A alegria, a alegria, a emoção e a felicidade são perfeitas. Mas como você pode lidar com as chamadas emoções negativas? Use a atenção para a saúde emocional A atenção plena está se tornando ...

Como começar o seu dia de trabalho com meditação Mindfulness - dummies

Como começar o seu dia de trabalho com meditação Mindfulness - dummies

Você pode encontrar a meditação mindfulness é uma ótima maneira de Comece o seu dia de trabalho. Quando chegar ao trabalho pela manhã, talvez já esteja estressado. Depois de uma agitada hora ou duas preparando as crianças para a escola ou regatear com seu parceiro ou lidar com alguma emergência em casa, seguido de ...

Os melhores sites Mindfulness - dummies

Os melhores sites Mindfulness - dummies

, Independentemente de você morar no Reino Unido ou em outro lugar, se você procurar "mindfulness" 'on-line, você literalmente obterá milhões de resultados. Como você pode dizer o trigo da palha? Aqui estão alguns sites que você achará útil. Atento. Este recurso maravilhoso tem muitos conteúdos de alta qualidade de professores excelentes de atenção plena. O ...

Escolha dos editores

HDR Solução de problemas: Nada está funcionando - manequins

HDR Solução de problemas: Nada está funcionando - manequins

Quando você se depara com uma situação com suas fotografias de alcance dinâmico elevado e parece que nada que você está fazendo está funcionando - as configurações não parecem boas, a imagem parece errada, os efeitos são ruins - relaxe e faça uma pausa. A imagem está lhe dizendo algo. Que algo às vezes é relacionado a forçar ...

HDR Resolução de problemas: falta de imaginação - dummies

HDR Resolução de problemas: falta de imaginação - dummies

A imaginação é uma coisa poderosa ao preparar imagens HDR, fato que é tornou-se mais óbvio quando você vê o resultado de não usá-lo versus usá-lo. A imagem superior desta figura é uma imagem HDR de um diner local durante a "hora dourada" - naquele horário atrasado (ou manhã) quando ...

HDR Solução de problemas: Sharpening - dummies

HDR Solução de problemas: Sharpening - dummies

Se você ficar apanhado na perfeição, você está preparado para aumentar seu HDR imagens. Os fotógrafos às vezes estão obcecados com a nitidez em suas fotos. Eles querem que tudo seja pixelly perfeitamente afiado do nariz da câmera até o infinito, independentemente da lente, abertura, ISO ou velocidade do obturador que eles usem. Esta figura mostra os resultados ...

Escolha dos editores

Cisco Rede: Mostrar comando de versão em um Switch - dummies

Cisco Rede: Mostrar comando de versão em um Switch - dummies

Em qualquer componente de rede da Cisco, o show O comando de versão é aplicável a qualquer hardware usando o Sistema Operacional Cisco IET (Internetwork Operating System), incluindo switches. O comando show version mostra informações ligeiramente diferentes, de acordo com o tipo de dispositivo em que você usa. Veja a saída do comando show version em um switch e ...

Cisco Rede: Modo de operação EXEC privilegiado - manequins

Cisco Rede: Modo de operação EXEC privilegiado - manequins

Você precisa usar o modo EXEC privilegiado se quiser realmente tem acesso de atualização a um sistema de rede Cisco,. Para entrar neste modo no modo EXEC do usuário, emita o comando enable, que solicita uma senha, se configurado. Como o nome do modo sugere, este modo tem privilégios extras para permitir ...

Cisco Rede: Configuração de Senha de Shell Seguro (SSH) - manequins

Cisco Rede: Configuração de Senha de Shell Seguro (SSH) - manequins

Shell seguro (SSH) é um protocolo de rede para seus dispositivos Cisco, que é mais seguro do que o Telenet. Definir uma senha segura é um requisito de configuração para este protocolo. Para configurar o acesso a um switch Cisco para SSH, você precisará ter uma conta de usuário criada em sua opção. O exemplo supõe que você tenha ...