Введение в JiBX

Введение в JiBX

1. обзор

JiBX - это инструмент для привязки данных XML к объектам Java. Он обеспечивает хорошую производительность по сравнению с другими распространенными инструментами, такими как JAXB.

JiBX также достаточно гибок по сравнению с другими инструментами Java-XML, используя определения привязки для отделения структуры Java от представления XML, так что каждое из них может быть изменено независимо.

В этой статье мы рассмотрим различные способы, предоставляемые JiBX для привязки XML к объектам Java.

2. Компоненты JiBX

2.1. Обязательный документ определения

Документ определения привязки определяет, как ваши объекты Java преобразуются в или из XML.

Компилятор привязки JiBX принимает одно или несколько определений привязки в качестве входных данных вместе с реальными файлами классов. Он компилирует определение привязки в байт-код Java, добавляя его в файлы классов. Как только файлы классов будут улучшены с помощью этого скомпилированного кода определения привязки, они готовы к работе со средой выполнения JiBX.

2.2. инструменты

Есть три основных инструмента, которые мы собираемся использовать:

  • BindGen - для генерации привязки и сопоставления определений схемы из кода Java

  • CodeGen - для создания кода Java и определения привязки из схемы XML

  • JiBX2Wsdl - чтобы сделать определение привязки и соответствующий WSDL вместе с определением схемы из существующего кода Java

3. Конфигурация Maven

3.1. зависимости

Нам нужно добавить зависимость jibx-run вpom.xml:


    org.jibx
    jibx-run
    1.3.1

Последнюю версию этой зависимости можно найти вhere.

3.2. Плагины

Чтобы выполнить различные шаги в JiBX, такие как генерация кода или генерация привязки, нам нужно настроитьmaven-jibx-plugin вpom.xml.

В случае, когда нам нужно начать с кода Java и сгенерировать привязку и определение схемы, давайте настроим плагин:


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

Когда у нас есть схема и мы генерируем Java-код и определение привязки,maven-jibx-plugin настраивается с использованием информации о пути к файлу схемы и пути к каталогу исходного кода:


    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. Обязательные определения

Обязательные определения являются основной частью JiBX. Файл базовой привязки определяет отображение между полями объектов XML и Java:


    
        ...
        
    

4.1. Структурное отображение

Отображение структуры делает структуру XML похожей на структуру объекта:


    
    ...
    
        ...
        
    
    ...
    

Соответствующие классы для этой структуры будут:

public class Customer {

    private Person person;
    ...

    // standard getters and setters

}

public class Person {

    private String lastName;
    ...

    // standard getters and setters

}

4.2. ОтображенияCollection иArray

Привязка JiBX обеспечивает простой способ работы с коллекцией объектов:


    

        
            
              ...
        
     ...

Давайте посмотрим на соответствующее сопоставление объектов Java:

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

4.3. Расширенные сопоставления

До сих пор мы видели базовое определение отображения. Отображение JiBX обеспечивает различные варианты отображения, такие как абстрактное отображение и наследование отображения.

Давайте посмотрим, как мы можем определить абстрактное отображение:


    

        
            ...
            
        
        
        
        
    

    
        
    

Давайте посмотрим, как это связывается с объектами Java:

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

    // standard getters and setters

}

Здесь мы указали несколько полейPhone в классеCustomer. СамPhone снова является POJO:

public class Phone {

    private String number;

    // standard getters and setters
}

В дополнение к обычным отображениям мы также можем определять расширения. Каждое расширение сопоставления относится к некоторому базовому сопоставлению. Во время маршалинга фактический тип объекта решает, какое сопоставление XML будет применено.

Посмотрим, как работают расширения:


    
        
    
    ...
    
        
        ...
    
    ...

Давайте посмотрим на соответствующие объекты Java:

public class Identity {

    private long customerId;

    // standard getters and setters
}

5. Заключение

В этой быстрой статье мы рассмотрели различные способы использования JiBX для преобразования XML в / из объектов Java. Мы также видели, как мы можем использовать обязательные определения для работы с различными представлениями.

Полный код этой статьи доступенover on GitHub.