首頁  >  文章  >  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 年1111月)

使用最新版本的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 月)

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