Generate JAX-WS classes from WSDL file using Maven plugin with Java11
Solution 1
the new version of jaxws-maven-plugin
(link) can generate Java classes with Java 11, using the plugin as follows:
<build>
<plugins>
...
<plugin>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3.2</version>
<executions>
<execution>
<id>generate-java-sources</id>
<phase>process-sources</phase>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<extension>true</extension>
<wsdlFiles>
<wsdlFile>${project.build.directory}/generated/wsdl/MyService.wsdl</wsdlFile>
</wsdlFiles>
<wsdlLocation>/wsdl/MyService.wsdl</wsdlLocation>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
An alternative plugin can also be the cxf-codegen-plugin from Apache CXF (link)
UPDATE
If you want to use the newer JakartaEE 9.0+ packages, you need to use the following plugin, keeping the same configurations:
<build>
<plugins>
...
<plugin>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>generate-java-sources</id>
<phase>process-sources</phase>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<extension>true</extension>
<wsdlFiles>
<wsdlFile>${project.build.directory}/generated/wsdl/MyService.wsdl</wsdlFile>
</wsdlFiles>
<wsdlLocation>/wsdl/MyService.wsdl</wsdlLocation>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.0</version>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
and for jaxb:
<groupId>com.evolvedbinary.maven.mojohaus</groupId>
<artifactId>jaxb-maven-plugin</artifactId>
<version>3.0.0</version>
Solution 2
Found this - https://github.com/mojohaus/jaxws-maven-plugin/issues/54#issuecomment-440597801 I used the same configuration as for org.jvnet.jax-ws-commons jaxws-maven-plugin. Think it is the same as org.codehaus.mojo, but don't 100% sure.
Tested with JDK 11. All XSD elements, ports and services are generated. You also need to add a few dependencies to your pom. Minimum:
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.main.javaee-api</groupId>
<artifactId>javax.jws</artifactId>
<version>3.1.2.2</version>
</dependency>
Nicolas Henneaux
I am an IT engineer working mainly with Java technologies and deeply interested in distributed system and storage. I am keen to learn and apply new technologies, methodologies and concepts.
Updated on July 18, 2022Comments
-
Nicolas Henneaux almost 2 years
In Java 11, JAX-WS has been removed from the JDK. It prevents to generate easily JAX-WS classes with a Maven plugin using
wsimport
under the hood. I am using the following configuration for the Maven pluginorg.codehaus.mojo:jaxws-maven-plugin
.<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxws-maven-plugin</artifactId> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>wsimport</goal> </goals> <configuration> <extension>true</extension> <packageName>tech.myproject.service</packageName> <wsdlFiles> <wsdlFile>${basedir}/src/main/resources/wsdl/service.wsdl</wsdlFile> </wsdlFiles> <wsdlLocation>/wsdl/service.wsdl</wsdlLocation> </configuration> </execution> </executions> </plugin>
Is there an easy way to install wsimport or to use another plugin bundling an architecture specific wsimport to continue generating WSDL classes?
-
Nicolas Henneaux about 5 yearsPhase
<phase>process-classes</phase>
was breaking my build since the generated classes were not generated otherwise it's fine, thanks! -
Max Lich over 4 yearsit does not generate classes with the suffix "Service" for me
-
DecKno almost 3 yearsThis helped. had to update from <groupId>org.codehaus.mojo</groupId> --> to <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-maven-plugin</artifactId>. After that had to import few jakarta related dependencies.
-
Stéphane Millien over 2 yearsBe careful the block
<configuration>
must be outside of block<execution>
, it must be at the same level of<plugin>