1. ホーム

[解決済み】Java 11 パッケージ javax.xml.bind が存在しない [重複]。

2022-04-04 02:08:28

質問

XMLデータをJavaのコンテンツツリーにデシリアライズするのに JAXB この場合、XML データはアンマーシャルされた状態で検証されます。

try {
  JAXBContext context = JAXBContext.newInstance("com.acme.foo");
  Unmarshaller unmarshaller = context.createUnmarshaller();
  unmarshaller.setSchema(schema);
  FooObject fooObj = (FooObject) unmarshaller.unmarshal(new File("foo.xml"));
} catch (UnmarshalException ex) {
  ex.printStackTrace();
} catch (JAXBException ex) {
  ex.printStackTrace();
}

でビルドすると ジャバ8 でのビルドは問題ないのですが Java 11 はコンパイルエラーで失敗します。

package javax.xml.bind does not exist

どうすれば問題を解決できますか?

解決方法を教えてください。

によると リリースノート Java 11では、Java EEモジュールが削除されました。

java.xml.bind (JAXB) - REMOVED

  • Java 8 - OK
  • Java 9 - DEPRECATED
  • Java 10 - DEPRECATED
  • ジャバ11 削除

参照 JEP 320 をご覧ください。

代替バージョンのJava EEテクノロジーを使用することで、この問題を解決することができます。必要なクラスを含むMavenの依存関係を追加するだけです。

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

Jakarta EE 8 アップデート(2020年3月)

古いJAXBモジュールを使用する代わりに、以下の方法で問題を解決できます。 ジャカルタXMLバインディング から ジャカルタEE8 :

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

Jakarta EE 9 アップデート(2020年11月)

Jakarta XML Bindingの最新リリースを使用する 3.0 :

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

Jakarta EE 9 は新しい API パッケージの名前空間を採用しています。 jakarta.xml.bind.* そのため、import 文を更新してください。

javax.xml.bind -> jakarta.xml.bind