Generic Type Inheritance not resolved correctly -----------------------------------------------
Key: OWB-431 URL: https://issues.apache.org/jira/browse/OWB-431 Project: OpenWebBeans Issue Type: Bug Components: Injection and Lookup Affects Versions: 1.0.0-alpha-1 Environment: standard OWB configuration Reporter: Bill Wigger Assignee: Gurkan Erdogdu Priority: Minor Fix For: 1.0.0-alpha-2 WebBean is defined as: @Named public class MethodTypeProduces1<T extends Bc> { @Produces @Dependent @Named("ProMethodParameterized3") ArrayList<T> methodPT3() { and injected as: @Named @Dependent public class ProMethodTestGroup3A { public @Inject @Dependent @Named("ProMethodParameterized3") ArrayList<Dc> pt3; with BC extending DC as follows: public class Bc extends Dc implements Fi { gives this error: Jul 28, 2010 9:26:51 AM org.apache.webbeans.config.BeansDeployer deploy SEVERE: Throwable occurred: javax.enterprise.inject.UnsatisfiedResolutionException: Api type [java.util.ArrayList] is not found with the qualifiers [...@javax.inject.named(value=ProMethodParameterized3)] for injection into Field Injection Point, field name : pt3, Bean Owner : [Name:proMethodTestGroup3A,WebBeans Type:MANAGED,API Types:[com.ibm.jcdi.test.ProMethodTestGroup3A,java.lang.Object],Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default,javax.inject.Named]] at org.apache.webbeans.container.ResolutionUtil.checkResolvedBeans(ResolutionUtil.java:121) at org.apache.webbeans.container.InjectionResolver.checkInjectionPoints(InjectionResolver.java:185) at org.apache.webbeans.container.BeanManagerImpl.validate(BeanManagerImpl.java:1025) injection should be checked/resolved here in org.apache.webbeans.util.ClassUtil, but this method returns false public static boolean checkRequiredTypeIsClassAndBeanTypeIsVariable(Type beanTypeArg, Type requiredTypeArg) { Class<?> clazzRequiredType = (Class<?>)requiredTypeArg; TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg; Type tvBound = tvBeanTypeArg.getBounds()[0]; if(tvBound instanceof Class) { Class<?> clazzTvBound = (Class<?>)tvBound; if(clazzTvBound != Object.class) { if(!clazzTvBound.isAssignableFrom(clazzRequiredType)) { return false; } } } return true; } But since clazzTvBound is Bc and classRequiredType is Dc Bc.isAssignableFrom(Dc) returns false, so the ! is true, and the function returns false. fix seems to simply go back to the old code in this routine, this code was changeed on 4/28, and I can't see why is was changed. But the check needs to verify that the required class can be assigned from the given bean class, as follows: if(tvBound instanceof Class) { Class<?> clazzTvBound = (Class<?>)tvBound; if(clazzRequiredType.isAssignableFrom(clazzTvBound)) { return true; } } return false; -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.