2016-03-11 1 views
0

У меня есть 2 схемы: a.xsd и b.xsd, которая имеет зависимость от a.xsd (эпизод).Использование модульной компиляции JAXB не работает (кажется), когда местоположение не является URL-адресом

Схемы разделены на разные проекты и пакеты maven.

Первоначально b.xsd импорт a.xsd как это (я не хочу, чтобы изменить его):

<import namespace="urn:a" schemaLocation="a.xsd"/> 

Что мне нужно поставить в моем catalog.cat перевести a.xsd на maven:com.mycompany:a:jar::!/com/mycompany/a/a.xsd

Я попытался PUBLIC , SYSTEM, URI, REWRITE_URI, REWRITE_SYSTEM, но ничего не работает.

Как только я изменю ссылку a.xsd на http://.../a.xsd в моей схеме и использую REWRITE_SYSTEM в моем каталоге, тогда она работает. Но, как я уже сказал, я не хочу изменять свою схему.

ответ

1

Никогда не работает, похоже, работает с SYSTEM_SUFFIX.

+0

Спасибо, это сработало и для меня. –

0

См Modular Schema Compilation, начиная с

Однако есть bug in JAXB/XJC это не работает, если у вас есть SchemaLocation в вашем xs:import.

Резолюция схем в XJC довольно затруднительна, и за последние несколько лет я не видел никакого прогресса.

Так что работает для меня достаточно хорошо в numberofprojects:

Compile вас SCHEMAS не из локального пути, но некоторые абсолютный URL. Это не нужно фактически существовать, может быть полностью виртуальным. Просто используйте абсолютный URL:

<plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <configuration> 
       <schemas> 
        <schema> 
         <url>http://schemas.opengis.net/ows/2.0/owsAll.xsd</url> 
        </schema> 
       </schemas> 
       <!-- ... --> 
      </configuration> 
     </plugin> 

Используйте файл каталог, чтобы переписать абсолютный префикс URL для некоторых локального пути или ресурса в баночке:

REWRITE_SYSTEM "http://schemas.opengis.net" "maven:org.jvnet.ogc:ogc-schemas:jar::!/ogc" 

Примените привязки не к локальным файлам, а через абсолютный URL-адрес:

<jaxb:bindings schemaLocation="http://schemas.opengis.net/ows/2.0/owsAll.xsd" node="/xs:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="net.opengis.ows.v_2_0"/> 
    </jaxb:schemaBindings> 
</jaxb:bindings> 

Таким образом, все ваши адреса будут абсолютным (без необходимости патчить схемы) и так REWRITE_SYSTEM будет работать по желанию. Это лучший вариант, который я нашел до сих пор, и, поверьте, я собрал много схем.

Отказ от ответственности: Я являюсь автором maven-jaxb2-plugin.

+0

На странице [Компиляция модульной схемы] (https://github.com/highsource/maven-jaxb2-plugin/wiki/Modular-Schema-Compilation) ссылка на запрос Oracle pull не работает, можете ли вы исправить пожалуйста, чтобы мы могли видеть статус. –

+0

Между тем. как-то используя SYSTEM_SUFFIX в моем файле каталога, как описано в приведенном выше ответе, решает мою проблему. Я смог скомпилировать и сгенерировать источники для проекта B в вашем примере.В нашем случае мы получаем контракты от стороннего участника, который включает проект A.xsd внутри B.xsd, как показано ниже, и, к сожалению, я не могу его изменить. '' Просто интересно узнать, подходит ли это для использования, поскольку вы не рекомендовали использовать это вариант в любом из ваших ответов? –

Смежные вопросы