Msgpack怎么动态注册外部的class?

lwf1990lwf 2017-06-28 05:03:34

public static void ReloadClasses() throws Exception {
loader = new MyClassLoader(getSystemClassLoader());
loader.findFilesByEndStr(loader.BasePath +"ExternalClasses"+loader.SP);
Utils.InitMessagePack();
Utils.initKryo();
for(int i=0;i<loader.ClassFileList.size();i++)
{
String javaname = loader.ClassFileList.get(i);
loader.loadClass(javaname); //load from file first

if(javaname.contains("MessageEntity"))
loader.RegisiterMsgs(javaname);
}
}
public void RegisiterMsgs(String name)
{
Class<?> klass = findLoadedClass(name);

Utils.kryo.register(klass);
Utils.myPacker.register(klass);
}
@Override
public Class loadClass(String ClassName) throws ClassNotFoundException {
// TODO Auto-generated method stub
Class c = null;
if(ClassFileList.contains(ClassName))
{
c = findLoadedClass(ClassName);
if(c == null)
{
byte []data;
try {
data = GetClassByte(ClassName);//找到外部class文件
c = defineClass(ClassName, data, 0, data.length);
} catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
return c;
}
}
else
{
return super.loadClass(ClassName);
}
return c;
}

如上关键代码。用自定义的ClassLoader加载的类Msgpack不能注册,报错找不到那个类。但kryo都可以注册进去,可以kryo跨语言很麻烦,不然完全可以代替Msgpack。
...全文
197 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwf1990lwf 2017-06-29
  • 打赏
  • 举报
回复
引用 1 楼 qq_38755045 的回复:
弄了很久都无法解决

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