Magnolia Tech

いつもコードのことばかり考えている人のために。

java.net.URLConnection.guessContentTypeFromNameが使うデフォルトのcontent-types.propertiesがJava9から変わった

java.net.URLConnection.guessContentTypeFromNameはファイルの拡張子からMIME Typeを特定するメソッドです。このメソッドはJava8以前ではデフォルトで、$JAVA_HOME/lib/content-types.propertiesを参照していました。

しかし、Java9以降では、$JAVA_HOME/lib/content-types.propertiesは有りません。

この辺りの事情は、Java9で削除された機能に関する解説に書かれています。

Removed APIs, Features, and Options

詳細はこちら。

bugs.java.com

ちなみに本当に削除された訳では無く、jdk/src/java.base/windows/classes/sun/net/www/配下に、ソースと一緒におかれています。

jdk10/master: 4554a9ae19ef jdk/src/java.base/windows/classes/sun/net/www/content-types.properties

なお、システムプロパティのcontent.types.user.tableに設定したパスのファイルに定義を書いておくと、任意のMIME Typeを追加することができる点は変わっていません。

以上、意外なところでJava9の変更点に引っかかって、「ファイルが無い!」と1時間溶かした記録です。モジュール化、難しい。

Java 9 Modularity: Patterns and Practices for Developing Maintainable Applications

Java 9 Modularity: Patterns and Practices for Developing Maintainable Applications

WEB+DB PRESS Vol.101

WEB+DB PRESS Vol.101