我有一个自定义类加载器,在它的构造函数中我有以下行。
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 类。为什么提供程序类不可用?
编辑:
我注意到的一件奇怪的事情是,虽然以下失败,
getInstance("MD5")
getInstance("MD5", "SUN")
这个有效!
getInstance("MD5", new sun.security.provider.Sun())
所以提供程序类毕竟是由引导加载程序加载的,但由于某种原因查找失败。我想知道为什么?