`
EvanHuang125
  • 浏览: 52877 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多
先介绍下背景:
环境是是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不能加载这个类。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics