Кастор (каркас)
Стабильная версия | 1.4.1 / 15 мая 2016 г |
---|---|
Написано в | Ява |
Операционная система | Кроссплатформенность ( JVM ) |
Платформа | Виртуальная машина Java |
Тип | Привязка данных |
Лицензия | Апач 2.0 |
Веб-сайт | привязка данных Castor |
Castor — это платформа привязки данных для Java с некоторыми функциями, такими как привязка Java к Java-XML, сохранение Java-to-SQL, пути между объектами Java, документами XML , реляционными таблицами и т. д. [1] [2] [3] Castor — один из старейших проектов по связыванию данных. [3]
Ход процесса
[ редактировать ]Основные потоки процессов включают генерацию классов, маршалинг , демаршалинг и т. д. [2] Платформа маршаллинга включает набор ClassDescriptors и FieldDescription для описания объектов. [3]
Генерация классов
[ редактировать ]Генерация классов аналогична JAXB и Zeus. Castor поддерживает схему XML вместо DTD (DTD не поддерживаются Castor). [2] [3] [4]
Демаршалинг и маршалинг
[ редактировать ]Демаршалинг и маршалинг выполняются с помощью методов marshall() и unmarshall() соответственно. Во время маршаллинга выполняется процесс преобразования из Java в XML, а во время демаршаллинга — процесс преобразования из XML в Java. Файлы сопоставления являются эквивалентом схемы привязки, которая позволяет преобразовывать имена из XML в Java и наоборот. [2]
Дополнительные возможности
[ редактировать ]Castor предлагает некоторые дополнительные функции, которых нет в JAXB. Дополнительные функции включают в себя:
- Сопоставление баз данных и серверов каталогов — сопоставление баз данных и серверов каталогов с Java.
- JDO-Caster поддерживает объекты данных Java . [2]
Примеры кода
[ редактировать ]Код для маршалинга может выглядеть следующим образом:
package javajaxb;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;// Castorimport org.exolab.castor.xml.MarshalException;import org.exolab.castor.xml.ValidationException;// Generated hr.xml classesimport javajaxb.generated.hr.*;public class EmployeeLister { // Existing methods public void modify() throws IOException, MarshalException, ValidationException { // Add a new employee Employee employee = new Employee(); employee.setName("Ben Rochester"); Address address = new Address(); address.setStreet1("708 Teakwood Drive"); address.setCity("Flower Mound"); address.setState("TX"); address.setZipCode("75028"); employee.addAddress(address); Organization organization = new Organization(); organization.setId(43); organization.setName("Technical Services"); employee.setOrganization(organization); Office office = new Office(); office.setId(241); Address officeAddress = new Address(); officeAddress.setStreet1("1202 Business Square"); officeAddress.setStreet2("Suite 302"); officeAddress.setCity("Dallas"); officeAddress.setState("TX"); officeAddress.setZipCode("75218-8921"); office.setAddress(officeAddress); employee.setOffice(office); // Add employee to list employees.addEmployee(employee); // marshal employees.marshal(new FileWriter(outputFile)); } public static void main(String[] args) { try { if (args.length != 2) { System.out.println("Usage: java javajaxb.EmployeeLister" + "[web.xml filename] [output.xml filename]"); return; } EmployeeLister lister = new EmployeeLister(new File(args[0]), newFile(args[1])); lister.list(true); lister.modify(); } catch (Exception e) { e.printStackTrace(); } } }
Код демаршалинга может выглядеть следующим образом:
package javajaxb;import java.io.File;import java.io.FileReader;import java.io.IOException;// Castorimport org.exolab.castor.xml.MarshalException;import org.exolab.castor.xml.ValidationException;// Generated hr.xml classesimport javajaxb.generated.hr.*;public class EmployeeLister { /** The descriptor to read in */ private File descriptor; /** The output file to write to */150 private File outputFile; /** The object tree read in */ private Employees employees; public EmployeeLister(File descriptor, File outputFile) { employees = null; this.descriptor = descriptor; this.outputFile = outputFile; } public void list(boolean validate) throws IOException, MarshalException, ValidationException { // Unmarshall employees = Employees.unmarshal(new FileReader(descriptor)); // Do some basic printing System.out.println("--- Employee Listing ---\n"); Employee[] employeeList = employees.getEmployee(); for (int i=0; i<employeeList.length; i++) { Employee employee = employeeList[i]; System.out.println("Employee: " + employee.getName()); System.out.println("Organization: " + employee.getOrganization().getName()); System.out.println("Office: " + employee.getOffice().getAddress().getCity() + ", " + employee.getOffice().getAddress().getState() + "\n"); } } public static void main(String[] args) { try { if (args.length != 2) { System.out.println("Usage: java javajaxb.EmployeeLister" + "[web.xml filename] [output.xml filename]"); return; } EmployeeLister lister = new EmployeeLister(new File(args[0]), newFile(args[1])); lister.list(true); } catch (Exception e) { e.printStackTrace(); } } }
Пример файла сопоставления может выглядеть следующим образом:
<?xml version="1.0"?><!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN" "http://Castor.exolab.org/mapping.dtd"><mapping> <class name="javajaxb.generated.hr.Employees"> <map-to xml="emp-list"/> <field name="Employee" type="javajaxb.generated.hr.Employee"> <bind-xml name="emp" /> </field> </class> <class name="javajaxb.generated.hr.Employee"> <field name="Id" type="integer"> <bind-xml name="emp-id" node="attribute"/> </field> <field name="name" type="java.lang.String"> <bind-xml name="emp-name" node="attribute"/> </field> <field name="Address" type="javajaxb.generated.hr.Address"> <bind-xml name="emp-address" /> </field> <field name="Organization" type="javajaxb.generated.hr.Organization"> <bind-xml name="emp-org"/> </field> <field name="Office" type="javajaxb.generated.hr.Office"> <bind-xml name="emp-office"/> </field> </class> <class name="javajaxb.generated.hr.Address"> <field name="Street1" type="java.lang.String"> <bind-xml name="line-1" node="element"/> </field> <field name="Street2" type="java.lang.String"> <bind-xml name="line-2" node="element"/> </field> <field name="City" type="java.lang.String"> <bind-xml name="city" node="element"/> </field> <field name="State" type="java.lang.String"> <bind-xml name="state" node="element"/> </field> <field name="ZipCode" type="java.lang.String"> <bind-xml name="zip-code" node="element"/> </field> </class> <class name="javajaxb.generated.hr.Office"> <field name="Id" type="integer"> <bind-xml name="office-id" node="attribute"/> </field> <field name="Address" type="javajaxb.generated.hr.Address"> <bind-xml name="office-address" node="element"/> </field> </class> <class name="javajaxb.generated.hr.Organization"> <field name="Id" type="integer"> <bind-xml name="org-id" node="element"/> </field> <field name="Name" type="java.lang.String"> <bind-xml name="org-name" node="element"/> </field> </class></mapping>
См. также
[ редактировать ]- Привязка XML-данных
- Список программного обеспечения объектно-реляционного картографирования
- Сериализация
- Объект сервисных данных
- Привязка данных
Ссылки
[ редактировать ]- ^ "О" . Кастор . Гитхаб . Проверено 11 февраля 2016 г.
- ^ Перейти обратно: а б с д и ж г час Маклафхин, Б. (2002). Связывание данных Java и XML . Севастополь: O'Reilly & Associates, Inc., стр. 143–165.
- ^ Перейти обратно: а б с д Руководство разработчика XML . Скоттс-Вэлли, США: Borland Software Corporation. 2002. стр. (2–29)–(2–31).
- ^ «Генератор исходного кода» . Кастор . Гитхаб . Проверено 11 февраля 2016 г.