skip proxy classes when computing descriptors
Project: http://git-wip-us.apache.org/repos/asf/bval/repo Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/142776cb Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/142776cb Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/142776cb Branch: refs/heads/bv2 Commit: 142776cbe8b19d0bcba0d2d5ddd9a8669741ef54 Parents: 97778e4 Author: Matt Benson <[email protected]> Authored: Wed Feb 28 11:29:33 2018 -0600 Committer: Matt Benson <[email protected]> Committed: Wed Feb 28 11:29:33 2018 -0600 ---------------------------------------------------------------------- .../main/java/org/apache/bval/jsr/job/ValidationJob.java | 5 +++-- .../org/apache/bval/jsr/metadata/HierarchyBuilder.java | 11 ++++++++--- .../src/main/java/org/apache/bval/jsr/util/Proxies.java | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/bval/blob/142776cb/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java ---------------------------------------------------------------------- diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java index c97cbfd..dbcdc1c 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java @@ -64,6 +64,7 @@ import org.apache.bval.jsr.groups.Group; import org.apache.bval.jsr.groups.Groups; import org.apache.bval.jsr.util.NodeImpl; import org.apache.bval.jsr.util.PathImpl; +import org.apache.bval.jsr.util.Proxies; import org.apache.bval.util.Exceptions; import org.apache.bval.util.Lazy; import org.apache.bval.util.ObjectUtils; @@ -402,8 +403,8 @@ public abstract class ValidationJob<T> { } private BeanD getBeanDescriptor(Object bean) { - return (BeanD) validatorContext.getFactory().getDescriptorManager() - .getBeanDescriptor(Validate.notNull(bean, "bean").getClass()); + final Class<? extends Object> t = Proxies.classFor(Validate.notNull(bean, "bean").getClass()); + return (BeanD) validatorContext.getDescriptorManager().getBeanDescriptor(t); } final ConstraintViolationImpl<T> createViolation(String messageTemplate, ConstraintValidatorContextImpl<T> context, http://git-wip-us.apache.org/repos/asf/bval/blob/142776cb/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/HierarchyBuilder.java ---------------------------------------------------------------------- diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/HierarchyBuilder.java b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/HierarchyBuilder.java index d185290..975a9f4 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/HierarchyBuilder.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/HierarchyBuilder.java @@ -45,6 +45,7 @@ import javax.validation.metadata.Scope; import org.apache.bval.jsr.ApacheValidatorFactory; import org.apache.bval.jsr.groups.GroupConversion; import org.apache.bval.jsr.util.Methods; +import org.apache.bval.jsr.util.Proxies; import org.apache.bval.util.Exceptions; import org.apache.bval.util.Validate; import org.apache.bval.util.reflection.Reflection; @@ -282,9 +283,9 @@ public class HierarchyBuilder extends CompositeBuilder { final Iterator<Class<?>> hierarchy = Reflection.hierarchy(beanClass, Interfaces.INCLUDE).iterator(); hierarchy.next(); - // skip core JDK; skip null/empty hierarchy builders, mapping others to BeanDelegate - hierarchy.forEachRemaining(t -> Optional.of(t).filter(clazz -> !clazz.getName().startsWith("java.")) - .map(getBeanBuilder).filter(b -> !b.isEmpty()).map(b -> new BeanDelegate(b, t)).ifPresent(delegates::add)); + // filter; map; skip null/empty hierarchy builders, mapping others to BeanDelegate + hierarchy.forEachRemaining(t -> Optional.of(t).filter(this::canValidate).map(getBeanBuilder) + .filter(b -> !b.isEmpty()).map(b -> new BeanDelegate(b, t)).ifPresent(delegates::add)); // if we have nothing but empty builders (which should only happen for // absent custom metadata), return empty: @@ -350,4 +351,8 @@ public class HierarchyBuilder extends CompositeBuilder { .collect(Collectors.toList()); return new HierarchyBuilder.ForCrossParameter<>(hierarchyDelegates); } + + private boolean canValidate(Class<?> t) { + return !(t.getName().startsWith("java.") || Proxies.isProxyClass(t)); + } } http://git-wip-us.apache.org/repos/asf/bval/blob/142776cb/bval-jsr/src/main/java/org/apache/bval/jsr/util/Proxies.java ---------------------------------------------------------------------- diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/util/Proxies.java b/bval-jsr/src/main/java/org/apache/bval/jsr/util/Proxies.java index 1d0c1ee..b6906f6 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/util/Proxies.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/util/Proxies.java @@ -42,7 +42,7 @@ public final class Proxies { return clazz; } - private static boolean isProxyClass(Class<?> clazz) { + public static boolean isProxyClass(Class<?> clazz) { if (KNOWN_PROXY_CLASSNAMES.contains(clazz.getName())) { return true; }
