maven - plugin - mvn generate sources from wsdl
¿Cómo generar clases desde wsdl usando Maven y wsimport? (7)
Aquí hay un ejemplo de cómo generar clases desde wsdl con jaxws maven plugin desde una url o desde una ubicación de archivo (desde la ubicación del archivo wsdl se comenta).
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<build>
<plugins>
<!-- usage of jax-ws maven plugin-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>wsimport-from-jdk</id>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- using wsdl from an url -->
<wsdlUrls>
<wsdlUrl>
http://myWSDLurl?wsdl
</wsdlUrl>
</wsdlUrls>
<!-- or using wsdls file directory -->
<!-- <wsdlDirectory>src/wsdl</wsdlDirectory> -->
<!-- which wsdl file -->
<!-- <wsdlFiles> -->
<!-- <wsdlFile>myWSDL.wsdl</wsdlFile> -->
<!--</wsdlFiles> -->
<!-- Keep generated files -->
<keep>true</keep>
<!-- Package name -->
<packageName>com.organization.name</packageName>
<!-- generated source files destination-->
<sourceDestDir>target/generatedclasses</sourceDestDir>
</configuration>
</plugin>
</plugins>
</build>
Cuando intento ejecutar "mvn genera-fuentes" esta es mi salida:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building gensourcesfromwsdl 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.104s
[INFO] Finished at: Tue Aug 20 15:41:10 BST 2013
[INFO] Final Memory: 2M/15M
[INFO] ------------------------------------------------------------------------
No recibo ningún error pero no hay clases Java generadas desde el archivo wsdl.
Aquí está mi archivo pom.xml contra el que estoy ejecutando el complemento:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>gensourcesfromwsdl</groupId>
<artifactId>gensourcesfromwsdl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlLocation>http://mysite/firstwsdl.asmx?wsdl</wsdlLocation>
<packageName>com</packageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Qué estoy haciendo mal ? El paquete com
existe en el proyecto ''gensourcesfromwsdl'' y la ubicación wsdl es válida.
Cuando ejecuto wsimport
través de la línea de comando:> wsimport -keep -verbose http://mysite/firstwsdl.asmx?wsdl
se genera la clase.
Aunque esta respuesta es un poco tardía, puede ser útil para alguien. Parece que has usado pluginManagement. Si utiliza administración de plugin, no elegirá la ejecución del complemento.
Debería estar bajo
<build>
<plugins>
<plugin>
Estaba teniendo el mismo problema al generar las clases desde el objetivo de wsimport. En lugar de usar jaxws: wsimport goal en eclipse, Maven Build estaba usando una instalación de compilación limpia que no podía generar código desde el archivo wsdl. Gracias al ejemplo anterior. Ejecute jaxws: wsimport goal desde Eclipse ide y funcionará
Intente envolver wsdlLocation en wsdlUrls
<wsdlUrls>
<wsdlLocation>http://url</wsdlLocation>
</wsdlUrls>
La clave aquí es mantener la opción de wsimport. Y se configura utilizando el elemento en Acerca de mantener de la documentación de wsimport:
A a = new A()
.withField1(value1)
.withField2(value2);
Para generar clases desde WSDL, todo lo que necesitas es build-helper-maven-plugin y jaxws-maven-plugin en tu pom.xml
Asegúrese de haber colocado wsdl en la carpeta src / main / resources / wsdl y el esquema correspondiente en src / main / resources / schema, ejecute el comando "mvn generate-sources" desde el directorio raíz del proyecto.
C:/Project root directory > mvn generate-sources
las clases generadas en java se pueden ubicar en la carpeta
target/generated/src/main/java/com/raps/code/generate/ws.
fragmento de pom.xml
<basedir>
C:/Project root directory
</basedir>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${basedir}/target/generated/src/main/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.12</version>
<configuration>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
<packageName>com.raps.code.generate.ws</packageName>
<keep>true</keep>
<sourceDestDir>${basedir}/target/generated/src/main/java</sourceDestDir>
</configuration>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
</plugin>
Veo que algunas personas prefieren generar fuentes en el destino a través de jaxws-maven-plugin Y hacer que estas clases sean visibles en la fuente a través de build-helper-maven-plugin. Como argumento de esta estructura.
El sistema de gestión de versiones (svn / etc.) siempre notará las fuentes modificadas.
Con git no es cierto. Así que solo puede configurar jaxws-maven-plugin
para ponerlos en sus fuentes, pero no en la carpeta de destino. La próxima vez que construyas tu proyecto, git no marcará estos archivos generados como modificados. Aquí está la solución simple con un solo complemento:
-keep keep generated files
Además (solo para tener en cuenta) en este ejemplo, las clases SOAP se generan con Fluent API, por lo que puede crearlas como:
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-fluent-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<packageName>som.path.generated</packageName>
<xjcArgs>
<xjcArg>-Xfluent-api</xjcArg>
</xjcArgs>
<verbose>true</verbose>
<keep>true</keep> <!--used by default-->
<sourceDestDir>${project.build.sourceDirectory}</sourceDestDir>
<wsdlDirectory>src/main/resources/META-INF/wsdl</wsdlDirectory>
</configuration>
</execution>
</executions>
</plugin>