[
https://issues.apache.org/jira/browse/OWB-893?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13744138#comment-13744138
]
Arjan Tijms commented on OWB-893:
---------------------------------
{quote}ParameterizedType which could match your need.{quote}
Cool, thanks a lot for the pointer Romain! I'm sure going to study that
thoroughly!
{quote}The result of the discussion was, that the spec is broken. So either we
implement it spec conform or we implement it the way that it works for
you{quote}
Hmmm... tricky indeed. As I mentioned, by letting the producer return a raw
type I got it working for me, but others might stumble upon the same issue.
Especially since it did work on older TomEE releases and on the current JBoss
etc ones. Since I'm still a CDI novice I can't say for sure how common a
generic producer method really is in practice.
> 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