正しくカスタムプロトコルのURLStreamHandlerを登録する
JavaでカスタムプロトコルのURLStreamHandlerを登録する方法として、ネット上で挙げられている方法は URL.setURLStreamHandlerFactory である。 しかし、このメソッドは大きな欠点があり、複数回setURLStreamHandlerFactoryを呼びさせない仕様にしてある。つまり、複数のURLStreamHandlerFactoryが登録できない。複数のURLStreamHandlerを登録したいときには、一つのURLStreamHandlerFactoryで、すべてのURLStreamHandlerを登録しなければならない。 しかし、ドキュメントをよく読むと、カスタムプロトコルのURLStreamHandlerを登録する方法がもう一つ存在すると示されている。 以前にアプリケーションが URLStreamHandlerFactory のインスタンスをストリーム・ハンドラ・ファクトリとして設定している場合は、そのインスタンスの createURLStreamHandler メソッドがプロトコル文字列を引数として呼び出されて、ストリーム・プロトコル・ハンドラを作成する。 まだ URLStreamHandlerFactory が設定されていない場合、あるいはファクトリの createURLStreamHandler メソッドが null を返した場合は、コンストラクタが次のシステム・プロパティの値を探す。 java.protocol.handler.pkgs このシステム・プロパティの値が null でなければ、値は、垂直スラッシュ文字「 | 」で区切られた、パッケージのリストとして解釈される。コンストラクタは次の名前を持つクラスをロードしようとする。 < package >.< protocol >.Handler ここで、< package >にはパッケージの名前が入り、< protocol >にはプロトコルの名前が入る。このクラスが存在しない場合、あるいはクラスは存在してもそれが URLStreamHandler のサブクラスではない場合には、リストにある次のパッケージを試すことになる。 以上の手順でもプロトコル・ハンドラが見つからなかった場合、コンストラクタはシステム