Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在osgi中使用jersey客户端时出错-未提供生成器_Java_Jersey Client - Fatal编程技术网

Java 在osgi中使用jersey客户端时出错-未提供生成器

Java 在osgi中使用jersey客户端时出错-未提供生成器,java,jersey-client,Java,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 reg

当我尝试从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)
java.lang.IllegalStateException:未提供生成器
并且没有注册默认的生成器
位于org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.internalCreate(ServiceLocatorFactoryImpl.java:266)
位于org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.create(ServiceLocatorFactoryImpl.java:247)
位于org.glassfish.jersey.internal.injection.Injections.\u createLocator(Injections.java:138)
位于org.glassfish.jersey.internal.injection.Injections.createLocator(Injections.java:109)
位于org.glassfish.jersey.internal.RuntimeDelegateImpl.(RuntimeDelegateImpl.java:61)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:526)
位于java.lang.Class.newInstance(Class.java:374)
位于javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:118)
位于javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:225)
位于javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:135)
位于javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120)
位于javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:95)
位于javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
位于org.glassfish.jersey.client.JerseyWebTarget.(JerseyWebTarget.java:71)
位于org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:185)
位于org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:70)

可能是什么问题?

将以下存档从Jersey ext目录添加到类路径:

hk2 api-*.jar

hk2定位器-*.jar

hk2 utils-*.jar

javax注入-*.jar


jersey guava-*.jar

将hk2定位器和javassist注册为OSGi框架上的捆绑包


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

我也遇到了同样的问题,我最终可以通过启动我的捆绑包来解决这个问题,该捆绑包使用Jersey在Felix框架(OSGi-5.4)的2级发布端点。我不知道为什么,但似乎HK2定位器依赖:

  • 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
  • 泽西-番石榴-2.22.1.jar->1级
需要在使用它们的捆绑包之前首先启动:

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

一旦将捆绑包设置为在此新级别上启动,请确保在Felix console中执行
frameworklevel 2
,以在该级别下启动捆绑包。重新启动框架,它就会工作。

我在Weblogic中遇到了这个问题。可以在jar文件中找到默认实现:hk2-locator.jar:org.jvnet.hk2.external.generator.ServiceLocatorGeneratorImpl

问题是这个jar文件以如下方式包含包:org.jvnet。。。而不是这个:org.glassfish

对于Weblogic,我在Weblogic.xml中有下一个配置:

<wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>javax.ws.rs.*</wls:package-name>
        <wls:package-name>org.glassfish.jersey.*</wls:package-name>
        <wls:package-name>org.glassfish.hk2.*</wls:package-name>
    </wls:prefer-application-packages>
</wls:container-descriptor>

javax.ws.rs*
org.glassfish.jersey*
org.glassfish.hk2*
因此,我必须添加一个新条目:

<wls:package-name>org.jvnet.*</wls:package-name>
org.jvnet*

我也有同样的问题,所有这些jar文件都在我的类路径中,但仍然出现异常。我还注意到有以下警告:警告:找不到HK2 ServiceLocator的默认实现。我遇到了完全相同的问题,结果是JAR冲突。所以,从透视图来看,我的运行时是OSGI,它运行得很好,但当我试图通过Eclipse使用普通java类执行jersey客户端时,它会抛出异常。我的解决方案是删除OSGI使用的所有类路径依赖项,并添加本回复中提到的库。此外,我还必须添加Jersey客户端和Jersey公共库。我希望这有帮助。我希望jersey发行版能将它们捆绑起来,这样开发者就不必搜索了。我忘记了hk2定位器-*.jar,这导致了上述错误。添加时,我的问题已解决。@sinclair您所说的hk2 api-*.jar是什么意思?您是否所有jar都以hk2 api开头?@Deven hk2 api-.jar例如hk2-api-2.5.0.jar这为我解决了Felix中的问题。出现此问题的另一个原因(在我的案例中)是当有人试图在着色时重新定位org.glassfish包时,正如这里引用的“类org.glassfish.hk2.extension.ServiceLocatorGenerator被重新定位到shade1.org.glassfish.hk2.extension.ServiceLocatorGenerator,但META-INF/services/org.glassfish.hk2.extension.ServiceLocatorGenerator文件没有,因此无法查找实现。”