Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"package javax.xml.soap is declared in module java.xml.ws, which is not in the module graph"

Tags:

java

So I took the SOAP example at Working Soap client example , put it into a file SOAPClientSAAJ.java, and tried compiling it (Openjdk 9 on Debian):

t@h ~/javatest> javac SOAPClientSAAJ.java 
SOAPClientSAAJ.java:1: error: package javax.xml.soap is not visible
import javax.xml.soap.*;
                ^
  (package javax.xml.soap is declared in module java.xml.ws, which is not in the module graph)
1 error

After Googling some, I found out that compiling and running as

t@h ~/javatest> javac --add-modules java.xml.ws SOAPClientSAAJ.java
t@h ~/javatest> java --add-modules java.xml.ws SOAPClientSAAJ

works. See also this video for general background: https://www.youtube.com/watch?v=y8bpKYDrF5I&t=20m17s

Now, questions:

  1. Shouldn't the compiler automatically add the module java.xml.ws ? (since it obviously knows it is needed) Is this a bug in javax.xml.soap ?
  2. Why is the --add-modules option not documented in my man pages? (openjdk 9 in Debian)
  3. What should I write in the .java file to automatically add the java.xml.ws module?
like image 443
Thue Avatar asked Sep 06 '17 21:09

Thue


1 Answers

This is a result of the new Java 9 modules. The javax.xml.soap package is actually a Java EE package, and so now isn't visible. The current workaround is to either use the --add-modules, as you've done, or to modularize your code.

Modularizing your code requires restructuring it into modules, and including a module-info.java file that specifies the modules you're using. In your case, specifying java.se.ee would give access to all the EE modules.

like image 194
Evan Knowles Avatar answered Oct 06 '22 00:10

Evan Knowles