You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2015/04/11 12:15:36 UTC
svn commit: r1672855 -
/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java
Author: kwin
Date: Sat Apr 11 10:15:36 2015
New Revision: 1672855
URL: http://svn.apache.org/r1672855
Log:
SLING-4608 workaround for bug with type extraction on array types in Java < 7
Modified:
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java?rev=1672855&r1=1672854&r2=1672855&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java Sat Apr 11 10:15:36 2015
@@ -18,6 +18,8 @@
*/
package org.apache.sling.validation.impl.util;
+import java.lang.reflect.Array;
+import java.lang.reflect.GenericArrayType;
import java.lang.reflect.TypeVariable;
import java.util.Map;
import java.util.Map.Entry;
@@ -42,10 +44,15 @@ public class ValidatorTypeUtil {
if (entry.getKey().getGenericDeclaration() instanceof Class<?>) {
Class clazz = (Class)entry.getKey().getGenericDeclaration();
if (clazz.equals(Validator.class)) {
+ // Java6 doesn't return the class for array types due to this bug: http://bugs.java.com/view_bug.do?bug_id=5041784
+ if (type instanceof GenericArrayType) {
+ // as a workaround make a new array class out of the generic component type encapsulated in the generic array type
+ type = Array.newInstance((Class<?>) ((GenericArrayType)type).getGenericComponentType(), 0).getClass();
+ }
if (type instanceof Class<?>) {
return (Class)type;
}
- // type may also be a parmeterized type (e.g. for Collection<String>), this is not allowed!
+ // type may also be a parameterized type (e.g. for Collection<String>), this is not allowed!
else {
throw new IllegalArgumentException("Validators may not use parameterized types as type parameter. Only simple class types and arrays of class types are allowed.");
}