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 2
in Felix console to start the bundles under that level. Restart the framework and it will work.
一旦您将捆绑包设置为在此新级别上启动,请确保frameworklevel 2
在 Felix 控制台中执行以启动该级别下的捆绑包。重新启动框架,它将起作用。