J'ai du mal à configurer le jaxb2-maven-plugin
pour générer Java classes à partir d'un WSDL et de plusieurs fichiers XSD qui existent tous dans le même répertoire standard src/main/xsd
.
comment utiliser le plugin jaxb2 maven avec XSD en ligne? est lié uniquement dans la mesure où les réponses suggèrent correctement d'utiliser le paramètre wsdl
dans la configuration du plugin mais cette question concerne vraiment les XSD en ligne et mon Les XSD sont externes.
Les paramètres de l'objectif du plugin sont répertoriés ici .
Ma configuration de plugin est:
<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>
Je teste cela avec mvn -X clean jaxb2:xjc
mais le plugin ignore le .wsdl
comme vu dans la sortie de débogage
[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
En examinant la sortie de débogage Maven des arguments transmis au JAXB XJC (et un peu d'essais et d'erreurs), j'ai trouvé que je devais fournir 2 paramètres de configuration supplémentaires au plugin.
Cela arrête l'analyse du plugin pour les fichiers XSD et utilise simplement le .wsdl
comme source. Les fichiers XSD sont inclus dans le WSDL comme<xsd:include schemaLocation="datatypes.xsd" />
directives, par exemple, qui sont résolues localement, ce qui entraîne la génération de tous les types WSDL et XSD en tant que classes Java.
La section de configuration qui a fonctionné pour moi est:
<configuration>
<packageName>com.x.y.model</packageName>
<wsdl>true</wsdl>
<xmlschema>false</xmlschema>
<schemaFiles>service.wsdl</schemaFiles>
</configuration>
Sans le <xmlschema>false</xmlschema>
Erreurs Maven avec:
org.Apache.maven.lifecycle.LifecycleExecutionException: échec de l'exécution de l'objectif org.codehaus.mojo: jaxb2-maven-plugin: 1.5: xjc (default-cli) sur foo de projet: impossible de traiter le schéma:/c:/projects/foo /src/main/xsd/service.wsdl
Si vous générez wsdl et xsd, essayez également de mettre dans une configuration d'exécution différente: il peut ne pas avoir le même schemaDirectory
ou le plugin ne fonctionnera pas avec succès la deuxième exécution, car il met en cache les exécutions basées sur cette variable. Je conseille de le faire comme
<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>
J'ai créé un dossier xsd
et un dossier wsdl
pour séparer les configurations.
J'ai essayé jaxb2-maven-plugin
qui génère le fichier 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>
Pour exécuter cela, j'ai utilisé la commande
mvn jaxb2:xjc
Essayez ceci, il générera les classes jaxb dans votre dossier src. J'espère que vous cherchez cela.
Vous pouvez utiliser le code suivant dans la configuration:
<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>