Introdução ao JiBX

Introdução ao JiBX

1. Visão geral

JiBX é uma ferramenta para vincular dados XML a objetos Java. Ele fornece desempenho sólido comparado a outras ferramentas comuns, como JAXB.

O JiBX também é bastante flexível quando comparado a outras ferramentas Java-XML, usando definições de ligação para dissociar a estrutura Java da representação XML, para que cada uma possa ser alterada independentemente.

Neste artigo, vamos explorar as diferentes maneiras fornecidas pelo JiBX de vincular o XML a objetos Java.

2. Componentes do JiBX

2.1. Documento de definição de vinculação

O documento de definição de ligação especifica como seus objetos Java são convertidos para ou do XML.

O compilador de ligação JiBX recebe uma ou mais definições de ligação como entrada, junto com os arquivos de classe reais. Ele compila a definição de ligação no bytecode Java adicionando-a aos arquivos de classe. Depois que os arquivos de classe foram aprimorados com esse código de definição de ligação compilado, eles estão prontos para trabalhar com o tempo de execução JiBX.

2.2. Ferramentas

Existem três ferramentas principais que vamos usar:

  • BindGen - para gerar as definições de esquema de ligação e correspondência a partir do código Java

  • CodeGen - para criar o código Java e uma definição de ligação a partir de um esquema XML

  • JiBX2Wsdl - para fazer a definição de ligação e um WSDL correspondente junto com uma definição de esquema do código Java existente

3. Configuração do Maven

3.1. Dependências

Precisamos adicionar a dependência jibx-run empom.xml:


    org.jibx
    jibx-run
    1.3.1

A versão mais recente desta dependência pode ser encontradahere.

3.2. Plugins

Para realizar as diferentes etapas em JiBX, como geração de código ou geração de ligação, precisamos configurarmaven-jibx-plugin empom.xml.

Para o caso em que precisamos começar a partir do código Java e gerar a definição de ligação e esquema, vamos configurar o plugin:


    org.jibx
    maven-jibx-plugin
    ...
    
        src/main/resources
        
            *-binding.xml
        
        
            template-binding.xml
        
        true
    
    
        
            process-classes
            
                bind
            
        
    

Quando temos um esquema e geramos o código Java e a definição de ligação, omaven-jibx-plugin é configurado com as informações sobre o caminho do arquivo de esquema e o caminho para o diretório do código-fonte:


    org.jibx
    maven-jibx-plugin
    ...
    
        
        generate-java-code-from-schema
        
             schema-codegen
        
            
                src/main/jibx
                
                    customer-schema.xsd
                
                true
            
            
            
                compile-binding
                
                    bind
                
            
                target/generated-sources
                true
                true
                true
            
        
    

4. Definições de ligação

Definições de ligação são a parte principal do JiBX. Um arquivo de ligação básico especifica o mapeamento entre os campos de objeto XML e Java:


    
        ...
        
    

4.1. Mapeamento de Estrutura

O mapeamento da estrutura faz com que a estrutura XML pareça com a estrutura do objeto:


    
    ...
    
        ...
        
    
    ...
    

As classes correspondentes para essa estrutura serão:

public class Customer {

    private Person person;
    ...

    // standard getters and setters

}

public class Person {

    private String lastName;
    ...

    // standard getters and setters

}

4.2. Mapeamentos deCollection eArray

A ligação JiBX fornece uma maneira fácil de trabalhar com uma coleção de objetos:


    

        
            
              ...
        
     ...

Vamos ver os objetos Java de mapeamento correspondentes:

public class Order {
    List
addressList = new ArrayList<>(); ... // getters and setters here } public static class Address { private String name; ... // standard getters and setter }

4.3. Mapeamentos Avançados

Até agora, vimos uma definição básica de mapeamento. O mapeamento JiBX fornece diferentes tipos de mapeamento, como mapeamento abstrato e herança de mapeamento.

Vamos ver como podemos definir um mapeamento abstrato:


    

        
            ...
            
        
        
        
        
    

    
        
    

Vamos ver como isso se liga a objetos Java:

public class Customer {
    private Person person;
    ...
    private Phone homePhone;
    private Phone officePhone;

    // standard getters and setters

}

Aqui, especificamos vários camposPhone na classeCustomer. O próprioPhone é novamente um POJO:

public class Phone {

    private String number;

    // standard getters and setters
}

Além dos mapeamentos regulares, também podemos definir extensões. Cada mapeamento de extensão refere-se a algum mapeamento básico. No momento da empacotamento, o tipo de objeto real decide qual mapeamento XML é aplicado.

Vamos ver como as extensões funcionam:


    
        
    
    ...
    
        
        ...
    
    ...

Vejamos os objetos Java correspondentes:

public class Identity {

    private long customerId;

    // standard getters and setters
}

5. Conclusão

Neste rápido artigo, exploramos diferentes maneiras pelas quais podemos usar o JiBX para converter XML para / de objetos Java. Também vimos como podemos usar definições de ligação para trabalhar com diferentes representações.

O código completo para este artigo está disponívelover on GitHub.