我在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中的类?我必须导入自己的软件包吗?
我在某些OSGi捆绑软件中使用javassist来即时修改/生成Java类。您可以只看here。希望对您有帮助。
如果“源”是由OSGi捆绑软件类加载器加载的对象,则可以将对应的“类路径”(或类加载器)添加到ClassPool,如下所示:
pool.insertClassPath(new ClassClassPath(source.getClass()));
或仅在您的情况下
pool.insertClassPath(new ClassClassPath(TestService.class));
希望有帮助。