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: M3


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.

Reply via email to