在OSGi环境下采用以下方式对其它bundle的类进行反序列化时,会出现ClassNotFoundException异常。

ByteArrayInputStream bi = new ByteArrayInputStream(bytes);

ObjectInputStream oi = new ObjectInputStream(bi);

Object obj = oi.readObject();

经检查java.io.ObjectInputStream.resolveClass(ObjectStreamClass desc)发现采用的classloader为最后一次使用的classloader,其源代码如下:

return Class.forName(name, false, latestUserDefinedLoader());

latestUserDefinedLoader为私有方法,因此我们可以通过重写resolveClass方法来实现自定义类加载器,比如可以采用线程上下文类加载器。代码如下:

/**

* osgi环境下的对象反序列化.

* @author lenglinyong@ysstech.com

* @version 1.0, 2016年7月25日

* @since 1.6, 2016年7月25日

*/

public class BundleObjectInputStream extends ObjectInputStream {

@Override

protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {

String name = desc.getName();

try {

return Class.forName(name, false, Thread.currentThread().getContextClassLoader());

} catch (ClassNotFoundException ex) {

throw ex;

}

}

反序列化时代码:

ByteArrayInputStream bi = new ByteArrayInputStream(bytes);

BundleObjectInputStream oi = new BundleObjectInputStream(bi);

Object obj = oi.readObject();

转载于:https://www.cnblogs.com/bingjava/p/5705427.html

OSGi运行环境下java反序列化问题的解决方式相关推荐

  1. Docker环境下Java应用的最大内存和堆内存的设置

    Docker环境下Java应用的最大内存和堆内存的设置 1.  设置应用允许使用的最大内存 通过docker run(创建一个新的容器并运行)命令中设置-m来进行设置.案例如下所示. docker r ...

  2. web自动化如何在不同浏览器运行_如何给树莓派搭建WEB开发运行环境之JAVA篇

    在上一篇,我们已经脱掉了她华丽的外衣,你不用再添加任何华而不实的装饰,一切都交给CLI来搞定.树莓派WEB开发运行环境之JAVA篇,只需5个步骤: 安装JAVA开发包 安装和运行maven 创建JAV ...

  3. win、linux环境下JAVA+GDAL部署,jar包启动,相关描述,问题解决

    文章目录 windows环境下JAVA+GDAL 1.GDAL下载 2.GDAL安装(既解压后拷贝) 3.GDAL测试 4.Jar包方式运行 https://www.jianshu.com/p/6bc ...

  4. 如何给树莓派搭建WEB开发运行环境之JAVA篇

    在上一篇,我们已经脱掉了她华丽的外衣,你不用再添加任何华而不实的装饰,一切都交给CLI来搞定.树莓派WEB开发运行环境之JAVA篇,只需5个步骤: 安装JAVA开发包 安装和运行maven 创建JAV ...

  5. java读取sh脚本_linux环境下java读取sh脚本并执行

    linux环境下java读取sh脚本并执行 作者: CSDN博客 更新时间:2013-09-27 11:49:16 原文链接 Process process; String cmd = "/ ...

  6. 电热耦合_作者特稿︱电网运行环境下基于电热耦合潮流的架空线路应力预估

    导语 架空导线的力学状态(应力.弧垂)是决定其安全运行的关键因素,耐张段水平应力过小将导致耐张段内各线档弧垂增大,严重时会破坏安全净距引发短路故障:反之,应力过大则会导致导线振动频率的增加和疲劳极限的 ...

  7. java最广泛的运行环境_Java运行环境下载|Java SE Runtime Environment(Java运行环境)8.0.131 官方多语言正式版_ - 极光下载站...

    Java SE Runtime Environment(Java运行环境)官方版下载,Java SE Runtime Environment是运行JAVA程序不可缺少的环境,许多程序员都必须安装的运行 ...

  8. Eclipse开发环境下Java可视化界面编程

    Java 目录:https://blog.csdn.net/dkbnull/article/details/87932486 大家都知道在做Android开发设计GUI时,要添加Android组件可以 ...

  9. Mac 环境下连接多个git — ssh方式

    Mac 环境下连接多个git - ssh方式 1.查看当前是否存在ssh ls ~/.ssh/ 看到 id_rsa 与 id_rsa_pub 则说明已经有一对密钥. 2.生产新的公钥,并命名它不于之前 ...

  10. windows10环境下VMware14中Ubuntu16.04解决如何上网问题

    windows10环境下VMware14中Ubuntu16.04解决如何上网问题 参考文章: (1)windows10环境下VMware14中Ubuntu16.04解决如何上网问题 (2)https: ...

最新文章

  1. F - CRB and String HDU - 5414
  2. 五分钟内搭建的混沌电路
  3. 喵哈哈村的魔法考试 Round #5 (Div.2) C
  4. 【Groovy】字符串 ( 字符串拼接 | 多行字符串 )
  5. git cherry-pick命令
  6. boost::units模块单位的文本表示示例
  7. c++STL容器的Set和multiset
  8. [经典推荐]事半功倍系列之javascript
  9. 使用BeetleX的TcpBenchmark工具进行百万设备模拟测试
  10. 解决:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ...
  11. idhttp返回乱码_HTTP客户端POST方式中文编码(乱码)解决方案(转)
  12. 解决jupyter botebook打不开,修改jupyter botebook工作目录失败问题
  13. python小测试1答案_测试1:Python 基本语法(选择题
  14. 小米高层调整;B 站回应腾讯成第一大股东;PHP 7.4.3 发布 | 极客头条
  15. qt 隐藏控制台_带可选GUI的Qt控制台应用程序
  16. 关于pdf转html的个人方法,pdf转html的另类方法
  17. 玉柴spn码故障对照表_玉柴共轨电喷发动机故障码一览表
  18. livereload
  19. css选择文件的图片大小,怎么用css设置图片大小
  20. 微博技术架构分析和设计

热门文章

  1. McAfee ePO4.5 admin账号密码忘记的解决办法
  2. iphone core animation教程
  3. Python笔记(二)——python调用C/C++模块
  4. 简单理解php的socket编程
  5. 2019年第五届计蒜之道复赛总结
  6. 【Excel】多条件查找
  7. iphone微信 h5页音乐自动播放
  8. iphone 开发第五天 - 集合
  9. 【JavaScript】JavaScript闭包
  10. Luogu2543[AHOI2004]奇怪的字符串 (动态规划 LCS)