web-dev-qa-db-fra.com

Générer des classes avec jaxb2-maven-plugin à partir de WSDL

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

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

25
andyb

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.

6
EliuX

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.

3
Abhilash Ranjan

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>
1
J. Abel