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
Error while using jersey-client in osgi - No generator was provided
提问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 控制台中执行以启动该级别下的捆绑包。重新启动框架,它将起作用。

