Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Software livre  >

JiBX 1.2, Parte 2: Esquema XML para Código Java

Gerar código Java customizado mais limpo a partir do esquema XML

developerWorks
Ir para a página anteriorPágina 4 de 14 Ir para a próxima página

Opções de documento

Código de amostra


Classificar este tutorial

Ajude-nos a melhorar este conteúdo


Trabalhando com Documentos XML

Nesta seção, você aprenderá sobre como executar o compilador de ligação JiBX e como usar JiBX no tempo de execução para trabalhar com documentos XML.

Executando o Compilador de Ligação JiBX

Para usar a definição de ligação gerada no trabalho com documentos XML, primeiro, você precisa executar o compilador de ligação JiBX. O compilador de ligação inclui bytecode em seus arquivos de classe compilados que realmente implementa as conversões para e a partir de XML, conforme especificado pela definição de ligação. Você deve executar o compilador de ligação toda vez que recompilar suas classes Java ou modificar a definição de ligação, portanto, geralmente é melhor incluir a etapa do compilador de ligação como parte do processo de construção padrão de seu projeto.

O compilador de ligação está incluído na distribuição JiBX como parte do jibx-bind.jar. A documentação de JiBX fornece detalhes integrais sobre as diferentes maneiras de executar o compilador de ligação, inclusive como você pode chamá-lo ao executar ser aplicativo em vez de como parte da construção. JiBX também fornece plug-ins para o Eclipse e o IntelliJ IDEA que executam o compilador de ligação automaticamente quando você está trabalhando nesses IDEs.

Para os propósitos deste tutorial, vamos manter as coisas simples e simplesmente executar o compilador de ligação através de Ant. O destino compile debuild.xml prepara para a ligação compilando o código gerado e um programa de teste fornecido, enquanto o destino bind realmente executa o compilador de ligação. A Figura 2 mostra a saída que você deve ver ao executar esses destinos, supondo que você já tenha executado os destinos codegen . (Você também pode executar todos os três destinos em seqüência, listando-os em ordem na linha de comando: ant codegen compile bind.)


Figura 2. Tarefas de Construção Ant compile e bind
Ant build output for compile and binding compiler


Voltar para parte superior


Usando JiBX no Tempo de Execução

A Listagem 3 mostra um documento de teste simples que corresponde ao esquema, incluído no download do código do tutorial como starter.xml:


Listagem 3. Documento de Teste para Esquema de Pedido

<order orderDate="2008-10-18" shipDate="2008-10-22" xmlns="http://jibx.org/starter">
  <orderNumber>12345678</orderNumber>
  <customer>
    <customerNumber>5678</customerNumber>
    <firstName>John</firstName>
    <lastName>Smith</lastName>
  </customer>
  <billTo state="WA" postCode="98059">
    <street1>12345 Happy Lane</street1>
    <city>Plunk</city>
    <country>USA</country>
  </billTo>
  <shipping>PRIORITY_MAIL</shipping>
  <shipTo state="WA" postCode="98034">
    <street1>333 River Avenue</street1>
    <city>Kirkland</city>
  </shipTo>
  <item quantity="1" price="5.99" id="FA9498349851"/>
  <item quantity="2" price="9.50" id="GC1234905049"/>
  <item quantity="1" price="8.95" id="AX9300048820"/>
</order>

O pacote de download também inclui um programa de teste simples, mostrado aqui como a Listage, 4, que demonstra o uso de JiBX para desserializar e serializar documentos. Serializar é o processo de gerar uma representação XML para um objeto em memória, potencialmente incluindo objetos vinculados a partir do objeto original. Desserializar é o processo inverso de serializar, construir um objeto (e potencialmente um gráfico de objetos vinculados) em memória de uma representação XML. O destino Ant run executa esse programa de teste, usando o documento Listagem 3 como entrada e gravando a cópia serializada do documento em um arquivo denominado out.xml.


Listagem 4. Programa de Teste
public class Test
{
    /**
     * Desserializar o documento de amostra de um arquivo, computar e configurar total do pedido, em seguida,
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- Erro XML:  A linha anterior não é maior do que o máximo de 90 caracteres ---------|
     * serializá-lo novamente em outro arquivo.
     *
     * @param args
     */
    public static void main(String[] args) {
        if (args.length < 2) {
            System.out.println("Usage: java -cp ... " +
                "org.jibx.starter.Test in-file out-file");
            System.exit(0);
        }
        try {

            // desserializar as informações do cliente do arquivo
            IBindingFactory bfact = BindingDirectory.getFactory(Order.class);
            IUnmarshallingContext uctx = bfact.createUnmarshallingContext();
            FileInputStream in = new FileInputStream(args[0]);
            Order order = (Order)uctx.unmarshalDocument(in, null);

            // compute o valor total do pedido
            float total = 0.0f;
            for (Iterator<Item> iter = order.getItems().iterator(); iter.hasNext();) {
                Item item = iter.next();
                total += item.getPrice() * item.getQuantity();
            }
            order.setTotal(new Float(total));

            // desserializar objeto de volta para o arquivo (com bom deslocamento, como UTF-8)
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- Erro XML:  A linha anterior não é maior do que o máximo de 90 caracteres ---------|
            IMarshallingContext mctx = bfact.createMarshallingContext();
            mctx.setIndent(2);
            FileOutputStream out = new FileOutputStream(args[1]);
            mctx.setOutput(out, null);
            mctx.marshalDocument(order);
            System.out.println("Processed order with " +  order.getItems().size() +
                " items and total value " + total);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (JiBXException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}

A Figura 3 mostra a saída que você deve ver ao executar o destino run :


Figura 3. Tarefa de Construção Ant run
Ant build output from running test program

Esse é o mesmo programa de teste que o usado na Parte 1 e está sujeito às mesmas limitações discutidas nesse tutorial. Exatamente como na Parte 1, o arquivo out.xml possui a saída gerada serializando de volta os dados do pedido obtidos desserializando o documento original.



Voltar para parte superior



Ir para a página anteriorPágina 4 de 14 Ir para a próxima página