Компиляция эпизода JAXB с включением не работает
У меня есть 2 схемы A, B. Я повторно использую некоторые элементы A в B.
Я не использую пространства имен.
я использую
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.9.0</version>
Я определил включение схемы A в схему B как:
<xs:include schemaLocation="classpath:my.schema.A.xsd"/>
и каталог как
REWRITE_SYSTEM "classpath:my.schema.A.xsd" "maven:my.schema:schema-a!/A.xsd"
Конфигурация jaxb идет:
<configuration>
<generatePackage>my.schema.b</generatePackage>
<schemaIncludes>
<includes>B.xsd</includes>
</schemaIncludes>
<episodes>
<episode>
<groupId>my.schema</groupId>
<artifactId>schema-a</artifactId>
</episode>
</episodes>
<catalog>src/main/catalog/catalog.cat</catalog>
</configuration>
Проблема заключается в том, что всякий раз, когда я указываю зависимость эпизода, схема не генерирует никаких классов, даже если она содержит некоторые элементы B, для которых я хочу создать классы.
[INFO] Parsing input schema(s)...
[INFO] Compiling input schema(s)...
[INFO] Cleaning package directories.
[INFO] Finished execution.
Когда я удаляю эпизод, он работает хорошо и генерирует классы для схемы A, чего я действительно хочу избежать.
У вас есть какие-нибудь предложения?
Образец был опубликован в эпизодическом сборнике Jaxb
2 ответа
Хорошо, я проверил ваш пример. Проблема в том, что вы не используете пространства имен.
Проверьте свои META-INF/sub-jaxb.episode
файл:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
<jaxb:bindings scd="x-schema::">
<jaxb:schemaBindings map="false">
<jaxb:package name="schema.episode.a"/>
</jaxb:schemaBindings>
<jaxb:bindings scd="person">
<jaxb:class ref="schema.episode.a.Person"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
Ты видишь это <jaxb:bindings scd="x-schema::">
а потом <jaxb:schemaBindings map="false">
, Это в основном говорит XJC "не отображать ничего в пустом пространстве имен". Так как ваша вторая схема (b.xsd
) также не использует пространства имен, когда вы используете a.xsd
Файл эпизода (связывание выше), вы подавляете генерацию кода для b.xsd
также.
Подводя итог, можно сказать, что при использовании эпизодов / отдельных схем компиляции нельзя помещать схемы с одним пространством имен в разные эпизоды. Это как раз проблема с include
,
Это не ошибка в maven-jaxb2-plugin
, Я бы также не назвал это ошибкой в XJC. Это просто, как эпизоды работают по умолчанию.
Посмотрите мой запрос на получение здесь, он демонстрирует эпизодическую компиляцию, когда пространства имен обрабатываются соответствующим образом.
Автор maven-jaxb2-plugin
Вот.
Я думаю, что ваш эпизод говорит что-то вроде "не компилировать пространства имен A и B". Пожалуйста, проверьте файл привязки внутри META-INF
в вашем банке.
Это довольно сложное использование, есть много моментов, где это может пойти не так. Ты используешь:
- каталоги
- Разрешение схемы на основе артефактов Maven
- эпизоды
Каталоги и эпизоды являются функциями XJC, разрешение Maven исходит от maven-jaxb2-plugin
, Мы должны попытаться выделить то, что не получается:
- Попробуйте только с эпизодами - извлеките свои схемы и скомпилируйте "как есть", без каталогов и распознавателя.
- Просто каталоги - извлекайте схему и переписывайте в локальные каталоги вместо
maven:
- Пытаться
maven:my.schema:schema-a!/A.xsd
как схема расположения без эпизодов и каталогов
Очевидно, еще три комбинации, чтобы попробовать.
Если вы предоставите пример проекта, я проведу расследование (но не в течение следующих 10 дней). Лучше всего подать вопрос. Я перенесу плагин на GitHub, так что это будет хорошее место: