2014-09-09 1 views
9

Jersey 클라이언트에서 WebTarget을 만들려고 할 때 다음과 같은 예외가 발생합니다.osgi에서 jersey-client를 사용하는 중 오류 - 생성기가 제공되지 않았습니다.

내 코드

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) 

은 어떤 문제가 될 수 있을까?

답변

16

클래스 패스에 저지-EXT-디렉토리에서 다음 아카이브를 추가합니다.

hk2-API - * 항아리

hk2-로케이터 - * 항아리

hk2을-utils- *. .JAR

javax의-주사한다 - * 항아리

저지 - 구아바 -.. * 항아리

+0

나는 같은 문제가 있고 내 클래스 경로에 이러한 모든 jar 파일이 있지만 여전히 예외가 발생합니다. 또한 다음과 같은 경고가 있음을 알았습니다. 경고 : HK2 ServiceLocatorGenerator의 기본 구현을 찾을 수 없습니다. –

+0

정확히 동일한 문제가 발생하여 jar 충돌이 발생했습니다. 그래서 그냥 관점에 넣으려면 내 런타임 OSGI 어디 잘 실행 중이지만 저지 클라이언트를 사용하여 일반 자바 클래스를 사용하여 Eclipse를 실행하려고 할 때 예외가 throw됩니다. 이 솔루션은 OSGI에서 사용 된 모든 클래스 경로 종속성을 제거하고이 응답에 언급 된 라이브러리를 추가 한 것이 었습니다. 또한 Jersey Client 라이브러리와 Jersey Common 라이브러리를 추가해야했습니다. 이게 도움이 되길 바란다. 개발자들이 검색 할 필요가 없도록 저지 배포를 통해 이들을 묶어두기를 바랍니다. –

+0

hk2-locator- *를 깜빡했습니다.위의 오류가 발생했습니다. 내 문제가 추가되면 해결됩니다. – Yergalem

6

OSGi 프레임 워크에 번들로 hk2-locator 및 javassist를 등록하십시오.

Jersey는 hk2-locator를 사용하여 OSGi에서 서비스를 찾습니다.

1

필자는이 같은 문제가 있었고 Jersey를 사용하여 Felix Framework (OSGi-5.4)의 2 단계에서 끝점을 게시하는 내 번들을 시작하여 마침내 해결할 수있었습니다. 나는 왜 확실하지 않다, 그러나 HK2-로케이터 종속성처럼 보인다 :

  • hk2-API-2.4.0-b10.jar -> 레벨 1
  • hk2 로케이터-2.4.0-b10.jar -> 레벨 1
  • hk2-utils를-2.4.0-b10.jar -> 레벨 1
  • org.apache.servicemix.bundles.javax-주사한다-1_2.jar -> 레벨 1
  • 저지 - 구아바 -2.21.1.jar -> 수준 1

번들보다 먼저 시작해야합니다. -이 새로운 수준에 시작하는 번들을 설정하면 다음에 펠릭스 콘솔에서 frameworklevel 2을 실행해야합니다> 레벨 2

  • 당신의-번들-1.0.0.jar : 누가 그들을 사용 해당 레벨에서 번들을 시작하십시오. 프레임 워크를 다시 시작하면 작동합니다.

+0

이것은 Felix에서 저를위한 문제점을 해결했습니다. –