Сложный сценарий jaxb по генерации java-объектов
У меня есть проект, который делает генерацию JAXB с framework.xsd. Это создает jar с объектами xsd и jaxb и другими классами вокруг этого материала.
Затем другая группа (две разные группы) будет расширять framework.xsd, а subxmling, используя схему, расширяет материал для расширения объектов в framework.xsd. Они также хотят генерировать jaxb-объекты, НО они хотят, чтобы их SomeClass.java явно расширял мой Framework.java и не хотел заканчивать с совершенно новой иерархией.
- Это вообще возможно?
- Как сделать что-то подобное? в качестве решения потребуется
- сообщить компилятору jaxb, что пространство имен yy уже сгенерировано, поэтому не генерируйте
- скажите компилятору 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.