org.glassfish.hk2.api.UnsatisfiedDependencyException: Es war kein Objekt zur Verfügung für die Injektion am Injectee
Ich bin neu nach Jersey 2. Bisher arbeitete ich mit Jersey 1.x und im Frühling nutzen möchte HK2 Umsetzung.
Nach dem Lesen der tutorial schrieb ich Folgendes:
@ManagedBean
@Path("products")
@Produces({ MediaType.APPLICATION_JSON })
public class ProductResource {
@Inject
ProductManager productManager;
@GET
public GenericResponseData<List<Product>> getProducts(@QueryParam("condition") Condition condition, @QueryParam("keywords") String keywords) {
GenericResponseData<List<Product>> res = new GenericResponseData<List<Product>>();
res.setObject(productManager.getProducts(condition, keywords));
return res;
}
}
@Contract
public interface ProductManager {
public List<Product> getProducts(Condition condition, String keywords);
}
@Service
public class MyProductManager implements ProductManager {
@Override
public List<Product> getProducts(Condition condition, String keywords) {
return null;
}
}
Jedoch bekomme ich die folgende exception:
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee
Was ist falsch?
InformationsquelleAutor Dejell | 2014-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich war Herumspielen mit JAXRS und @Inject-ing EJB und bekam dieselbe Fehlermeldung. Mit @EJB-es hat gut funktioniert.
War die Lösung zum hinzufügen von CDI-Konfiguration-Datei, und ändern bean-discovery-mode="kommentiert" bean-discovery-mode="all"
Danach konnte ich durch die Verwendung von @Inject mit meinem EJB.
Dies könnte helfen, Sie auch.
Funktioniert bei mir mit gleichen erreor als poster und das ist, was die Spezifikation sagt. Nur vergessen, es in meinem beans.xml.
Ist es möglich die @Inject ohne beans.xml Datei? Ich würde gerne schreiben, die Anwendung mit streng Java Konfiguration wie ich mit meinen Spring-Anwendungen.
Gerade gefunden die Sie verwenden können, @RequestScoped annotation, z.B.
InformationsquelleAutor Boris
Ich gehe davon aus, dass die @Service-annotation oben ist das hk2 @ - Service, in dem Fall sollten Sie wissen, dass @Service funktioniert nicht automatisch in Jersey. Stattdessen müssten Sie hinzufügen, um eine Bindung, die tun würde wie ein bind(MyProductManager).(ProductManager) in einigen Jersey-binder
Jersey hat die Wahl explizite Bindungen über die automatischen Bindungen. Dies ist eine vollkommen gültige Wahl, als es bietet mehr Kontrolle an den Benutzer, bedeutet aber, dass einige automatische Funktionen der hk2 (also @Service) wird nicht funktionieren
gibt es einen Weg, um es zu halten? da gibt es viele aufgenommen, um zu spielen aronund mit dem code?
Wenn Sie verwendet haben, die hk2-Einwohner-generator zum erstellen der Einwohner-Dateien zu erstellen (basierend auf die @Service-annotation), dann verwenden Sie code wie diesen, um es automatisch zu Lesen in:
DynamicConfigurationService dcs =locator.getService(DynamicConfigurationService.class); Populator populator = dcs.getPopulator(); populator.populate(new ClasspathDescriptorFileFinder(getClass().getClassLoader());
Wenn Sie verwendet haben, die hk2-Einwohner-generator zum erstellen der Einwohner-Dateien zur build-Zeit = was bedeutet es?
InformationsquelleAutor jwells131313
Überprüfen Sie das Paket von der
@Contract
in IhremProductManager
- Schnittstelle. Beide Jersey (@Vertrag) und HK2 (@Vertrag) Anmerkung mit diesem Namen.Stellen Sie sicher, nehmen Sie auch einen Blick auf Jersey User Guide:
InformationsquelleAutor Michal Gajdos