Сложный сценарий jaxb по генерации java-объектов

У меня есть проект, который делает генерацию JAXB с framework.xsd. Это создает jar с объектами xsd и jaxb и другими классами вокруг этого материала.

Затем другая группа (две разные группы) будет расширять framework.xsd, а subxmling, используя схему, расширяет материал для расширения объектов в framework.xsd. Они также хотят генерировать jaxb-объекты, НО они хотят, чтобы их SomeClass.java явно расширял мой Framework.java и не хотел заканчивать с совершенно новой иерархией.

  1. Это вообще возможно?
  2. Как сделать что-то подобное? в качестве решения потребуется
    1. сообщить компилятору jaxb, что пространство имен yy уже сгенерировано, поэтому не генерируйте
    2. скажите компилятору jaxb, что он должен ссылаться на классы в пакете zzzzzz или посмотреть на файл xjb из файла фреймворка фреймворка или что-то в этом роде.

Это возможно? спасибо, Дин

1 ответ

Решение

Вы хотите использовать файл эпизода: http://weblogs.java.net/blog/kohsuke/archive/2006/09/separate_compil.html при создании классов JAXB для вашей первой схемы.

$ xjc -episode framework.episode framework.xsd

Тогда другая группа, которая потребляет ваш framework.jar, должна:

1) импортировать вашу схему в свою собственную схему, например:

<xsd:import namespace="http://www.myorg.com/framework" schemaLocation="framework.xsd"/>

2) генерировать свои классы JAXB

$ xjc extend.xsd -b framework.episode

(им понадобится копия вашего файла xsd и episode во время xjc, а также framework.jar в classpath)

Обратите внимание, что согласно сообщению в блоге выше, вы также можете поместить файл framework.episode в свой jar (например, /META-INF/sun-jaxb.episode для JAXB RI - другие JAXB-импл могут иметь другие способы выполнить то же самое вещь), так что опция -b framework.episode может быть опущена. Я лично нахожу это немного непрактичным, вам все равно нужен XSD.

Другие вопросы по тегам