Рабочий процесс JAXB - как Вы вскакиваете Используя JAXB

Документация JAXB похожа на учебник, и я просто не имею ко времени для изучения всего JAXB, прежде чем я должен буду использовать его.

У меня есть XSD, если я хочу использовать JAXB, чтобы упорядочить и не упорядочить то, что рабочий процесс?

Мне не нужны никакие специфические особенности просто представление высокого уровня.

Что я уже знаю: 1. JAXB может использоваться, чтобы взять объекты и создать XML-документы от них и наоборот 2. Это использует некоторый таинственный инструмент под названием "XJC", из которого я не смог найти загрузку ГДЕ УГОДНО на их веб-сайте 3. XJC создает классы для Вас на основе XSD

Во-первых, Как я нахожу XJC? Я на самом деле знаю, что это установлено в моей системе, не уверенной, где я получил его от все же.
Во-вторых, независимо от того, что этот инструмент и как это добралось до моей машины, как я заставляю его работать с самой актуальной версией JAXB? В-третьих, поэтому если мои изменения XSD делают я действительно должен воссоздать целый объект Java, поэтому возможно делая недействительным все мои тесты? Или я могу определить объект к отображениям XSD так, чтобы я управлял отображением, не некоторой генерацией кода по умолчанию?

Я главным образом привык к взятию XML и использованию чего-то как xStream для ручного немаршалинга, но это не опция в моих целях больше.

8
задан walnutmon 4 August 2010 в 20:39
поделиться

2 ответа

Предполагается, что у вас JDK6;

xjc находится в папке bin/ вашего JDK, что-то вроде C:\Program Files (x86)\Java\jdk1.6.0_20\bin\xjc. exe

JDK поставляется с jaxb, хотя могут существовать более новые версии от http://jaxb.java.net/ или другие реализации, вам, вероятно, не нужно беспокоиться об этом в данный момент.

JAXB может делать много вещей, я не совсем уверен, чего именно вы пытаетесь достичь. Если у вас есть xsd, вы можете генерировать java-классы из него, выполнив, например,

xjc -p com.mypackage myschema.xsd

И включить сгенерированные классы в ваш проект (более типично вы бы запустили это как часть процесса сборки).

Или я могу определить сопоставления объектов с XSD. так, чтобы я контролировал сопоставление, а не генерировать код по умолчанию?

Сгенерированные классы - это просто pojos с некоторыми аннотациями, вы могли бы создать эти классы самостоятельно и полностью контролировать отображение через аннотации.

Как было сказано, jaxb может делать много вещей, вот только некоторые основные примеры, SearchParam/SearchType - это класс, сгенерированный xjc из небольшого пользовательского .xsd

Сериализация объекта в XML файл

JAXBContext context = JAXBContext.newInstance(SearchParam.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
List<String> hours = new LinkedList<String>();
hours.add("2009.12.11");
hours.add("2009.12.13");

SearchParam param = new SearchParam();
param.setFilter("greater");
param.setHours(hours);
param.setSearchType(SearchType.Fuzzy);
marshaller.marshal(param, new FileWriter("/tmp/SearchParam.xml"));    

Десериализация xml файла

 JAXBContext context = JAXBContext.newInstance(SearchParam.class);
 Unmarshaller unMarshaller = context.createUnmarshaller();
 SearchParam param = (SearchParam) unMarshaller.unmarshal(
                    new FileInputStream("/tmp/SearchParam.xml"));

Десериализация и валидация схемы

JAXBContext context = JAXBContext.newInstance(SearchParam.class);
Unmarshaller unMarshaller = context.createUnmarshaller();
Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
                 .newSchema(new  File("/tmp/schema1.xsd"));
unMarshaller.setSchema(schema);
SearchParam param = unMarshaller.unmarshal(
                      new FileInputStream("/tmp/SearchParam.xml"));

Дополнительная информация

15
ответ дан 5 December 2019 в 10:38
поделиться

Скорее всего, у вас уже установлен XJC. Проверьте каталог bin вашей установки JDK 6. Если вы найдете XJC и запустите его, он выдаст вам опции командной строки.

JAXB - это спецификация, поэтому существует несколько реализаций:

  • Metro (RI), релизы тесно связаны с обновлениями JDK, так что если у вас есть последний JDK, то все должно быть хорошо.
  • MOXy JAXB, часть EclipseLink, доступна здесь, http://www.eclipse.org/eclipselink/moxy.php

Если вы измените свою схему, вы сможете изменить свою объектную модель, особенно с расширениями MOXy.

Для начала работы см: http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted

1
ответ дан 5 December 2019 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: