Skip to content

Commit

Permalink
Merge pull request #170 from z529192557/master
Browse files Browse the repository at this point in the history
修改增强 BootstrapClassLoader 加载的类,可能抛出的NPE异常
  • Loading branch information
oldmanpushcart authored Apr 24, 2019
2 parents 617ffa3 + 94aa86a commit fe006a1
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@ public static String getCommonSuperClass(String type1, String type2, ClassLoader
private static String getCommonSuperClassImplByAsm(String type1, String type2, ClassLoader targetClassLoader) {
InputStream inputStreamOfType1 = null, inputStreamOfType2 = null;
try {
//targetClassLoader 为null,说明是BootStrapClassLoader,不能显式引用,故使用系统类加载器间接引用
if(null == targetClassLoader){
targetClassLoader = ClassLoader.getSystemClassLoader();
}
if(null == targetClassLoader){
return "java/lang/Object";
}
inputStreamOfType1 = targetClassLoader.getResourceAsStream(type1 + ".class");
if (null == inputStreamOfType1) {
return "java/lang/Object";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ public void test() {
Assert.assertEquals("javax/servlet/ServletResponse", getCommonSuperClass("javax/servlet/ServletResponse", "javax/servlet/http/HttpServletResponse", loader));
Assert.assertEquals("javax/servlet/ServletResponse", getCommonSuperClass("javax/servlet/http/HttpServletResponse", "javax/servlet/ServletResponse", loader));
Assert.assertEquals("java/lang/Object", getCommonSuperClass("java/lang/Throwable", "java/io/FileInputStream", loader));
Assert.assertEquals("java/lang/Exception", getCommonSuperClass("java/io/IOException", "java/lang/Exception", null));
Assert.assertEquals("java/lang/Exception", getCommonSuperClass("java/io/IOException", "javax/servlet/ServletException", null));
Assert.assertEquals("java/lang/Object", getCommonSuperClass("java/lang/Throwable", "java/io/FileInputStream", null));
Assert.assertEquals("javax/servlet/ServletResponse", getCommonSuperClass("javax/servlet/ServletResponse", "javax/servlet/http/HttpServletResponse", null));
Assert.assertEquals("javax/servlet/ServletResponse", getCommonSuperClass("javax/servlet/http/HttpServletResponse", "javax/servlet/ServletResponse", null));
}

}

0 comments on commit fe006a1

Please sign in to comment.