使用Eclipse Transforms将类替换为另一个类:无法修复ClassFormatError

时间:2016-02-19 19:30:17

标签: java osgi eclipse-rcp classloader equinox

我使用Equinox Transforms将一个类替换为类路径上的自定义版本。转换机制似乎工作正常,我从变换器类的InputStream返回自定义类的public InputStream getInputStream(InputStream inputStream, URL transformerUrl)

但是加载该类后会产生ClassFormatError消息Truncated class file。我唯一可以想象的是Java版本之间的不匹配,但是我已经完成了我知道怎么做以消除它作为问题根源的一切,但无济于事。

我在Installed JREs首选项中从Eclipse中删除了除Eclipse之外的所有JDK。我确保所涉及的所有插件的执行环境都具有相同的Java版本,并且构建路径上的JRE使用相同的执行环境指定。目标和产品执行环境的定义也相同。我在工作区中做了一个clean all,并用-clean多次重新启动了eclipse和我的运行时工作台。毕竟,我仍然得到错误。

如果没有Java版本导致此错误,还有什么其他内容? Equinox Transforms页面表示它可用于转换类资源。有没有人真的这样做过?

1 个答案:

答案 0 :(得分:2)

有一种更标准化的方法可以通过WeavingHook替换osgi中的类。此挂钩应该注册为服务,并且可以动态增强类。

请参阅the WeavingHook JavadocAries Proxy的具体示例,它在asm(WovenProxyGenerator)的帮助下动态创建代理。