Рубрики
Без рубрики

Учебник по JiBX

Учебник по JiBX, Пример JiBX, Пример привязки JiBX, загрузка JiBX-файлов, xml-файл jibx в объект java, сортировка, удаление, привязка муравья jibx, пример сборки муравья

Автор оригинала: Pankaj Kumar.

Добро пожаловать в учебник по JiBX. JiBX-это очень мощная платформа для преобразования XML-данных в объекты java и наоборот. Это очень полезно при интеграции приложений, где XML является форматом для передачи данных. Например, Веб-сервисы и интеграция устаревших систем на основе Модели, ориентированной на сообщения .

Насмешка

Преобразование объекта Java в XML называется Сортировкой , а создание объекта java из XML называется удалением .

Существует множество фреймворков, доступных для преобразования XML, таких как JAXB и XMLBeans, но JiBX отличается подходом к процессу привязки и преобразования XML.

JiBX выполняет эти задачи с помощью служебных классов, созданных во время компиляции с помощью сценариев ant. Этот подход сокращает время обработки за счет перехода от традиционного двухэтапного процесса с другими анализаторами к одноэтапному.

Тесты, выполненные на различных инструментах привязки XML, показали, что JiBX является самой быстрой и эффективной платформой для анализа памяти на сегодняшний день.

Здесь, в учебнике по JiBX, я предоставляю пример приложения для преобразования XML с помощью анализатора JiBX.

Системная информация :

  1. Mac OS X версии 10.6.4
  2. Java 1.5
  3. Муравей 1.7.0
  4. Среда разработки Eclipse для настройки проекта
  5. банки с насмешками – bcel.jar, насмешка-привязка.банку и jibx-run.jar

bcel.jar и насмешка-привязка.jar используются для создания служебных классов для преобразования XML и jibx-run.jar требуется для среды выполнения.

Вы можете скачать эти банки или использовать maven pom.xml чтобы загрузить его, а затем переименовать.


  	org.jibx
  	jibx-bind
  	1.3.1

Пример привязки JiBX

Допустим, у нас есть класс сотрудников с тремя параметрами – идентификатор, имя и дата найма.

package com.journaldev.jibx.bean;

public class Employee {
	private String id;
	private String name;
	private String hireDate;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getHireDate() {
		return hireDate;
	}
	public void setHireDate(String hireDate) {
		this.hireDate = hireDate;
	}
}

Нам нужно преобразовать этот объект в XML следующим образом:



  Cisco
  Jan 03, 2011

Для работы с JiBX нам нужно настроить четыре вещи.

  1. Файл определения сопоставления ( binding.xml ), который используется компилятором привязки JiBX для создания определения привязки в байтовом коде, т. е. файлах классов
  2. Компилятор JiBX, который присутствует в jibx-bind.jar и bcel.jar , которые присутствуют в дистрибутивном пакете.
  3. Файл сборки Ant ( build.xml ), который используется для запуска компилятора JiBX и создания классов привязки.
  4. Среда выполнения JiBX, которая присутствует в jibx-run.jar и должен присутствовать в пути к классу во время выполнения.

Пример JiBX Проект Eclipse

На рисунке ниже показан окончательный проект eclipse, который у нас будет после того, как все будет настроено должным образом.

Файл привязки JiBX

Для приведенного выше преобразования binding.xml файл будет выглядеть так:


	
		
		
		
	

Сопоставления присутствуют в теге корневой привязки. Все сопоставления для определенного класса будут содержаться в теге сопоставления.

Атрибуты привязки JiBX

Атрибут name в сопоставлении указывает имя узла в XML. В нашем случае это “Сотрудник”, и он связан с классом Employee атрибутом class.

Необязательный атрибут удаляет строгую проверку в XML для следования порядку, указанному в binding.xml файл. Это означает, что тег имени может отображаться над или под тегом hiredate .

Поля привязки JiBX

Элементы объекта сотрудник содержатся в тегах значений. Указывает, что идентификатор сотрудника должен быть атрибутом тега сотрудника.

Атрибут field используется для сопоставления элемента id с идентификатором переменной java. Необязательный атрибут может использоваться для указания того, что атрибут id не является обязательным и может быть пропущен, если он отсутствует в XML или равен нулю в объекте Java.

