Java 11包中的javax.xml.soap不存在。

51

我正在尝试使用 SOAP 创建一个简单的消息:

MessageFactory mf = MessageFactory.newInstance();
SOAPMessage message = mf.createMessage();

使用 Java 8 构建该项目时,一切正常,但使用 Java 11 构建将导致编译错误:

package javax.xml.soap does not exist

我该如何解决这个问题?

1个回答

122

JAX-WS已从Java 11中移除

JAX-WS不再与Java 11捆绑。

根据发行说明,Java 11删除了Java EE模块:

java.xml.ws (JAX-WS, plus the related technologies SAAJ and Web Services Metadata) - REMOVED
  • Java 8 - 可用
  • Java 9 - 弃用
  • Java 10 - 弃用
  • Java 11 - 已删除

更多信息请参见JEP 320

您可以通过使用Java EE技术的替代版本来解决问题。只需添加一个包含所需技术的com.sun.xml.ws : jaxws-ri Maven构件即可:

<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-ri</artifactId>
  <version>2.3.2</version>
  <type>pom</type>
</dependency>

Jakarta EE 8更新(2020年3月)

您可以使用来自Jakarta EE 8Jakarta XML Web Services模块来解决问题,而不是使用旧的JAX-WS模块:

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

Jakarta EE 9升级(2020年11月)

使用最新的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>

注意:javax.*的导入更改为jakarta.*

Jakarta EE 10更新(2022年6月)

使用最新版本的Jakarta XML Web Services4.0(需要Java SE 11或更新版本):

<dependency>
  <groupId>jakarta.xml.ws</groupId>
  <artifactId>jakarta.xml.ws-api</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-rt</artifactId>
  <version>4.0.0</version>
  <scope>runtime</scope>
</dependency>

10
请注意,上述的jaxws-ri依赖包含了许多JAR文件,你可能不需要全部。 - holmis83
2
@holmis83,我已经更新了答案,使用Jakarta EE 8,这个问题已经被解决了。 - Boris
1
@holmis83 - 我刚刚升级了我的老旧JDK 7应用程序,使用了Jakarta依赖项升级到JDK 11。谢谢!这节省了我很多抓狂的时间! - user1492226
我在Windows上运行Redhat OpenJDK 8,但javax.xml包已经消失了。 - Leos Literak
@LeosLiterak,你能提供JDK的链接吗? - Boris
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接