Uploaded image for project: 'Weld'
  1. Weld
  2. WELD-964

Unsatisfied dependency exception should differentiate between "class is not in classpath", "class is in classpath but not managed bean" and "class is in classpath and managed but not like that"

XMLWordPrintable

    • Icon: Feature Request Feature Request
    • Resolution: Done
    • Icon: Major Major
    • 2.1.0.Alpha1
    • None
    • None
    • None

      Having an "unsatisfied dependency" (at injection point x1 of class X while injecting an instance of interface Y) can have several causes:

      • The jar (of class YImpl) is not in the classpath
      • The jar (of class YImpl) is in the classpath, but the beans.xml does not exist or is not being picked up (for whatever reason, such as problems with WEB-INF/beans.xml on some containers)
      • The jar (of class YImpl) is in the classpath, the beans.xml is picked up but the qualifiers etc don't match.

      So, instead of just saying "unsatisfied dependency ...": it should say something like this:

      • Unsatisfied dependency ... and there is no concrete implementing class of interface (org.app.Y) in the classpath.
      • Unsatisfied dependency ... and the concrete implementing class(es) (org.app.YImpl1, org.app.YImpl2) are not loaded as managed beans through a beans.xml.
      • Unsatisfied dependency ... and none of the managed beans of the same type (org.app.YImpl1, org.app.YImpl2) match.

      Note: spring's exceptions differentiate between these cases (they explicitly define their appContext.xml set, so case 2 is impossible and case 1 throws a "app context file not found" exception.

              marko.luksa@gmail.com Marko Luksa (Inactive)
              gdesmet@redhat.com Geoffrey De Smet (Inactive)
              Votes:
              4 Vote for this issue
              Watchers:
              7 Start watching this issue

                Created:
                Updated:
                Resolved: