Ожидаемое или рекомендуемое использование плагина Maven JAXB 2.x - PullRequest
5 голосов
/ 22 июля 2011

Я новичок в XML Schema и JAXB, и мне интересно, каков наилучший или ожидаемый подход к использованию плагина Maven JAXB (http://static.highsource.org/mjiip/maven-jaxb2-plugin/generate-mojo.html)is.

У меня есть простой формат документа XML, для которого яЯ определил схему. В первую очередь я заинтересован в чтении совместимого XML-файла в Java, но, вероятно, я также хочу добавить дополнительные свойства к POJO, которых не будет в XML, но которые будут использоваться во время выполнения.

По умолчанию плагин помещает сгенерированный код в $ {project.build.directory} / generate-sources / xjc. То, что я хочу сделать, это скопировать сгенерированный код в / src / main / java / что угоднои добавьте / измените код, чтобы добавить мои дополнительные свойства. Когда я изменяю схему, я затем объединяю изменения из вновь сгенерированных POJO в свои собственные.

Альтернатива состоит в том, чтобы указать плагину разместитьсгенерированный источник непосредственно в / src / main / java и, возможно, для создания подкласса POJO для добавления моих собственных свойств, но я не уверен, что маршалинг / демаршалинг все еще можно сделать, чтобы использовать мойрасширенные классы.

У кого-нибудь есть указания относительно того, какой подход является более нормальным или какие у каждого есть подводные камни?

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

На вашем месте я бы оставил сгенерированные источники там, где они есть, чтобы Maven мог создать соответствующий jar без дальнейшей настройки, и поместил бы ваш пользовательский код в другой проект, который зависит от первого. Это гарантирует, что все построено в правильном порядке.

На ваш выбор, наследовать от сгенерированных классов или просто использовать их экземпляры в своем коде в качестве атрибутов или, что еще лучше, локальных переменных. Лично я бы избегал деривации; В конце концов, JAXB - это просто низкоуровневое оборудование, которое вы используете для выполнения операций ввода-вывода в определенном формате.

Самое главное: забудьте об изменении сгенерированных источников; зачем вводить подверженный ошибкам ручной шаг в процессе разработки, если вы можете автоматически получить тот же эффект?

1 голос
/ 22 июля 2011

(чтобы немного изменить ответ Никола)

Если ваша схема редко изменяется, возможно, имеет смысл иметь совершенно отдельную сборку, которая просто создает сгенерированный JAXB-код, JAR-файлы, версии и вставляет его в ваш репозиторий.

Затем в своем нисходящем коде вы используете этот jar как зависимость и подклассифицируете код JAXB по мере необходимости для добавления новых полей.

Мы пошли по этому пути, потому что чувствовали, что компилировать JAXB каждый раз, когда мы выполняем сборку, не нужно, поскольку наши схемы довольно статичны.

Самое главное: забудьте об изменении сгенерированных источников; зачем вводить подверженный ошибкам ручной шаг в процессе разработки, если вы можете автоматически получить тот же эффект?

Абсолютно.

0 голосов
/ 23 июля 2011

Разрабатывать и расширять уже хорошо продуманную точку ... если есть много неявных связей и вещей, для которых вы хотите поместить "получатели" в код JAXB, откусите пулю и оберните класс JAXBиерархия в той, которая делает именно то, что вы хотите, где вы хотите.

При делегировании с помощью IDE это только немного утомительно и выдает много простого, отвлекающего низкоуровневого кода из вашего основного приложения.

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

...