java 在 osgi 中使用 jersey-client 时出错 - 未提供生成器

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25740556/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 08:35:39  来源:igfitidea点击:

Error while using jersey-client in osgi - No generator was provided

javajersey-client

提问by jubi

I get the following exception when I try to create a WebTarget from a Jersey client.

当我尝试从 Jersey 客户端创建 WebTarget 时,出现以下异常。

My code

我的代码

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

Exception stack trace

异常堆栈跟踪

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)

What could be the issue ?

可能是什么问题 ?

回答by sinclair

Add the following archives from the Jersey-ext-directory to your classpath:

将 Jersey-ext-目录中的以下档案添加到您的类路径中:

hk2-api-*.jar

hk2-api-*.jar

hk2-locator-*.jar

hk2-locator-*.jar

hk2-utils-*.jar

hk2-utils-*.jar

javax-inject-*.jar

javax-inject-*.jar

jersey-guava-*.jar

球衣番石榴-*.jar

回答by Alexandre Sousa

Register hk2-locator and javassist as bundles on your OSGi framework.

将 hk2-locator 和 javassist 注册为 OSGi 框架上的包。

Jersey uses hk2-locator to find services on OSGi.

Jersey 使用 hk2-locator 在 OSGi 上查找服务。

回答by Joe Almore

I had this same issue and I could finally solve it by starting my bundle which uses Jersey to publish an endpoint at level 2 in the Felix Framework (OSGi-5.4). I am not sure why, but seems like the HK2-Locator dependencies:

我遇到了同样的问题,我终于可以通过启动我的包来解决它,该包使用 Jersey 在 Felix 框架 (OSGi-5.4) 的第 2 级发布端点。我不知道为什么,但似乎是 HK2-Locator 依赖项:

  • hk2-api-2.4.0-b10.jar -> Level 1
  • hk2-locator-2.4.0-b10.jar -> Level 1
  • hk2-utils-2.4.0-b10.jar -> Level 1
  • org.apache.servicemix.bundles.javax-inject-1_2.jar -> Level 1
  • jersey-guava-2.22.1.jar -> Level 1
  • 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

need to start first before the bundle who uses them:

需要在使用它们的捆绑包之前首先启动:

  • your-bundle-1.0.0.jar -> Level 2
  • your-bundle-1.0.0.jar -> 级别 2

Once you set your bundle to start on this new level then make sure to execute frameworklevel 2in Felix console to start the bundles under that level. Restart the framework and it will work.

一旦您将捆绑包设置为在此新级别上启动,请确保frameworklevel 2在 Felix 控制台中执行以启动该级别下的捆绑包。重新启动框架,它将起作用。