В предыдущей части я рассказал тебе общие принципы работы технологии jaxb. Сегодня я покажу как за 5 простых шагов создать тест для xml-выдачи поиска Яндекса.
Стандартную xml-выдачу можно увидеть по этой ссылке. Первое, что нам нужно сделать - описать для неё xsd-схему. Если ты уже заглянул в ссылку, наверняка заметил, что в xml’e приходит очень много разной информации. Описывать всё это вручную - полная печаль.
Шаг первый: берём в руки утилиту trang и используем её по прямому назначению:
Схема готова - поместим её в стандартную папку resources и приступим к генерации java-классов.
Шаг второй: подключаем mava-jaxb плагин.
Пробуем запустить:
И получаем ошибку =)
Проблема в следующем: при генерации классов, помимо самих классов, создаётся еще и фабричный класс ObjectFactory. Этот класс содержит методы для создания классов, с которыми мы будем работать. Имена этих методов генерируются на основе имени элемента/типа в xsd-схеме и иногда они получаются одинаковыми.
Исправить это можно двумя способами. Первый - подправить xsd-схему. Второй - описать jaxb-биндинг, в котором явно указать имена методов для конкретных элементов/типов. Мы пойдём вторым путём =).
Шаг третий(опциональный): добавляем кастомный биндинг.
Сохраняем этот файл с расширением .xjb рядом с нашей xsd-схемой в resources. И пробуем снова:
И на этот раз уже видим в папке target/generated-sources/xjc/generated 23 файла с packag’ем generated. Почти то, что нужно, осталось поменять package.
Шаг четвертый: правильный package. Для этого добавим секцию конфигурации в описание maven-jaxb плагина в pom.xml:
Осталось всё это заиспользовать в нашем тесте. Шаг пятый: используем.
Как видишь, получилось дерево java-объектов полностью идентичное полученному xml-файлу. И при этом весь парсинг xml находится в трёх строчках кода - не надо ни самому описывать объекты, ни следить за их актуальностью. Полный код примера как обычно можно найти у меня на гитхабе =)
comments powered by Disqus