Process XML file via JAXB

Генерируем из XSD схемы Java-классы

Скачайте патч в проект (корень или сделать подкаталог patch) и правой кнопкой мыши -> Apply Patch:
Apply patch 3_jaxb_generate.patch

Код проекта менять нельзя, он обновляется только патчами,
иначе следующие патчи не смогут примениться без конфликта!

JAXB unmarshalling (десериализация)

  • Добавляем общий класс JaxbUnmarshaller (его можно использовать в своих приложениях без изменений) и специфичный для нашей схемы JaxbUtil
  • Десериализуем XML в полученные из схемы Java-классы:
mvn test
shell:>jaxb -i in/usersWithMeals.xml -o out/jaxb.xml
shell:>jaxb -i in/badXmlFile.xml -o out/jaxb.xml

Тестирование

Apply patch 5_jaxb_test.patch
  • Добавляем тестовые данные TestData и конструкторы @AllArgsConstructor в схемы
  • Делаем тест на хороший и плохой XML: JaxbUtilTest
    mvn test

Обработка Filter params

Apply patch 6_jaxb_filter.patch
  • Парсим параметры в классе Util. Пример параметров:
    startDate=2023-01-30 - еда с этой даты попадает в вывод
    endDate=2023-01-30 - еда до этой даты включительно попадает в вывод
    startTime=11:00 - еда с этого времени попадает в вывод
    endTime=19:00 - еда строго до этого времени попадает в вывод
  • Фильтруем еду с подсчетом превышения калорий за день для каждого пользователя: MealsUtil (функционал с подробным описанием можно посмотреть в демо-приложении стажировки TopJava)
  • Добавляем метод JaxbUtil.process, где будет вся JAXB обработка.
  • Правим TestData (в еду добавляется превышение калорий за день Meal.excess и список еды с фильтрацием будет отличаться)
  • Добавляем тест на фильтрацию
    mvn test

JAXB marshalling (сериализация)

Apply patch 7_jaxb_marshal.patch
  • Добавляем общие утильные классы JaxbMarshaller и JaxbParser
  • Десериализуем пользователей через JaxbParser
  • Сериализуем пользователей в output XML в JaxbUtil.process
  • Создаем каталог для результирующих докуменотов (git не работает с каталогами, нужен placeholder)
  • Запускаем тесты и приложение и проверяем результат в каталоге out:
mvn test
shell:>jaxb -i in/usersWithMeals.xml -o out/jaxb.xml
shell:>jaxb -i in/usersWithMeals.xml -f startDate=2023-01-30,endDate=2023-01-30,startTime=11:00,endTime=19:00 -o out/jaxbFiltered.xml
> Process XML file via StAX