Skip to content

Commit

Permalink
fix for alibaba#385
Browse files Browse the repository at this point in the history
  • Loading branch information
DayJun committed Oct 16, 2022
1 parent 7a96d08 commit 2d66481
Showing 1 changed file with 18 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,22 @@ private boolean isBootstrapClassLoader() {

// 获取资源数据流
// 一般而言可以从loader直接获取,如果获取不到那么这个类也会能加载成功
// 但如果遇到来自BootstrapClassLoader的类就必须从java.lang.Object来获取
private InputStream getResourceAsStream(final String resourceName) {
return isBootstrapClassLoader()
? Object.class.getResourceAsStream("/" + resourceName)
: loader.getResourceAsStream(resourceName);
// 但如果遇到来自BootstrapClassLoader的类就必须从java.lang.Object来获取,但是该方法仅限于jdk8
// 对于jdk >= 9的版本来说,需要先获取到相关类,然后通过这个类获取自己的resource
private InputStream getResourceAsStream(final String javaClassName) {
final String resourceName = internalClassNameToResourceName(toInternalClassName(javaClassName));
InputStream ins = null;
if(isBootstrapClassLoader()) {
try {
Class<?> clz = Class.forName(javaClassName, false, null);
ins = clz.getResourceAsStream("/" + resourceName);
} catch (ClassNotFoundException e) {
// pass
}
} else {
ins = loader.getResourceAsStream(resourceName);
}
return ins;
}

// 将内部类名称转换为资源名称
Expand Down Expand Up @@ -315,8 +326,8 @@ private ClassStructure newInstance(final String javaClassName) {
if (null != existClassStructure) {
return existClassStructure;
} else {

final InputStream is = getResourceAsStream(internalClassNameToResourceName(toInternalClassName(javaClassName)));
// fix for #385
final InputStream is = getResourceAsStream(toJavaClassName(javaClassName));
if (null != is) {
try {
final ClassStructure classStructure = new ClassStructureImplByAsm(is, loader);
Expand Down

0 comments on commit 2d66481

Please sign in to comment.