web-dev-qa-db-ja.com

osgiでjersey-clientを使用中にエラーが発生しました-ジェネレーターが提供されていません

JerseyクライアントからWebTargetを作成しようとすると、次の例外が発生します。

私のコード

Client client = ClientBuilder.newClient();
WebTarget baseTarget = client.target("http://127.0.0.1:9000");

例外スタックトレース

Java.lang.IllegalStateException: No generator was provided
and there is no default generator registered
    at    org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.internalCreate(ServiceLocatorFactoryImpl.Java:266)
    at org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.create(ServiceLocatorFactoryImpl.Java:247)
    at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.Java:138)
    at org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.Java:109)
    at org.glassfish.jersey.internal.RuntimeDelegateImpl.<init>(RuntimeDelegateImpl.Java:61)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:526)
    at Java.lang.Class.newInstance(Class.Java:374)
    at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.Java:118)
    at javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.Java:225)
    at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.Java:135)
    at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.Java:120)
    at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.Java:95)
    at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.Java:119)
    at org.glassfish.jersey.client.JerseyWebTarget.<init>(JerseyWebTarget.Java:71)
    at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.Java:185)
    at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.Java:70)

何が問題になる可能性がありますか?

12
jubi

次のアーカイブをJersey-ext-directoryからクラスパスに追加します。

hk2-api-*。jar

hk2-locator-*。jar

hk2-utils-*。jar

javax-inject-*。jar

jersey-guava-*。jar

21
sinclair

Hk2-locatorとjavassistをバンドルとしてOSGiフレームワークに登録します。

ジャージーはhk2-locatorを使用してOSGi上のサービスを検索します。

6
Alexandre Sousa

これと同じ問題があり、Jerseyを使用してFelix Framework(OSGi-5.4)のレベル2でエンドポイントを公開するバンドルを開始することで、最終的に問題を解決できました。理由はわかりませんが、HK2-Locatorの依存関係のようです。

  • hk2-api-2.4.0-b10.jar->レベル1
  • hk2-locator-2.4.0-b10.jar->レベル1
  • hk2-utils-2.4.0-b10.jar->レベル1
  • org.Apache.servicemix.bundles.javax-inject-1_2.jar->レベル1
  • jersey-guava-2.22.1.jar->レベル1

それらを使用するバンドルの前に最初に開始する必要があります。

  • your-bundle-1.0.0.jar->レベル2

バンドルをこの新しいレベルで開始するように設定したら、必ずFelixコンソールでframeworklevel 2を実行して、そのレベルでバンドルを開始してください。フレームワークを再起動すると、機能します。

1
Joe Almore