Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
5.2
Description
Couldn't create property conduits for generic interfaces.
public class TestTapestry {
@Test
public void test()
public static interface Entity<T extends Serializable>
{ T getId(); }public static interface NamedEntity extends Entity<Long>
{ String getName(); }}
This test will throw an exception:
Caused by: java.lang.NullPointerException
at org.apache.tapestry5.ioc.internal.util.GenericsUtils.extractActualType(GenericsUtils.java:143)
at org.apache.tapestry5.ioc.internal.util.GenericsUtils.extractActualTypeAsClass(GenericsUtils.java:174)
at org.apache.tapestry5.ioc.internal.util.GenericsUtils.extractGenericReturnType(GenericsUtils.java:40)
at org.apache.tapestry5.ioc.internal.services.ClassPropertyAdapterImpl.<init>(ClassPropertyAdapterImpl.java:50)
at org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.buildAdapter(PropertyAccessImpl.java:99)
... 33 more
It is thrown because of this lines (GenericsUtils:140-143)
final Class descendantClass = asClass(descendant);
final ParameterizedType parameterizedType = (ParameterizedType) descendantClass.getGenericSuperclass();
extractedType = parameterizedType.getActualTypeArguments()[typeArgumentIndex];
It gets generic superclass, but it is null, there are only interfaces.
So it makes impossible to create property bindings for such beans.