Java Web Startとリソースとクラスローダ

Java Web Startにおいて、アプリケーション中で使用するリソース(イメージ、ファイル、etc)は最寄のクラスローダを用いて、jarファイル中のリソースを取得して使うことはFAQなのだが、同アプリケーションをデバッグしている時に不可思議な振る舞いが発生した。(JavaのバージョンはJava6(build 1.6.0_05-b13))

String path = "/images/button.png";
FooClass.class.getResource(path); 

このようなコードがあって、イメージファイル"button.png"が以下のように配置されていた場合(".png"ではなく".PNG"、つまり拡張子が大文字ってのがミソだ)、素のアプリケーションでは問題なくイメージの取得に成功するが、Java Web Start経由で起動したアプリケーションでは何故かイメージの取得に失敗するのだ。

%CLASSPATH$/images/button.PNG

この場合、getResourceメソッドを実行するのはクラスをロードしたクラスローダなのだが、アプリケーションが一般的なJava.exeから実行される場合とJava WebStartから実行される場合では、そのクラスローダが違う。これは当たり前なのだが、問題なのはクラスローダによってリソースファイル(ここでは"button.png")の拡張子の文字ケースの扱いが変わるってことだ。

  • コンベンショナルなクラスローダは、検索するリソースファイルの拡張子の文字ケースを無視する
  • Java Web Startで使われるクラスローダは、検索するリソースファイルの拡張子の文字ケースを認識する

Windows環境としては拡張子の文字ケースは無視して欲しいが、以前にJava環境では拡張子といえども文字ケースを意識するのが当たり前、ということを聞いたような気がする。

どちらが正しいんだろう。

追記

artonさんにもコメント頂いているが、基本的にはクラスパスにマップされたリソースは拡張子も含めてケースセンシティブであるのが真っ当。であれば何故AppClassLoaderが拡張子に対してケースインセンシティブなのか。(JNLPClassLoaderはケースセンシティブであることを確認)
AppClassLoaderはローカル環境で使われるので、リソースパスにFileクラスを使って検索している。一方でJNLPClassLoaderはリソースパスにURLクラスを使うので拡張子もパスの一部。だからケースセンシティブなのか?