Привязки JAXB к схемам в JAR - PullRequest
6 голосов
/ 01 марта 2012

Я использую плагин maven jaxb2 для генерации классов Java, построенных из схем в jar. Тем не менее, я не уверен, как правильно найти эти схемы из файла привязок. Если вынуть схемы из jar-файла и поместить их в тот же каталог, что и привязки, все в порядке. Однако это не практичное долгосрочное решение.

pom.xml:

<plugin>
 <groupId>org.jvnet.jaxb2.maven2</groupId>
  <artifactId>maven-jaxb2-plugin</artifactId>
  <version>0.8.1</version>
  <executions>
    <execution>
     <goals>
      <goal>generate</goal>
     </goals>
    </execution>
   </executions>
   <configuration>
    <schemas>
     <schema>
      <dependencyResource>
       <groupId>com.test</groupId>
       <artifactId>schemas</artifactId>
       <version>1.10-SNAPSHOT</version>
       <resource>schemas/schema.xsd</resource>
      </dependencyResource>
     </schema>
    </schemas>              
    <bindingDirectory>bindings</bindingDirectory>
    <generatePackage>test.package</generatePackage>
    <bindingIncludes>
     <include>*.xml</include>
    </bindingIncludes>
    <extension>true</extension>
   </configuration>
  </plugin>

bindings.xml:

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
 xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb ./bindingschema_2_1.xsd"
 version="2.1">

<jxb:bindings schemaLocation="classpath:/schemas/schema.xsd" node="/xs:schema">
  <jxb:bindings node="//xs:complexType[@name='AbstractChangeable']">
   <jxb:class implClass="com.test.AbstractEntity" />
  </jxb:bindings>
</jxb:bindings>

Ответы [ 3 ]

6 голосов
/ 01 марта 2012

Вам нужно использовать maven-dependency-plugin:unpack, а затем указать maven-jaxb2-plugin на outputDirectory. В этом случае в обязательном файле нужно сказать что-то вроде schemaLocation="../target/schemas/schema.xsd"

5 голосов
/ 02 марта 2012

Я бы хотел, чтобы здесь работало что-то вроде:

<jaxb:bindings schemaLocation="maven:org.jvnet.jaxb2.maven2:maven-jaxb2-plugin-tests-po!/purchaseorder.xsd" node="/xs:schema">
    <jaxb:schemaBindings>
        <jaxb:package name="org.jvnet.jaxb2.maven2.tests.po"/>
    </jaxb:schemaBindings>      
</jaxb:bindings>

Но на данный момент это не .Пожалуйста, сообщите о проблеме , я постараюсь ее исправить.

Что сейчас работает, так это привязка на основе SCD:

<jaxb:bindings scd="x-schema::po" xmlns:po="urn:po">
    <jaxb:schemaBindings>
        <jaxb:package name="org.jvnet.jaxb2.maven2.tests.po"/>
    </jaxb:schemaBindings>      
</jaxb:bindings>

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

Практически у меня есть опыт, что привязки SCD не всегда работают надежно.

ОБНОВЛЕНИЕ

См. эту ссылку для получения дополнительной информации об использовании SCD в JAXB.

0 голосов
/ 14 мая 2014

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

...