2013-04-09 8 views
14

Ho problemi a configurare lo jaxb2-maven-plugin per generare classi Java da un WSDL e più file XSD che esistono tutti nella stessa directory standard src/main/xsd.Generare classi con jaxb2-maven-plugin da WSDL

how to use jaxb2 maven plugin with inline XSD? è correlato solo al fatto che le risposte suggeriscono correttamente utilizzando il parametro wsdl nella configurazione del plug-in, ma quella domanda riguarda in realtà XSD in linea e le mie XSD sono esterne.

I parametri dell'obiettivo del plug-in sono elencati here.

La mia configurazione del plugin è:

<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> 

sto testando questo con mvn -X clean jaxb2:xjc ma il plugin sta ignorando la .wsdl come si vede nell'output di debug

[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 

risposta

21

Esaminando l'output di debug Maven del argomenti passati al JAXB XJC (e un po 'di tentativi ed errori) ho scoperto che avevo bisogno di fornire altri 2 parametri di configurazione al plugin.

Ciò interrompe la scansione del plug-in per i file XSD e utilizza solo il .wsdl come origine. I file XSD sono inclusi nel WSDL come, ad esempio, le direttive <xsd:include schemaLocation="datatypes.xsd" /> che vengono risolti localmente, con la conseguente generazione di tutti i tipi da WSDL e XSD come classi Java.

La sezione di configurazione che ha funzionato per me è:

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

Senza i <xmlschema>false</xmlschema> Maven errori con:

org.apache.maven.lifecycle.LifecycleExecutionException: Impossibile eseguire obiettivo org.codehaus .mojo: jaxb2-maven-plugin: 1.5: xjc (default-CLI) sul progetto di foo: non è stato possibile elaborare lo schema: /c:/projects/foo/src/main/xsd/service.wsdl

+2

omg, grazie questo funziona quando non si specifica una directory e utilizzare la directory predefinita XSD – Erich

+0

Grazie, proprio quello che mi serviva! – evandongen

3

ho cercato jaxb2-maven-plugin che generano il file 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> 

Per eseguire questo ho usato il comando

mvn jaxb2:xjc 

Prova questo genererà le classi JAXB nella cartella src. Spero tu stia cercando questo.

5

Se si sta generando anche wsdl e xsd, provare a inserire una configurazione di esecuzione diversa: potrebbe non avere lo stesso schemaDirectory o il plug-in non eseguirà correttamente la seconda esecuzione, poiché esegue le esecuzioni delle cache basate su questa variabile. I consigli di farlo come

 <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> 

ho creato un xsd e una cartella wsdl per separare le configurazioni.

0

È possibile utilizzare il codice segue nella configurazione:

   <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>