Uploaded image for project: 'OpenWebBeans'
  1. OpenWebBeans
  2. OWB-893

OpenWebBeans 1.2.1 fails when injecting generic value holder

VotersWatch issueWatchersConvert to sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment Visibility


    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.2.1
    • Fix Version/s: 1.2.1
    • Component/s: Injection and Lookup
    • Labels:


      In OmniFaces we're using a producer method with the following signature:

      public <V> ParamValue<V> produce(InjectionPoint injectionPoint)

      Injection then takes place into a bean as follows:

      @Inject @Param
      private ParamValue<String> text1;

      @Param is a qualifier with only non-binding attributes.

      See RequestParameterProducer and Param

      This works in all versions of Weld that we tested on and in OpenWebBeans 1.1.8 (TomEE 1.5.2.). Unfortunately it does not work with OpenWebBeans 1.2.1-SNAPSHOT (TomEE 1.6.0-SNAPSHOT).

      The problem seems to be that 1.2.1 has added an additional check in org.apache.webbeans.util.GenericsUtil.satisfiesDependency that wasn't there before:

      return ClassUtil.isSame(injectionPointRawType, beanRawType)? isAssignableFrom(injectionPointType, beanType): false;

      The problem is with isAssignableFrom, because the producer is always seen as producing a ParamValue<Object. The actual values at the point of evaluation with the above given injection example where:

      injectionPoint = ParamValue<class java.lang.String> 
      beanType = ParamValue<class java.lang.Object>

      Those are not directly assignable so the injection fails.

      Is OmniFaces doing something wrong here, is this check to strict, or should the producer type not be seen as ParamValue<Object>?




            • Assignee:
              struberg Mark Struberg
              arjan.tijms Arjan Tijms


              • Created:

                Issue deployment