OSGi运行环境下java反序列化问题的解决方式
在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反序列化问题的解决方式相关推荐
- Docker环境下Java应用的最大内存和堆内存的设置
Docker环境下Java应用的最大内存和堆内存的设置 1. 设置应用允许使用的最大内存 通过docker run(创建一个新的容器并运行)命令中设置-m来进行设置.案例如下所示. docker r ...
- web自动化如何在不同浏览器运行_如何给树莓派搭建WEB开发运行环境之JAVA篇
在上一篇,我们已经脱掉了她华丽的外衣,你不用再添加任何华而不实的装饰,一切都交给CLI来搞定.树莓派WEB开发运行环境之JAVA篇,只需5个步骤: 安装JAVA开发包 安装和运行maven 创建JAV ...
- win、linux环境下JAVA+GDAL部署,jar包启动,相关描述,问题解决
文章目录 windows环境下JAVA+GDAL 1.GDAL下载 2.GDAL安装(既解压后拷贝) 3.GDAL测试 4.Jar包方式运行 https://www.jianshu.com/p/6bc ...
- 如何给树莓派搭建WEB开发运行环境之JAVA篇
在上一篇,我们已经脱掉了她华丽的外衣,你不用再添加任何华而不实的装饰,一切都交给CLI来搞定.树莓派WEB开发运行环境之JAVA篇,只需5个步骤: 安装JAVA开发包 安装和运行maven 创建JAV ...
- java读取sh脚本_linux环境下java读取sh脚本并执行
linux环境下java读取sh脚本并执行 作者: CSDN博客 更新时间:2013-09-27 11:49:16 原文链接 Process process; String cmd = "/ ...
- 电热耦合_作者特稿︱电网运行环境下基于电热耦合潮流的架空线路应力预估
导语 架空导线的力学状态(应力.弧垂)是决定其安全运行的关键因素,耐张段水平应力过小将导致耐张段内各线档弧垂增大,严重时会破坏安全净距引发短路故障:反之,应力过大则会导致导线振动频率的增加和疲劳极限的 ...
- java最广泛的运行环境_Java运行环境下载|Java SE Runtime Environment(Java运行环境)8.0.131 官方多语言正式版_ - 极光下载站...
Java SE Runtime Environment(Java运行环境)官方版下载,Java SE Runtime Environment是运行JAVA程序不可缺少的环境,许多程序员都必须安装的运行 ...
- Eclipse开发环境下Java可视化界面编程
Java 目录:https://blog.csdn.net/dkbnull/article/details/87932486 大家都知道在做Android开发设计GUI时,要添加Android组件可以 ...
- Mac 环境下连接多个git — ssh方式
Mac 环境下连接多个git - ssh方式 1.查看当前是否存在ssh ls ~/.ssh/ 看到 id_rsa 与 id_rsa_pub 则说明已经有一对密钥. 2.生产新的公钥,并命名它不于之前 ...
- windows10环境下VMware14中Ubuntu16.04解决如何上网问题
windows10环境下VMware14中Ubuntu16.04解决如何上网问题 参考文章: (1)windows10环境下VMware14中Ubuntu16.04解决如何上网问题 (2)https: ...
最新文章
- F - CRB and String HDU - 5414
- 五分钟内搭建的混沌电路
- 喵哈哈村的魔法考试 Round #5 (Div.2) C
- 【Groovy】字符串 ( 字符串拼接 | 多行字符串 )
- git cherry-pick命令
- boost::units模块单位的文本表示示例
- c++STL容器的Set和multiset
- [经典推荐]事半功倍系列之javascript
- 使用BeetleX的TcpBenchmark工具进行百万设备模拟测试
- 解决:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ...
- idhttp返回乱码_HTTP客户端POST方式中文编码(乱码)解决方案(转)
- 解决jupyter botebook打不开,修改jupyter botebook工作目录失败问题
- python小测试1答案_测试1:Python 基本语法(选择题
- 小米高层调整;B 站回应腾讯成第一大股东;PHP 7.4.3 发布 | 极客头条
- qt 隐藏控制台_带可选GUI的Qt控制台应用程序
- 关于pdf转html的个人方法,pdf转html的另类方法
- 玉柴spn码故障对照表_玉柴共轨电喷发动机故障码一览表
- livereload
- css选择文件的图片大小,怎么用css设置图片大小
- 微博技术架构分析和设计