Java 11 package javax.xml.soap 不存在从 Java 11 中移除的 JAX-WS

2022-09-01 02:50:49

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

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

当我使用Java 8构建项目时,这很好,但是使用Java 11构建它失败并出现编译错误:

package javax.xml.soap does not exist

如何解决此问题?


答案 1

从 Java 11 中移除的 JAX-WS

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>

雅加达EE 8更新(2020年3月)

您可以使用 Jakarta EE 8 中的 Jakarta 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>

雅加达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.*

雅加达EE 10更新(2022年6月)

使用最新版本的 Jakarta XML Web Services 4.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>

答案 2

推荐