[
https://issues.apache.org/jira/browse/OWB-893?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13745503#comment-13745503
]
Arjan Tijms commented on OWB-893:
---------------------------------
Sorry, also forgot to mention that the generic producer method {{public <V>
ParamValue<V> produce(InjectionPoint injectionPoint)}} works in Weld 2.0.0SP1.
The super method {{areActualTypeArgumentsMatching}} in above code fragment is
called then which eventually calls
{{org.jboss.weld.resolution.EventTypeAssignabilityRules.isAssignableFrom(TypeVariable<?>,
Type)}}, where {{beanType}} is "V":
{code}
protected boolean isAssignableFrom(TypeVariable<?> requiredType, Type beanType)
{
return isTypeInsideBounds(beanType, EMPTY_TYPES, requiredType.getBounds());
}
{code}
This will return true.
As Weld 2.0.0SP1 represents the spec final version (passed the TCK, which is
never complete of course), will the behavior still change here following the
spec discussion?
At the moment I'm not 100% sure whether I should change OmniFaces back to the
generic producer (which worked on OWB 1.8.1 and Weld 1.x + 2.x) before I look
into Romain's suggestion.
> OpenWebBeans 1.2.1 fails when injecting generic value holder
> ------------------------------------------------------------
>
> Key: OWB-893
> URL: https://issues.apache.org/jira/browse/OWB-893
> Project: OpenWebBeans
> Issue Type: Bug
> Components: Injection and Lookup
> Affects Versions: 1.2.1
> Reporter: Arjan Tijms
>
> In OmniFaces we're using a producer method with the following signature:
> {code}
> @Produces
> @Param
> public <V> ParamValue<V> produce(InjectionPoint injectionPoint)
> {code}
> Injection then takes place into a bean as follows:
> {code}
> @Inject @Param
> private ParamValue<String> text1;
> {code}
> {{@Param}} is a qualifier with only non-binding attributes.
> See
> [RequestParameterProducer|https://code.google.com/p/omnifaces/source/browse/src/org/omnifaces/cdi/param/RequestParameterProducer.java]
> and
> [Param|https://code.google.com/p/omnifaces/source/browse/src/org/omnifaces/cdi/Param.java]
> 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:
> {code}
> return ClassUtil.isSame(injectionPointRawType, beanRawType)?
> isAssignableFrom(injectionPointType, beanType): false;
> {code}
> 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:
> {noformat}
> injectionPoint = ParamValue<class java.lang.String>
> beanType = ParamValue<class java.lang.Object>
> {noformat}
> 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>}}?
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira