我在Eclipse中创建了一个Bundle,并在"Overview"选项卡中使用了"Launch the Framework"链接.我在我的bundle中创建了一个接口(TestService),以及应该为它生成代理的代码(在Helper中).我在Bundle的Activator中调用此代码,并得到:
Caused by: javassist.NotFoundException: com.test.services.TestService
at javassist.ClassPool.get(ClassPool.java:436)
at com.test.services.Helper.get(Helper.java:46)
Run Code Online (Sandbox Code Playgroud)
它会在第一个ClassPool.get()中抛出:
ClassPool pool = ClassPool.getDefault();
CtClass result = pool.get(TestService.class.getName());
...
Run Code Online (Sandbox Code Playgroud)
TestService是公共的,在同一个包中,而Bundle是Helper,它生成Exception.显然,仅仅执行"ClassPool.getDefault()"并不够好.那么我需要做什么才能使ClassPool看到Bundle中的类?我是否必须导入自己的包裹?
apa*_*day 10
如果"source"是由OSGi bundle类加载器加载的对象,则可以将相应的"classpath"(或类加载器)添加到ClassPool中,如下所示:
pool.insertClassPath(new ClassClassPath(source.getClass()));
Run Code Online (Sandbox Code Playgroud)
或者在你的情况下
pool.insertClassPath(new ClassClassPath(TestService.class));
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
7940 次 |
| 最近记录: |