如何在OSGi捆绑包内创建/初始化Javassist ClassPool?

问题描述 投票:5回答:2

我在Eclipse中创建了一个Bundle,并将“启动框架”链接用于“概述”选项卡。我已经在捆绑包中创建了一个接口(TestService),并且应该为它生成一个代理的代码(在Helper中)。我在捆绑软件的激活器中调用此代码,并得到:

Caused by: javassist.NotFoundException: com.test.services.TestService
at javassist.ClassPool.get(ClassPool.java:436)
at com.test.services.Helper.get(Helper.java:46)

它直接抛出在第一个ClassPool.get():

ClassPool pool = ClassPool.getDefault();
CtClass result = pool.get(TestService.class.getName());
...

TestService是公共的,并且与生成异常的Helper在同一个程序包和Bundle中。显然,仅执行“ ClassPool.getDefault()”是不够的。那么我该怎么做才能让ClassPool看到Bundle中的类?我必须导入自己的软件包吗?

classpath osgi
2个回答
2
投票

我在某些OSGi捆绑软件中使用javassist来即时修改/生成Java类。您可以只看here。希望对您有帮助。


10
投票

如果“源”是由OSGi捆绑软件类加载器加载的对象,则可以将对应的“类路径”(或类加载器)添加到ClassPool,如下所示:

pool.insertClassPath(new ClassClassPath(source.getClass()));

或仅在您的情况下

pool.insertClassPath(new ClassClassPath(TestService.class));

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.