[
https://issues.apache.org/jira/browse/OWB-893?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13743243#comment-13743243
]
Arjan Tijms commented on OWB-893:
---------------------------------
Thanks for the very quick reply Romain!
{quote}
Arne worked on it with CDI expert group and trunk should be aligned on CDI spec.
{quote}
In other words, OmniFaces is doing it wrong and it should not have a generic
producer method?
{quote}
You can easily workaround it using a custom extension and registering these
objects as beans (see deltaspike which can help too with its BeanBuilder)
{quote}
I'm not exactly sure how that would work, but I think I just found another
workaround by making the producer method use raw types. Typically I consider
raw types something to be avoided, but they seem to do the trick here:
{code}
@Produces
@Param
public ParamValue produce(InjectionPoint injectionPoint)
{code}
The following spec issue inspired this solution:
https://issues.jboss.org/browse/CDI-304
If you're absolutely sure that OWB is doing the right thing here and generic
producer methods are simply not legal, then you can close this issue ;)
_(p.s. for some reason text formatting doesn't work in the description of an
issue here, but it does work in comments)_
> 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