[ https://issues.apache.org/jira/browse/OWB-245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gurkan Erdogdu updated OWB-245: ------------------------------- Fix Version/s: (was: M3) 1.0.0 If this will be evaluated as Bug, fixed to version 1.0.0 > Using parameterized type varaibles fails for Producer Method injection > ---------------------------------------------------------------------- > > Key: OWB-245 > URL: https://issues.apache.org/jira/browse/OWB-245 > Project: OpenWebBeans > Issue Type: Bug > Components: Injection and Lookup > Affects Versions: M3 > Environment: Windows, Eclipse running Jetty. > Reporter: Bill Wigger > Assignee: Gurkan Erdogdu > Fix For: 1.0.0 > > > As per section 3.3 of the spec: > "If the producer method return type is a parameterized type, it must specify > an actual type parameter or type variable for each type parameter." > Problem using @Inject > The below code fragment is for a parameterized type variable, and the inject > is yielding an exception, instead of being injected properly. > public class MethodTypeProduces1<T> { > @Produces @Dependent @Named("ProMethodParameterized3") ArrayList<T> > methodPT3() { ... } > } > > Inject it as follows: > public @Inject @Dependent @Named("ProMethodParameterized3") > ArrayList<String> pt3; > the following error occurs: > javax.enterprise.inject.UnsatisfiedResolutionException: Api type > [java.util.ArrayList] is not found with the qualifiers > [...@javax.inject.named(value=ProMethodParameterized3)] > at > org.apache.webbeans.container.ResolutionUtil.checkResolvedBeans(ResolutionUtil.java:93) > at > org.apache.webbeans.container.InjectionResolver.getInjectionPointBean(InjectionResolver.java:232) > Problem when access via the Bean Manager: > Using this as the producer: > @Produces @Dependent @Named("ProMethodParameterized3S") ArrayList<String> > methodPT4() { .. } > I can get a reference to it with the following code: > TypeLiteral<ArrayList<String>> x = new TypeLiteral<ArrayList<String>>() { }; > Bean<ArrayList<String>> iBean = (Bean<ArrayList<String>>) > manager.getBeans("ProMethodParameterized3S").iterator().next(); > ArrayList<String> as = (ArrayList<String>) manager.getReference(iBean, > x.getType() , manager.createCreationalContext(iBean)); > But it this is the producer: > public class MethodTypeProduces1<T> { > > //Test: Parameterized Field > @Produces @Dependent @Named("ProMethodParameterized3") ArrayList<T> > methodPT3() { ... } > then the following fails: > TypeLiteral<ArrayList<String>> x = new TypeLiteral<ArrayList<String>>() { }; > Bean<ArrayList<String>> iBean = (Bean<ArrayList<String>>) > manager.getBeans("ProMethodParameterized3").iterator().next(); > ArrayList<String> as = (ArrayList<String>) manager.getReference(iBean, > x.getType() , manager.createCreationalContext(iBean)); > with an exception when the manager.getReference(....) is called: > java.lang.IllegalArgumentException: Given bean type : > java.util.ArrayList<java.lang.String> is not applicable for the bean instance > : Name:ProMethodParameterized3,WebBeans Type:PRODUCERMETHOD,API > Types:...java.util.ArrayList... -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.