java jar包内反射 外面的class 报classNotFoundException_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java jar包内反射 外面的class 报classNotFoundException

java jar包内反射 外面的class 报classNotFoundException

 2018/1/3 9:26:14  EvanHuang125  程序员俱乐部  我要评论(0)
  • 摘要:先介绍下背景:环境是是web环境,tomcat7.x,项目中需要使用外部一个sdk(一个jar包)作为client去访问外部server做认证,sdk提供了配置propery来指定一个连接server用的class,这个class需要实现包中XXXHelper接口。包中用一个xxxProvider.class来反射创建配置class对象。但是包中使用的是class.ForName("package.className"),每次都报ClassNotFoundException
  • 标签:not Java 反射 class
先介绍下背景:
环境是是web环境,tomcat7.x,项目中需要使用外部一个sdk(一个jar包)作为client去访问外部server做认证,sdk提供了配置propery来指定一个连接server用的class,这个class需要实现包中XXXHelper接口。包中用一个xxxProvider.class来反射创建配置class对象。
但是包中使用的是class.ForName("package.className"),每次都报ClassNotFoundException。
解决办法1 只有放在这个jar包中才可以
解决办法2
后来反编译替换创建对象的xxxProvider, 将class.ForName换成下面的就好了。

Thread.currentThread().getContextClassLoader().loadClass($YOUR_CLASS_NAME)
这种情况需要和提供sdk的团队沟通去修改。

通过对比加载实例所用的classLoader和xxxProvider的classLoader发现,创建实例成功的是使用WebappClassLoader(Thread.currentThread().getContextClassLoader())而xxxProvider使用的是StandardClassLoader, WebappClassLoader是StandardClassLoader子加载器,根据类加载机制,StandardClassLoader不能加载这个类。

发表评论
用户名: 匿名