Utworzono pakiet w środowisku Eclipse i skorzystałem z linku "Uruchom program" w zakładce "Przegląd". W moim pakiecie utworzyłem interfejs (TestService) i kod, który powinien wygenerować dla niego proxy (w Helper). Ja nazywam to kod w Activator wiązki, a otrzymasz:Jak utworzyć/zainicjować Javassist ClassPool w pakiecie OSGi?
Caused by: javassist.NotFoundException: com.test.services.TestService
at javassist.ClassPool.get(ClassPool.java:436)
at com.test.services.Helper.get(Helper.java:46)
To rzuca w prawo na pierwszym ClassPool.get():
ClassPool pool = ClassPool.getDefault();
CtClass result = pool.get(TestService.class.getName());
...
TestService jest publiczny i w tym samym opakowaniu, a Pakiet, jako pomocnik, który generuje wyjątek. Oczywiście, nie wystarczy po prostu "ClassPool.getDefault()". Co więc muszę zrobić, aby ClassPool widział klasy w pakiecie? Czy muszę importować własne pakiety?
Zakładam, że sam pakiet javassist będzie wymagał widoczności klas, o które prosisz go załadować. Niestety nie wiem, jak javassist sprawdza klasy. Czy możesz powiedzieć, który program ładujący klasy powinien użyć, lub czy po prostu zgaduje? Czy można go skonfigurować za pomocą rzeczywistych obiektów "Class", czy też nalega na nazwy klas dostarczane jako ciągi znaków? –
Po prostu zaczynam od Javassist, więc nie jestem pewien, ale sprawdzę ten wieczór i odpowiem. Ale podejrzewam, że wskazałeś już na ten problem; OSGi ogranicza pakiety, które widzi Pakiet, więc może wystarczyć dodanie własnego pakietu w "pakiecie importu" Pakietu Javassist. –