Eclipse에서 번들을 만들고 "개요"탭에 "프레임 워크 시작"링크를 사용했습니다. 내 번들에서 인터페이스 (TestService)를 만들고 헬퍼에서 프록시를 생성해야하는 코드를 작성했습니다. 나는 번들의 액티베이터에서이 코드를 호출하고 얻을 :OSGi 번들 내부에서 Javassist ClassPool을 어떻게 만들고 초기화합니까?
이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가 공개와 같은 패키지에, 그리고 Exception을 생성하는 Helper로 번들합니다. 분명히 "ClassPool.getDefault()"를 수행하는 것만으로는 충분하지 않습니다. ClassPool이 번들 내부의 클래스를 볼 수 있도록하려면 어떻게해야합니까? 내 패키지를 가져와야합니까?
javassist 번들 자체가로드를 요청한 클래스의 가시성을 필요로한다고 가정합니다. 불행히도 나는 javassist가 클래스를 찾는 방법을 모른다. 어떤 클래스 로더를 사용할 지 알려줄 수 있습니까? 아니면 그냥 임의로 추측 할 수 있습니까? 실제'Class' 객체로 구성 될 수 있습니까, 아니면 Strings로 제공된 클래스 이름을 고집합니까? –
저는 Javassist로 시작 했으므로 확신 할 수는 없지만 오늘 저녁에 확인하고 대답 해 보겠습니다. 하지만, 이미 그 문제를 지적한 것 같습니다. OSGi는 Bundle에서 볼 수있는 패키지를 제한하므로 Javassist Bundle의 "import package"에 내 패키지를 추가하는 것으로 충분할 수 있습니다. –