首页  >  文章  >  Java  >  如何解决使用 JAXB 时 Java 11 中的“javax.xml.bind 不存在”错误?

如何解决使用 JAXB 时 Java 11 中的“javax.xml.bind 不存在”错误?

Barbara Streisand
Barbara Streisand原创
2024-11-06 00:47:02360浏览

How to Resolve the

Java 11 中 javax.xml.bind 包不存在

使用 JAXB 解析 XML 数据并对其进行身份验证时:

<code class="java">JAXBContext context = JAXBContext.newInstance("com.acme.foo");
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setSchema(schema);
FooObject fooObj = (FooObject) unmarshaller.unmarshal(new File("foo.xml"));</code>

基于 Java 8,此代码可以正常运行,但在 Java 11 中,会出现以下编译错误:

package javax.xml.bind does not exist

解决方法

根据发行说明,Java 11 删除了 Java EE 模块,包括 javax.xml.bind (JAXB),这导致了此问题。

要解决此问题,需要使用 Java EE 技术的替代版本,添加包含所需类的 Maven 依赖项即可:

<code class="xml"><dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-core</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.0</version>
</dependency></code>

Jakarta EE 8 更新(2020 年 3 月)

现在可以使用 Jakarta EE 8 中的 Jakarta XML Binding 替换旧的 JAXB 模块:

<code class="xml"><dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>2.3.3</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.3</version>
  <scope>runtime</scope>
</dependency></code>

Jakarta EE 9 更新(2020 年 11 月)

使用最新版本的 Jakarta XML Binding 3.0:

<code class="xml"><dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>3.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>3.0.0</version>
  <scope>runtime</scope>
</dependency></code>

注意:随着 Jakarta EE 9 采用新的 API 包命名空间 jakarta.xml.bind.*,请更新导入语句:

<code class="java">javax.xml.bind -> jakarta.xml.bind</code>

Jakarta EE 10 更新(2022 年 6 月)

使用最新版本的 Jakarta XML Binding 4.0(需要 Java SE 11 或更高版本):

<code class="xml"><dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>4.0.0</version>
  <scope>runtime</scope>
</dependency></code>

以上是如何解决使用 JAXB 时 Java 11 中的“javax.xml.bind 不存在”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn