WELD-001408: Unsatisfied dependencies for type Customer with qualifiers @Default

133,324

Solution 1

Your Customer class has to be discovered by CDI as a bean. For that you have two options:

  1. Put a bean defining annotation on it. As @Model is a stereotype it's why it does the trick. A qualifier like @Named is not a bean defining annotation, reason why it doesn't work

  2. Change the bean discovery mode in your bean archive from the default "annotated" to "all" by adding a beans.xml file in your jar.

Keep in mind that @Named has only one usage : expose your bean to the UI. Other usages are for bad practice or compatibility with legacy framework.

Solution 2

it's also a good thing to make sure you have the right import

I had an issue like that and I found out that the bean was using

    javax.faces.view.ViewScoped;
                 ^

instead of

    javax.faces.bean.ViewScoped;
                 ^

Solution 3

I had the same problem but it had nothing to do with annotations. The problem happened while indexing beans in my container (Jboss EAP 6.3). One of my beans could not be indexed because it used Java 8 features an I got this sneaky little warning while deploying:

WARN [org.jboss.as.server.deployment] ... Could not index class ... java.lang.IllegalStateException: Unknown tag! pos=20 poolCount = 133

Then at the injection point I got the error:

Unsatisfied dependencies for type ... with qualifiers @Default

The solution is to update the Java annotations index. download new version of jandex (jandex-1.2.3.Final or newer) then put it into

JBOSS_HOME\modules\system\layers\base\org\jboss\jandex\main and then update reference to the new file in module.xml

NOTE: EAP 6.4.x already have this fixed

Solution 4

You need to annotate your Customer class with @Named or @Model annotation:

package de.java2enterprise.onlineshop.model;
@Model
public class Customer {
    private String email;
    private String password;
}

or create/modify beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
   bean-discovery-mode="all">
</beans>
Share:
133,324
mike128
Author by

mike128

Updated on August 05, 2021

Comments

  • mike128
    mike128 almost 3 years

    I'm a Java EE-newbie. I want to test JSF and therefore made a simple program but can not deploy it. I get the following error message:

    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.
    

    My code is as follows: 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";
        }
    }
    

    For compiling it I had to include cdi-api.jar as an external library. Anyone here who could help me? Thank you all in advance.