カスタムクラスローダーがあり、そのコンストラクターに次の行があります。
MessageDigest.getInstance("MD5")
カスタム クラスローダーをシステム クラスローダーとしてサンプル メイン アプリケーションを実行すると、次のエラーが発生します。
Error occurred during initialization of VM
java.lang.Error: java.security.NoSuchAlgorithmException: MD5 MessageDigest not available
at java.lang.ClassLoader.initSystemClassLoader(ClassLoader.java:1504)
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1468)
セキュリティ プロバイダは rt.jar に由来するため、これらのクラスはブートストラップ クラスローダによってロードされる必要があると考えていたので、クラスローダで使用できるはずです。結局、MessageDigest クラスにアクセスできます。プロバイダー クラスが利用できないのはなぜですか?
編集:
私が気づいた奇妙なことの1つは、次の失敗ですが、
getInstance("MD5")
getInstance("MD5", "SUN")
これは機能します!
getInstance("MD5", new sun.security.provider.Sun())
結局、プロバイダー クラスはブートストラップ ローダーによって読み込まれますが、何らかの理由でルックアップが失敗します。なぜだろう?