2014-09-09 4 views
9

Ottengo la seguente eccezione quando provo a creare un WebTarget da un client Jersey.Errore durante l'utilizzo di jersey-client in osgi - Nessun generatore è stato fornito

Il mio codice

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

dello stack trace delle eccezioni

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) 

quello che potrebbe essere il problema?

risposta

16

Aggiungere i seguenti archivi dal Jersey-ext-directory al classpath:.

hk2-API - * vaso

hk2-locator - * vaso

hk2-utils- *. .jar

javax-Inject - * vaso

jersey-guava -. *. jar

+0

Ho lo stesso problema e ho tutti questi file jar nel mio classpath ma ottengo comunque l'eccezione. Ho anche notato che è presente il seguente avviso: AVVISO: Impossibile trovare un'implementazione predefinita di HK2 ServiceLocatorGenerator –

+0

Ho riscontrato lo stesso identico problema e si è scoperto che c'era un conflitto di barattoli. Quindi, per metterlo in prospettiva, il mio runtime è OSGI in cui funzionava perfettamente, ma quando stavo cercando di eseguire il client jersey usando la semplice classe java tramite Eclipse, avrebbe generato un'eccezione. La soluzione ha funzionato per me è stato rimosso tutte le dipendenze del percorso di classe che sono state utilizzate da OSGI e ho aggiunto le librerie citate in questa risposta. Inoltre ho dovuto aggiungere le librerie Jersey Client e Jersey Common. Spero che aiuti. Vorrei che la distribuzione della maglia fosse sufficiente a raggrupparli in modo che gli sviluppatori non dovessero cercare. –

+0

Ho dimenticato hk2-locator- *.jar che ha causato l'errore di cui sopra. Quando aggiunto il mio problema risolto. – Yergalem

6

Registrati hk2-locator e javassist come pacchetti sul tuo framework OSGi.

Jersey utilizza hk2-locator per trovare servizi su OSGi.

1

Ho avuto lo stesso problema e ho potuto finalmente risolverlo avviando il mio pacchetto che utilizza Jersey per pubblicare un endpoint al livello 2 in Felix Framework (OSGi-5.4). Io non so perché, ma sembra che le dipendenze HK2-Locator:

  • hk2-api-2.4.0-b10.jar -> Livello 1
  • hk2-localizzatore-2.4.0-b10.jar -> Livello 1
  • HK2-utils-2.4.0-b10.jar -> Livello 1
  • org.apache.servicemix.bundles.javax-Inject-1_2.jar -> Livello 1
  • jersey-guava -2.22.1.jar -> Livello 1

necessario iniziare prima del pacchetto -> Livello 2

Una volta impostato il vostro pacco per iniziare questo nuovo livello quindi assicurarsi di eseguire frameworklevel 2 in consolle Felix a

  • your-fascio-1.0.0.jar: chi li usa avvia i pacchi sotto quel livello. Riavvia il framework e funzionerà.

+0

Questo ha risolto il problema per me in Felix. –

Problemi correlati