Как создать / инициализировать Javassist ClassPool внутри OSGi Bundle? - PullRequest
5 голосов
/ 19 сентября 2011

Я создал Bundle в Eclipse и использовал ссылку «Launch the Framework» для вкладки «Overview».Я создал интерфейс (TestService) в своем комплекте и код, который должен сгенерировать прокси для него (в Helper).Я вызываю этот код в Activator of the Bundle и получаю:

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 является общедоступным и втот же пакет и Bundle, что и Helper, который генерирует исключение.Очевидно, что недостаточно просто выполнить «ClassPool.getDefault ()».Итак, что мне нужно сделать, чтобы ClassPool увидел классы внутри Bundle?Должен ли я импортировать свои собственные пакеты?

Ответы [ 2 ]

10 голосов
/ 12 января 2012

Если «source» - это объект, загруженный загрузчиком классов пакета OSGi, вы можете указать соответствующий «classpath» (или загрузчик классов) для ClassPool, например:

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

или в вашем случае просто

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

Надеюсь, это поможет.

2 голосов
/ 20 сентября 2011

Я использую javassist в некоторых пакетах OSGi для изменения / генерации классов Java на лету.Вы можете просто посмотреть здесь .Надеюсь, это поможет вам.

...