Hi Mike! Thanks for your great tests, always good to get such feedback!
I guess you get a Instance<Foo> as Provider, right? In that case 5.2.1 defines that we need to take the Alternative into account and filter it away. LieGrue, strub ----- Original Message ----- > From: Mike Olson <[email protected]> > To: [email protected] > Cc: > Sent: Thursday, December 27, 2012 5:18 AM > Subject: OWN 1.7 ignores Alternative when using the provider interface > > > Hello, > > I have a very simple setup where I have classes Foo1 and Foo2 that > implement > the Foo interface > > public interface Foo { > } > @Default > public class Foo1 implements Foo { > > } > @Alternative > public class Foo2 implements Foo { > > } > > Then a class that gets 2 Foos injected > > public class Main { > > @Inject > Foo fooA; > > @Inject > Provider<Foo> fooB; > > @PostConstruct > public void init() { > System.err.println("FooA:" + fooA); > System.err.println("FooB:" + fooB.get()); > } > } > > If my beans.xml file is empty, then I get 2 instances of Foo1 injected into > the > class, as expected. > > However, if I add > > <alternatives> > <class>Foo2</class> > </alternatives> > > to my beans.xml, then I get an error when I run the application. > > """ > INFO: All injection points were validated successfully. > Dec 26, 2012 9:11:29 PM org.apache.webbeans.lifecycle.AbstractLifeCycle > startApplication > INFO: OpenWebBeans Container has started, it took [359] ms. > FooA:Foo2@152c4d9 > Dec 26, 2012 9:11:29 PM > org.apache.webbeans.component.AbstractInjectionTargetBean postConstructDefault > SEVERE: An error occurred while executing [@PostConstruct.] > javax.enterprise.inject.AmbiguousResolutionException: There is more than one > api > type with : Foo with qualifiers : Qualifiers: > [@javax.enterprise.inject.Default()] > found beans: > Foo1, Name:null, WebBeans Type:MANAGED, API > Types:[Foo,Foo1,java.lang.Object], > Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default] > Foo2, Name:null, WebBeans Type:MANAGED, API > Types:[Foo,java.lang.Object,Foo2], > Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default] > at > org.apache.webbeans.util.InjectionExceptionUtils.throwAmbiguousResolutionExceptionForBeans(InjectionExceptionUtils.java:121) > at > org.apache.webbeans.util.InjectionExceptionUtils.throwAmbiguousResolutionException(InjectionExceptionUtils.java:111) > at > org.apache.webbeans.container.ResolutionUtil.checkResolvedBeans(ResolutionUtil.java:80) > at > org.apache.webbeans.inject.instance.InstanceImpl.get(InstanceImpl.java:110) > at Main.init(Main.java:23) > """ > > This exception happens when I call Provider.get(). I assumed that the > Provider > interface would respect the Alternative Qualifiers, but that does not seem to > be > the case. > > Is this a bug in what I am doing, or a bug in OWB? > > Thanks > Mike > > > > > > > > > > -- Mike Olson >
