Edited at

Java11でJAXBContextなどを含むシステムプロパティが使えなくなったメモ

時間もかかって結構大変だったので備忘録。

開発中に、今まで動いていたプロジェクトのJavaのバージョンを11にアップデートするという話があった。

結論から言うと、下記のようなメッセージを含むエラーが延々と出て動かなくなった。

JAXBContext cannot be resolved

The import javax.xml.bind cannot be resolved

これ以外のエラーもあったけど、要は javax.xml.bind などの今まで使えていたライブラリが突然使えなくなっていた。


環境

Java11(jdk-11.0.1)

Spring Tool Suite 3.9.6.RELEASE


解決方法

※Mavenのpom.xmlでライブラリを管理している場合のやり方。

pom.xmlに下記を追加

<dependency>

<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>

見つからないといわれているライブラリを自力で用意する必要がある。


Oracle JDK 11 のリリースノート

OracleのJDK 11 Release NotesにRemoved Features and Optionsという項目があった。

いくつかのシステムプロパティがJava11から使えなくなるということらしい。

↓ 自分に関係のあった辺りをコピペ。(赤字が自分が怒られていたライブラリ)


In addition, the following system properties are no longer applicable due to the the removal of the Java EE and CORBA modules:

com.sun.xml.internal.ws.client.ContentNegotiation

com.sun.xml.internal.ws.legacyWebMethod

javax.xml.bind.context.factory

javax.xml.bind.JAXBContext

javax.xml.soap.MetaFactory

javax.xml.ws.spi.Provider

jaxb.fragment

jaxb.noNamespaceSchemaLocation

jaxb.schemaLocation

jaxb.formatted.output

jaxb.encoding


リリースノートに全容が書かれています。

■ リリースノート

https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html

■ Removed Features and Options の項目

https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#Removed

mail.mimeなど他にも色々無くなっている。

ここで削除されたライブラリを今まで使っていたプロジェクトは、用意無しにJava11にアップデートすると、当然エラーが発生するという事だった。


参考

前述したエラーを解決するために(その時は原因も分からなかった)模索していて見つけたページ

https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception-in-j

https://github.com/authzforce/restful-pdp/issues/4