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.