WikiDer > Кастор (каркас)
Стабильный выпуск | 1.4.1 / 15 мая 2016 г. |
---|---|
Написано в | Ява |
Операционная система | Кроссплатформенность (JVM) |
Платформа | Виртуальная машина Java |
Тип | Связывание данных |
Лицензия | Apache 2.0 |
Интернет сайт | привязка данных castor |
Кастор это привязка данных рамки для Ява с некоторыми функциями, такими как привязка Java к Java-to-XML, постоянство Java-to-SQL, пути между объектами Java, XML документы, реляционные таблицы и т. д.[1][2][3] Castor - один из старейших проектов связывания данных.[3]
Технологический процесс
Основные потоки процессов включают создание классов, сортировка, немаршаллинг и т. д.[2] Платформа маршаллинга включает набор ClassDescriptors и FieldDescription для описания объектов.[3]
Генерация класса
Генерация классов похожа на JAXB и Зевс. Castor поддерживает XML-схему вместо DTD (DTD не поддерживаются Castor).[2][3][4]
Демаршаллинг и маршаллинг
Немаршаллинг и маршаллинг обрабатываются методами marshall () и unmarshall () соответственно. Во время маршалинга выполняется процесс преобразования из Java в XML, а во время демаршалинга выполняется процесс преобразования из XML в Java. Файлы сопоставления являются эквивалентом схемы привязки, которая позволяет преобразовывать имена из XML в Java и наоборот.[2]
Дополнительные возможности
Castor предлагает некоторые дополнительные функции, которых нет в JAXB. Дополнительные возможности включают:
- Сопоставления баз данных и серверов каталогов - сопоставление баз данных и серверов каталогов с Java
- JDO - Caster поддерживает Объекты данных Java.[2]
Примеры кода
Код для маршаллинга может выглядеть следующим образом:
упаковка javajaxb;импорт java.io.File;импорт java.io.FileReader;импорт java.io.FileWriter;импорт java.io.IOException;// Касторимпорт org.exolab.castor.xml.MarshalException;импорт org.exolab.castor.xml.ValidationException;// Сгенерированные классы hr.xmlимпорт javajaxb.generated.hr. *;общественный учебный класс EmployeeLister { // Существующие методы общественный пустота модифицировать() бросает IOException, MarshalException, ValidationException { // Добавляем нового сотрудника Наемный рабочий наемный рабочий = новый Наемный рабочий(); наемный рабочий.Имя набора("Бен Рочестер"); Адрес адрес = новый Адрес(); адрес.setStreet1(«708 Тиквуд Драйв»); адрес.setCity("Цветочный курган"); адрес.setState("TX"); адрес.setZipCode("75028"); наемный рабочий.addAddress(адрес); Организация организация = новый Организация(); организация.установить идентификатор(43); организация.Имя набора("Технический сервис"); наемный рабочий.setOrganization(организация); Офис офис = новый Офис(); офис.установить идентификатор(241); Адрес адрес офиса = новый Адрес(); адрес офиса.setStreet1(«Деловая площадь 1202»); адрес офиса.setStreet2(«Люкс 302»); адрес офиса.setCity("Даллас"); адрес офиса.setState("TX"); адрес офиса.setZipCode("75218-8921"); офис.setAddress(адрес офиса); наемный рабочий.setOffice(офис); // Добавить сотрудника в список сотрудники.addEmployee(наемный рабочий); // маршал сотрудники.маршал(новый FileWriter(выходной файл)); } общественный статический пустота главный(Нить[] аргументы) { пытаться { если (аргументы.длина != 2) { Система.из.println("Использование: java javajaxb.EmployeeLister" + "[имя файла web.xml] [имя файла output.xml]"); возвращаться; } EmployeeLister листер = новый EmployeeLister(новый Файл(аргументы[0]), новыйФайл(аргументы[1])); листер.список(истинный); листер.модифицировать(); } ловить (Исключение е) { е.printStackTrace(); } } }
Код для демаршаллинга может выглядеть следующим образом:
упаковка javajaxb;импорт java.io.File;импорт java.io.FileReader;импорт java.io.IOException;// Касторимпорт org.exolab.castor.xml.MarshalException;импорт org.exolab.castor.xml.ValidationException;// Сгенерированные классы hr.xmlимпорт javajaxb.generated.hr. *;общественный учебный класс EmployeeLister { / ** Дескриптор для чтения * / частный Файл дескриптор; / ** Выходной файл для записи * /150 частный Файл выходной файл; / ** Считать дерево объектов * / частный Сотрудники сотрудники; общественный EmployeeLister(Файл дескриптор, Файл выходной файл) { сотрудники = ноль; это.дескриптор = дескриптор; это.выходной файл = выходной файл; } общественный пустота список(логический подтверждать) бросает IOException, MarshalException, ValidationException { // Unmarshall сотрудники = Сотрудники.демаршировать(новый FileReader(дескриптор)); // Выполняем базовую печать Система.из.println("--- Список сотрудников --- n"); Наемный рабочий[] employeeList = сотрудники.getEmployee(); за (int я=0; я<employeeList.длина; я++) { Наемный рабочий наемный рабочий = employeeList[я]; Система.из.println("Наемный рабочий: " + наемный рабочий.getName()); Система.из.println("Организация:" + наемный рабочий.getOrganization().getName()); Система.из.println("Офис: " + наемный рабочий.getOffice().getAddress().getCity() + ", " + наемный рабочий.getOffice().getAddress().getState() + " п"); } } общественный статический пустота главный(Нить[] аргументы) { пытаться { если (аргументы.длина != 2) { Система.из.println("Использование: java javajaxb.EmployeeLister" + "[имя файла web.xml] [имя файла output.xml]"); возвращаться; } EmployeeLister листер = новый EmployeeLister(новый Файл(аргументы[0]), новыйФайл(аргументы[1])); листер.список(истинный); } ловить (Исключение е) { е.printStackTrace(); } } }
Пример файла сопоставления может выглядеть следующим образом:
<?xml version="1.0"?><!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN" "http://Castor.exolab.org/mapping.dtd"><mapping> <класс имя ="javajaxb.generated.hr.Employees"> xml ="emp-list"/> <поле имя ="Наемный рабочий" type ="javajaxb.generated.hr.Employee"> имя ="emp" /> </field> </class> <класс имя ="javajaxb.generated.hr.Employee"> <поле имя ="Идентификатор" type ="целое число"> имя ="emp-id" узел ="атрибут"/> </field> <поле имя ="имя" type ="java.lang.String"> имя ="emp-name" узел ="атрибут"/> </field> <поле имя ="Адрес" type ="javajaxb.generated.hr.Address"> имя ="emp-адрес" /> </field> <поле имя ="Организация" type ="javajaxb.generated.hr.Organization"> имя ="emp-org"/> </field> <поле имя ="Офис" type ="javajaxb.generated.hr.Office"> имя ="emp-office"/> </field> </class> <класс имя ="javajaxb.generated.hr.Address"> <поле имя ="Street1" type ="java.lang.String"> имя ="строка 1" узел ="элемент"/> </field> <поле имя ="Улица # 2" type ="java.lang.String"> имя =«линия-2» узел ="элемент"/> </field> <поле имя ="Город" type ="java.lang.String"> имя ="город" узел ="элемент"/> </field> <поле имя ="Состояние" type ="java.lang.String"> имя ="государственный" узел ="элемент"/> </field> <поле имя ="Почтовый Индекс" type ="java.lang.String"> имя ="почтовый индекс" узел ="элемент"/> </field> </class> <класс имя ="javajaxb.generated.hr.Office"> <поле имя ="Идентификатор" type ="целое число"> имя ="office-id" узел ="атрибут"/> </field> <поле имя ="Адрес" type ="javajaxb.generated.hr.Address"> имя ="адрес офиса" узел ="элемент"/> </field> </class> <класс имя ="javajaxb.generated.hr.Organization"> <поле имя ="Идентификатор" type ="целое число"> имя ="идентификатор организации" узел ="элемент"/> </field> <поле имя ="Имя" type ="java.lang.String"> имя ="название организации" узел ="элемент"/> </field> </class></mapping>
Смотрите также
- Связывание данных XML
- Список программ объектно-реляционного сопоставления
- Сериализация
- Объект данных службы
- Связывание данных
Рекомендации
- ^ "О". Кастор. Github. Получено 11 февраля 2016.
- ^ а б c d е ж грамм час Маклафин, Б. (2002). Связывание данных Java и XML. Севастополь: O'Reilly & Associates, Inc., стр. 143–165.
- ^ а б c d Руководство разработчика XML. Скоттс-Вэлли, США: Borland Software Corporation. 2002. С. (2–29) - (2–31).
- ^ «Генератор исходного кода». Кастор. Github. Получено 11 февраля 2016.