I'm trying to create a simple message using SOAP:
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage message = mf.createMessage();
When I build the project with Java 8 it's fine, but building it with Java 11 fails with a compilation error:
package javax.xml.soap does not exist
How do I fix the issue?
JAX-WS is no longer bundled with Java 11.
According to the release notes, Java 11 removed the Java EE modules:
java.xml.ws (JAX-WS, plus the related technologies SAAJ and Web Services Metadata) - REMOVED
See JEP 320 for more info.
You can fix the issue by using alternate versions of the Java EE technologies. Simply add a com.sun.xml.ws : jaxws-ri Maven artifact that contains the technologies you need:
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.2</version>
<type>pom</type>
</dependency>
Instead of using old JAX-WS module you can fix the issue by using Jakarta XML Web Services from Jakarta EE 8:
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.3</version>
<scope>runtime</scope>
</dependency>
Use latest release of Jakarta XML Web Services 3.0:
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>3.0.0</version>
<scope>runtime</scope>
</dependency>
Note: change javax.*
imports to jakarta.*