wake-up-neo.net

WELD-001408: Unzufriedene Abhängigkeiten für den Typ Kunde mit Qualifizierern @ Default

Ich bin ein Java EE-Neuling. Ich möchte JSF testen und habe daher ein einfaches Programm erstellt, kann es aber nicht bereitstellen. Ich erhalte folgende Fehlermeldung:

cannot Deploy onlineshop-war
deploy is failing=Error occurred during deployment: Exception while loading the app : CDI deployment failure:WELD-001408: Unsatisfied dependencies for type Customer with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private de.Java2enterprise.onlineshop.RegisterController.customer
at de.Java2enterprise.onlineshop.RegisterController.customer(RegisterController.Java:0)
. Please see server.log for more details.

Mein Code lautet wie folgt: Customer.Java:

package de.Java2enterprise.onlineshop.model;

public class Customer {
    private String email;
    private String password;
}

registerController.Java:

package de.Java2enterprise.onlineshop;

import Java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.inject.Inject;
import de.Java2enterprise.onlineshop.model.*;

@Named
@RequestScoped
public class RegisterController {

    private static final long serialVersionUID = 1L;

    @Inject
    private Customer customer;

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public String persist() {
        return "/index.xhtml";
    }
}

Zum Kompilieren musste ich cdi-api.jar als externe Bibliothek aufnehmen. Jemand hier, der mir helfen konnte? Vielen Dank im Voraus.

29
mike128

Ihre Customer-Klasse muss von CDI als Bean erkannt werden. Dafür haben Sie zwei Möglichkeiten:

  1. Setzen Sie eine Bean-Definitionsanmerkung drauf. Da @Model ein Stereotyp ist, macht es den Trick. Ein Qualifier wie @Named ist keine Bean, die die Anmerkung definiert, weshalb es nicht funktioniert

  2. Ändern Sie den Erkennungsmodus bean in Ihrem Bean-Archiv von der Standardeinstellung "annotated" in "all", indem Sie eine beans.xml-Datei in Ihr jar hinzufügen.

Beachten Sie, dass @Named nur eine Verwendung hat: Machen Sie Ihre Bean für die Benutzeroberfläche sichtbar. Andere Verwendungen beziehen sich auf schlechte Praxis oder Kompatibilität mit älteren Frameworks.

50

es ist auch eine gute Sache, sicherzustellen, dass Sie den richtigen Import haben

Ich hatte ein Problem wie dieses und fand heraus, dass die Bohne verwendet wurde

    javax.faces.view.ViewScoped;

anstatt

    javax.faces.bean.ViewScoped;

Ein einzelnes Wort kann die Welt manchmal ruinieren ... oder in diesem Fall einfach meinen Tag.

1
Sirmyself

Ich hatte das gleiche Problem, aber es hatte nichts mit Anmerkungen zu tun. Das Problem ist beim Indexieren von Beans in meinem Container aufgetreten (Jboss EAP 6.3). Eine meiner Beans konnte nicht indiziert werden, da Java 8-Funktionen verwendet wurden. Ich habe während der Bereitstellung diese kleine hinterlistige Warnung erhalten:

WARN [org.jboss.as.server.deployment] ... Klasse konnte nicht indiziert werden ... Java.lang.IllegalStateException: Unbekanntes Tag! pos = 20 poolCount = 133

Dann bekam ich am Einspritzpunkt den Fehler:

Nicht erfüllte Abhängigkeiten für Typ ... mit Qualifikationsmerkmalen @Default

Die Lösung besteht darin, den Java-Anmerkungsindex zu aktualisieren. Laden Sie die neue Version von Jandex (Jandex-1.2.3.Final oder neuer) herunter und legen Sie sie in ein 

JBOSS_HOME\modules\system\layer\base\org\jboss\jandex\main und aktualisieren Sie anschließend die Referenz auf die neue Datei in module.xml

HINWEIS: In EAP 6.4.x ist dies bereits behoben

0
Mr.Q