该异常是创建代理时加载接口的类加载器与创建时传入的不一致。

在本地eclipse做openfire二次开发,本地运行没错,部署到服务器上后报异常:

     java.lang.IllegalArgumentException: interface xx is not visible from class loader。

根据异常信息,可知是动态代理时出错的。而在之前部署过却没有这异常发生。

从日志上分析,可以找到抛异常的地方是:

Class<?> java.lang.reflect.Proxy.getProxyClass0(ClassLoader loader, Class<?>... interfaces);
 
由于服务器上不能断点分析,以及无法修改jdk添加日志,通过复制关键代码到自己代码开始抛出异常处打印日志,发现:
            Class<?> interfaceClass = null;
try {
interfaceClass = Class.forName(interfaceName, false, loader);
} catch (ClassNotFoundException e) {
}
if (interfaceClass != interfaces[i]) {
throw new IllegalArgumentException(
interfaces[i] + " is not visible from class loader");
}
interfaceClass 为null值。

然后对比之前的开发代码:
之前:
public RPCGameAction gameAction = (RPCGameAction) Container
.createRemoteService(RPCGameAction.class, "gamecenter"); 现在:
public RPCGameAction getGameAction(String prefix)
{ return (RPCGameAction) Container
.createRemoteService(RPCGameAction.class, prefix);
} 而创建代理的代码中的获取类加载器的代码为:
ClassLoader loader = Thread.currentThread().getContextClassLoader();

前者会在初始化的时候已经创建好,而后者会根据运行时的ClassLoader而创建,而openfire加载插件的类加载器跟运行的不一致,从而导致创建失败。

解决的方法可以是:RPCGameAction 这个代理随插件启动而创建到内存中;

         把接口所处的jar包放到../openfire/lib 目录下。

 

最新文章

  1. asp.net mvc在windows server 2003上部署
  2. paper 103:ELM算法
  3. 简单的3个SQL视图搞定所有SqlServer数据库字典
  4. MySQL常用SQL/函数汇总(持续更新)
  5. Codeforces Round #369 (Div. 2) C. Coloring Trees(dp)
  6. Qt Creator介绍
  7. 如何正确选择MySQL数据列类型
  8. 自己动手学TCP/IP–http协议(http报文头)
  9. aspnet-webapi-2-contrib
  10. mdadm命令详解及实验过程
  11. Swift JSON字符串和字典以及数组的互转
  12. docs actifio
  13. CUDA Fortran for Scientists and Engineers第二版翻译
  14. python基础(四)集合
  15. Set tooltip on customized tab header in WPF
  16. dedeampz安装wordpress程序,然后新增数据库方法
  17. 我的JdbcUtils类
  18. 【百度】大型网站的HTTPS实践(一)——HTTPS协议和原理
  19. ASP.NET C# 获取当前日期 时间 年 月 日 时 分 秒
  20. VS2010属性表的建立与灵活运用

热门文章

  1. 转:iPhone上关于相机拍照的图片的imageOrientation的问题
  2. 使用 Collections 实现排序 sort方法 对List 实体类实现Comparable类 示例
  3. windows10安装ipython jupyter
  4. NOIP2011 提高组 Day1
  5. stl空间配置器简介
  6. centos6安装elasticsearch6.0
  7. 2016-2017-2 《Java程序设计》第六周学习总结
  8. ECMAScript 6中的var,let,const
  9. [转]QList内存释放
  10. 2016.5.21——Compare Version Numbers