Аналогично, другие элементы могут храниться в обычных тегах значений. Атрибут name в тегах значений указывает имя тега в XML.

Для простоты и удобства понимания пример ограничен только этими простыми тегами. Существуют вложенные теги, такие как структуры, коллекции. Более подробную информацию об этом можно найти в документации JiBX.

Файл сборки JiBX ant

Как только сопоставление будет выполнено, нам нужно создать файл сборки ant. Для нашего примера это будет выглядеть так:







  
 

  

  
  
    
  
  
    
      
      
      
    
  

  
  
    
    
  

  
  
    JiBX home directory not found - define JIBX_HOME system property or set path directly in build.xml file.
    Required JiBX runtime jar jibx-run.jar was not found in JiBX home lib directory (${jibx-home}/lib)
  

  
  
    Required JiBX binding jar jibx-bind.jar or bcel.jar was not found in JiBX home lib directory (${jibx-home}/lib)
  

  
  

    
    
      
        
      
    
    
      
    
  

Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и

Pankaj:JIBXTest Pankaj$ pwd
/Users/Pankaj/EclipseWorkspace/JIBXTest
Pankaj:JIBXTest Pankaj$ ant bind
Buildfile: build.xml

check-runtime:

check-binding:

bind:
     [echo] Running JiBX binding compiler

BUILD SUCCESSFUL
Total time: 0 seconds
Pankaj:JIBXTest Pankaj$ ls -ltr bin/com/journaldev/jibx/bean/
total 32
-rw-r--r--  1 Pankaj  staff  2507 Dec 14 18:10 JiBX_bindingEmployee_access2.class
-rw-r--r--  1 Pankaj  staff  3860 Dec 16 10:14 Employee.class
-rw-r--r--  1 Pankaj  staff  1663 Dec 16 10:56 JiBX_bindingFactory.class
-rw-r--r--  1 Pankaj  staff  2505 Dec 16 10:56 JiBX_bindingEmployee_access.class

Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и

package com.journaldev.jibx.test;

import java.io.StringReader;
import java.io.StringWriter;

import org.jibx.runtime.BindingDirectory;
import org.jibx.runtime.IBindingFactory;
import org.jibx.runtime.IMarshallingContext;
import org.jibx.runtime.IUnmarshallingContext;
import org.jibx.runtime.JiBXException;

import com.journaldev.jibx.bean.Employee;

public class JibxTest {
	public String marshalEmployee(Employee employee){
		try {
			IBindingFactory bfact = BindingDirectory.getFactory(Employee.class);
			IMarshallingContext mctx = bfact.createMarshallingContext();
			mctx.setIndent(2);
			StringWriter stringWriter = new StringWriter();
			mctx.setOutput(stringWriter);
			mctx.marshalDocument(employee, "UTF-8", null);
			String output = stringWriter.toString();
			return output;
		} catch (JiBXException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void unMarshalEmployee(String inputXml){
		try {
			IBindingFactory bfact = BindingDirectory.getFactory(Employee.class);
			IUnmarshallingContext uctx = bfact.createUnmarshallingContext();
			StringReader stringReader = new StringReader(inputXml);
			Employee employee  = (Employee) uctx.unmarshalDocument(stringReader, null);
			System.out.println("Employee ID:"+employee.getId());
		} catch (JiBXException e) {
			e.printStackTrace();
		}
	}

	public static void main(String args[]){
		String inputXml = "CiscoJan 03, 2011";
		JibxTest jibxTest = new JibxTest();
		jibxTest.unMarshalEmployee(inputXml);

		Employee employee = new Employee();
		employee.setId("237871");
		employee.setName("Cisco");
		employee.setHireDate("Jan 03, 2011");

		System.out.println("Employee as XML String:"+jibxTest.marshalEmployee(employee));
	}
}

Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и

Pankaj:JIBXTest Pankaj$ cd bin
Pankaj:bin Pankaj$ java -cp .:../lib/jibx-run.jar com/journaldev/jibx/test/JibxTest
Employee ID:12345
Employee as XML String:

  Cisco
  Jan 03, 2011

Pankaj:bin Pankaj$

Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и

Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и

Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и