2013-04-09 10 views
14

Mam problem z konfiguracją jaxb2-maven-plugin do generowania klas Java z pliku WSDL i wielu plików XSD, które istnieją w tym samym katalogu standardowym src/main/xsd.Generowanie klas za pomocą wtyczki jaxb2-maven z WSDL

how to use jaxb2 maven plugin with inline XSD? dotyczy tylko tego, że odpowiedzi poprawnie sugerują użycie parametru wsdl w konfiguracji wtyczki, ale to pytanie jest naprawdę związane z wbudowanymi XSD, a moje XSD są zewnętrzne.

Parametry celu wtyczki są wymienione na here.

Moja konfiguracja wtyczki jest:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxb2-maven-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
     <execution> 
      <id>xjc</id> 
      <goals> 
       <goal>xjc</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <packageName>com.x.y.model</packageName> 
     <wsdl>true</wsdl> 
    </configuration> 
</plugin> 

Jestem testowania to z mvn -X clean jaxb2:xjc ale plugin jest ignorowanie .wsdl jak widać na wyjściu debugowania

[DEBUG] accept false for file c:\projects\foo\src\main\xsd\service.wsdl 
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\datatypes.xsd 
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\more-datatypes.xsd 

Odpowiedz

21

Badając wyjście debugowania Maven z następujących argumenty przekazywane do JAXB XJC (oraz trochę prób i błędów) stwierdziłem, że muszę dostarczyć 2 dodatkowe parametry konfiguracyjne do wtyczki.

To zatrzymuje skanowanie wtyczek dla plików XSD i po prostu używa .wsdl jako źródła. Pliki XSD są na przykład dołączane do dyrektyw WSDL jako <xsd:include schemaLocation="datatypes.xsd" />, które są rozwiązywane lokalnie, powodując generowanie wszystkich typów z WSDL i XSD jako klas Java.

Sekcja konfiguracji, który pracował dla mnie jest:

<configuration> 
    <packageName>com.x.y.model</packageName> 
    <wsdl>true</wsdl> 
    <xmlschema>false</xmlschema> 
    <schemaFiles>service.wsdl</schemaFiles> 
</configuration> 

Bez <xmlschema>false</xmlschema> Mavena błędów z:

org.apache.maven.lifecycle.LifecycleExecutionException: Nie udało się zrealizować cel org.codehaus .mojo: jaxb2-maven-plugin: 1,5: XJC (default-CLI) na foo projektu: nie może przetworzyć schematu: /c:/projects/foo/src/main/xsd/service.wsdl

+2

omg, dziękuję to działa, kiedy nie zostanie określony katalog i użyć domyślnym katalogu XSD – Erich

+0

Dzięki, tylko to, co potrzebne! – evandongen

3

Próbowałem jaxb2-maven-plugin który wygeneruje plik java

<plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>jaxb2-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>xjc</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <schemaDirectory>src/main/webapp/schemas/</schemaDirectory> 
        <wsdl>true</wsdl> 
        <outputDirectory>src/main/java</outputDirectory> 
       </configuration> 
      </plugin> 

W tym celu uruchom Użyłem polecenia

mvn jaxb2:xjc 

Spróbuj to będzie generować klas JAXB do folderu src. Mam nadzieję, że tego szukasz.

5

Jeśli generujesz również wsdl i xsd, spróbuj ustawić inną konfigurację wykonania: Może ona nie mieć tego samego schemaDirectory lub wtyczka nie uruchomi pomyślnie drugiego wykonania, ponieważ buforuje wykonywanie na podstawie tej zmiennej. Radzę zrobić to takie jak

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>jaxb2-maven-plugin</artifactId> 
      <version>1.6</version> 
      <executions> 
       <execution> 
        <id>generate-sri-facturas</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>xjc</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>target/generated-sources/sri</outputDirectory> 
         <packageName>${commonsource.packageName}</packageName> 
         <schemaDirectory>src/main/resources/schema/xsd</schemaDirectory> 
         <schemaFiles>factura_v1.1.0.xsd</schemaFiles> 
        </configuration> 
       </execution> 
       <execution> 
        <id>generate-sri-autorizacion-comprobantes</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>xjc</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>target/generated-sources/sri/autorizacion</outputDirectory> 
         <packageName>${commonsource.packageName}.autorizacion</packageName> 
         <wsdl>true</wsdl> 
         <xmlschema>false</xmlschema> 
         <schemaDirectory>src/main/resources/schema/wsdl</schemaDirectory> 
         <schemaFiles>AutorizacionComprobantes.wsdl</schemaFiles> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

stworzyłem xsd i folder wsdl oddzielić konfiguracje.

0

Można użyć następujący kod w konfiguracji:

   <configuration> 
        <!-- Package to store the generated file --> 
        <packageName>com.example.demo.wsdl</packageName> 
        <!-- Treat the input as WSDL --> 
        <wsdl>true</wsdl> 
        <!-- Input is not XML schema --> 
        <xmlschema>false</xmlschema> 
        <!-- The WSDL file that you saved earlier --> 
        <schemaFiles>horarios.wsdl</schemaFiles> 
        <!-- The location of the WSDL file --> 
        <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory> 
        <!-- The output directory to store the generated Java files --> 
        <outputDirectory>${project.basedir}/src/main/java</outputDirectory> 
        <!-- Don't clear output directory on each run --> 
        <clearOutputDir>false</clearOutputDir> 
       </configuration>