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は、公開と同じパッケージ内にあり、例外を生成するヘルパーとしてバンドルします。明らかに、「ClassPool.getDefault()」を実行するだけでは不十分です。 ClassPoolがバンドル内のクラスを見るためには、どうすればよいですか?自分のパッケージをインポートする必要がありますか?
私は、javassistバンドル自体が読み込みを要求しているクラスの可視性を必要とすると想定します。残念ながら、私はjavassistがクラスをどのように見ているのか分かりません。使用するクラスローダーを教えてもらえますか、それともランダムな推測だけですか?それは実際の 'Class'オブジェクトで設定できますか、それともStringsとして提供されたクラス名を主張していますか? –
私はJavassistで始まったばかりなので、私は確信していませんが、今晩チェックしてお答えします。しかし、私はあなたが既にその問題を指摘していると思う。 OSGiはバンドルが見ることができるパッケージを制限するので、Javassist Bundleの "import package"に私自身のパッケージを追加すれば十分でしょう。 –