Автор оригинала: Pankaj Kumar.
Добро пожаловать в учебник по JiBX. JiBX-это очень мощная платформа для преобразования XML-данных в объекты java и наоборот. Это очень полезно при интеграции приложений, где XML является форматом для передачи данных. Например, Веб-сервисы и интеграция устаревших систем на основе Модели, ориентированной на сообщения .
Насмешка
Преобразование объекта Java в XML называется Сортировкой , а создание объекта java из XML называется удалением .
Существует множество фреймворков, доступных для преобразования XML, таких как JAXB и XMLBeans, но JiBX отличается подходом к процессу привязки и преобразования XML.
JiBX выполняет эти задачи с помощью служебных классов, созданных во время компиляции с помощью сценариев ant. Этот подход сокращает время обработки за счет перехода от традиционного двухэтапного процесса с другими анализаторами к одноэтапному.
Тесты, выполненные на различных инструментах привязки XML, показали, что JiBX является самой быстрой и эффективной платформой для анализа памяти на сегодняшний день.
Здесь, в учебнике по JiBX, я предоставляю пример приложения для преобразования XML с помощью анализатора JiBX.
Системная информация :
- Mac OS X версии 10.6.4
- Java 1.5
- Муравей 1.7.0
- Среда разработки Eclipse для настройки проекта
- банки с насмешками – 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 нам нужно настроить четыре вещи.
- Файл определения сопоставления (
binding.xml
), который используется компилятором привязки JiBX для создания определения привязки в байтовом коде, т. е. файлах классов - Компилятор JiBX, который присутствует в
jibx-bind.jar
иbcel.jar
, которые присутствуют в дистрибутивном пакете. - Файл сборки Ant (
build.xml
), который используется для запуска компилятора JiBX и создания классов привязки. - Среда выполнения 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 = ""; 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)); } } Cisco Jan 03, 2011
Скопируйте файл привязки и файл сборки в корень проекта 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:Pankaj:bin Pankaj$ Cisco Jan 03, 2011
Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и
Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и
Скопируйте файл привязки и файл сборки в корень проекта JiBXTest и