You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2018/04/04 16:43:36 UTC
[1/3] bval git commit: permit overriding of built-in constraint
validators per paragraph 2 of BV spec v2 section 8
Repository: bval
Updated Branches:
refs/heads/bv2 64aee232f -> 3409b647b
permit overriding of built-in constraint validators per paragraph 2 of BV spec v2 section 8
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/e076d2fa
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/e076d2fa
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/e076d2fa
Branch: refs/heads/bv2
Commit: e076d2fac8680c339ed50a467b35e22b480e834f
Parents: 64aee23
Author: Matt Benson <mb...@apache.org>
Authored: Wed Apr 4 10:31:33 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Wed Apr 4 10:31:33 2018 -0500
----------------------------------------------------------------------
.../src/main/java/org/apache/bval/jsr/ConstraintCached.java | 5 +----
.../bval/jsr/metadata/DualValidationMappingProvider.java | 8 ++++----
2 files changed, 5 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/e076d2fa/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java b/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java
index fa9e3df..5dbdef0 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintCached.java
@@ -139,9 +139,6 @@ public class ConstraintCached {
}
configured = new DualValidationMappingProvider(AnnotationDeclaredValidatorMappingProvider.INSTANCE, custom);
}
- // interpret spec as saying that default constraint validators are
- // always present even when annotation-based validators
- // have been excluded by custom (i.e. XML) config:
- return new DualValidationMappingProvider(configured, ConstraintDefaults.INSTANCE);
+ return new DualValidationMappingProvider(ConstraintDefaults.INSTANCE, configured);
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/e076d2fa/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/DualValidationMappingProvider.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/DualValidationMappingProvider.java b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/DualValidationMappingProvider.java
index e5b5038..ac88d4d 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/DualValidationMappingProvider.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/DualValidationMappingProvider.java
@@ -35,16 +35,16 @@ public class DualValidationMappingProvider extends ValidatorMappingProvider {
protected <A extends Annotation> ValidatorMapping<A> doGetValidatorMapping(Class<A> constraintType) {
final ValidatorMapping<A> secondaryMapping = secondaryDelegate.doGetValidatorMapping(constraintType);
+ final ValidatorMapping<A> primaryMapping = primaryDelegate.doGetValidatorMapping(constraintType);
if (secondaryMapping == null) {
- return primaryDelegate.doGetValidatorMapping(constraintType);
+ return primaryMapping;
}
final AnnotationBehavior annotationBehavior = secondaryMapping.getAnnotationBehavior();
- if (annotationBehavior == AnnotationBehavior.EXCLUDE) {
+ if (primaryMapping == null || annotationBehavior == AnnotationBehavior.EXCLUDE) {
return secondaryMapping;
}
- return ValidatorMapping.merge(
- Arrays.asList(primaryDelegate.doGetValidatorMapping(constraintType), secondaryMapping),
+ return ValidatorMapping.merge(Arrays.asList(primaryMapping, secondaryMapping),
AnnotationBehaviorMergeStrategy.consensus());
}
}
[2/3] bval git commit: raise ConstraintDeclarationException if
repeatable constraints and containers are specified together: TCK
Posted by mb...@apache.org.
raise ConstraintDeclarationException if repeatable constraints and containers are specified together: TCK
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/733acddf
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/733acddf
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/733acddf
Branch: refs/heads/bv2
Commit: 733acddfe0086cd6c1f862f781d2db53a1c7c3b7
Parents: e076d2f
Author: Matt Benson <mb...@apache.org>
Authored: Wed Apr 4 11:42:39 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Wed Apr 4 11:42:39 2018 -0500
----------------------------------------------------------------------
.../bval/jsr/util/AnnotationsManager.java | 49 +++++++++++++++++---
1 file changed, 42 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/733acddf/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java b/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java
index 38d73e3..f0aa3a8 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java
@@ -36,11 +36,14 @@ import java.util.Optional;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.validation.Constraint;
+import javax.validation.ConstraintDeclarationException;
import javax.validation.ConstraintDefinitionException;
+import javax.validation.ConstraintTarget;
import javax.validation.OverridesAttribute;
import javax.validation.Payload;
import javax.validation.ValidationException;
@@ -49,6 +52,7 @@ import javax.validation.constraintvalidation.ValidationTarget;
import org.apache.bval.jsr.ApacheValidatorFactory;
import org.apache.bval.jsr.ConfigurationImpl;
import org.apache.bval.jsr.ConstraintAnnotationAttributes;
+import org.apache.bval.jsr.ConstraintAnnotationAttributes.Worker;
import org.apache.bval.jsr.ConstraintCached.ConstraintValidatorInfo;
import org.apache.bval.jsr.groups.Group;
import org.apache.bval.jsr.groups.Groups;
@@ -105,6 +109,11 @@ public class AnnotationsManager {
}
private static class Composition {
+ static <A extends Annotation> Optional<ConstraintAnnotationAttributes.Worker<A>> validWorker(
+ ConstraintAnnotationAttributes attr, Class<A> type) {
+ return Optional.of(type).map(attr::analyze).filter(Worker::isValid);
+ }
+
final Lazy<Map<OverriddenAnnotationSpecifier, Map<String, String>>> overrides = new Lazy<>(HashMap::new);
final Annotation[] components;
@@ -161,6 +170,10 @@ public class AnnotationsManager {
final Class<? extends Payload>[] payload =
ConstraintAnnotationAttributes.PAYLOAD.analyze(source.annotationType()).read(source);
+ final Optional<ConstraintTarget> constraintTarget =
+ validWorker(ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO, source.annotationType())
+ .map(w -> w.read(source));
+
final Map<Class<? extends Annotation>, AtomicInteger> constraintCounts = new HashMap<>();
return Stream.of(components).map(c -> {
@@ -172,6 +185,11 @@ public class AnnotationsManager {
proxyBuilder.setGroups(groups);
proxyBuilder.setPayload(payload);
+ if (constraintTarget.isPresent()
+ && validWorker(ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO, c.annotationType())
+ .isPresent()) {
+ proxyBuilder.setValidationAppliesTo(constraintTarget.get());
+ }
overrides.optional().map(o -> o.get(new OverriddenAnnotationSpecifier(c.annotationType(), index)))
.ifPresent(m -> {
final Map<String, Object> sourceAttributes = readAttributes(source);
@@ -265,14 +283,31 @@ public class AnnotationsManager {
}
private static Annotation[] getDeclaredConstraints(AnnotatedElement e) {
- return Stream.of(e.getDeclaredAnnotations()).flatMap((Function<Annotation, Stream<Annotation>>) a -> {
- final ConstraintAnnotationAttributes.Worker<? extends Annotation> analyzer =
- ConstraintAnnotationAttributes.VALUE.analyze(a.annotationType());
- if (analyzer.isValid()) {
- return Stream.of(analyzer.<Annotation[]> read(a));
+ final Annotation[] declaredAnnotations = e.getDeclaredAnnotations();
+
+ // collect constraint explicitly nested into repeatable containers:
+ final Map<Class<? extends Annotation>, Annotation[]> repeated = new HashMap<>();
+
+ for (Annotation a : declaredAnnotations) {
+ final Class<? extends Annotation> annotationType = a.annotationType();
+ final Worker<? extends Annotation> w = ConstraintAnnotationAttributes.VALUE.analyze(annotationType);
+ if (w.isValid()
+ && ((Class<?>) w.getSpecificType()).getComponentType().isAnnotationPresent(Constraint.class)) {
+ repeated.put(annotationType, w.read(a));
}
- return Stream.of(a);
- }).filter(a -> a.annotationType().isAnnotationPresent(Constraint.class)).toArray(Annotation[]::new);
+ }
+ final Set<Annotation> constraints = Stream.of(declaredAnnotations)
+ .filter((Predicate<Annotation>) a -> a.annotationType().isAnnotationPresent(Constraint.class))
+ .collect(Collectors.toSet());
+
+ Exceptions.raiseIf(
+ constraints.stream().map(Annotation::annotationType).filter(t -> t.isAnnotationPresent(Repeatable.class))
+ .map(rct -> rct.getAnnotation(Repeatable.class).value()).anyMatch(repeated::containsKey),
+ ConstraintDeclarationException::new,
+ "Simultaneous declaration of repeatable constraint and associated container on %s", e);
+
+ return Stream.concat(constraints.stream(), repeated.values().stream().flatMap(Stream::of))
+ .toArray(Annotation[]::new);
}
public static boolean declaresAttribute(Class<? extends Annotation> annotationType, String name) {
[3/3] bval git commit: remove unnecessary method
Posted by mb...@apache.org.
remove unnecessary method
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/3409b647
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/3409b647
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/3409b647
Branch: refs/heads/bv2
Commit: 3409b647b85e394d1effa6c10ab57bcf7daf2b0d
Parents: 733acdd
Author: Matt Benson <mb...@apache.org>
Authored: Wed Apr 4 11:43:15 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Wed Apr 4 11:43:15 2018 -0500
----------------------------------------------------------------------
.../main/java/org/apache/bval/jsr/metadata/XmlBuilder.java | 4 +---
.../java/org/apache/bval/jsr/util/AnnotationsManager.java | 9 ---------
2 files changed, 1 insertion(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/3409b647/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
index 0cfdb6c..b68457a 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/XmlBuilder.java
@@ -49,7 +49,6 @@ import javax.xml.bind.JAXBElement;
import org.apache.bval.jsr.ConstraintAnnotationAttributes;
import org.apache.bval.jsr.groups.GroupConversion;
-import org.apache.bval.jsr.util.AnnotationsManager;
import org.apache.bval.jsr.util.ToUnmodifiable;
import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
import org.apache.bval.jsr.xml.AnnotationType;
@@ -549,8 +548,7 @@ public class XmlBuilder {
annoBuilder.setGroups(getGroups(constraint.getGroups()));
annoBuilder.setPayload(getPayload(constraint.getPayload()));
- if (AnnotationsManager.declaresAttribute(annotationClass,
- ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO.getAttributeName())) {
+ if (ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO.analyze(annotationClass).isValid()) {
annoBuilder.setValidationAppliesTo(target);
}
for (final ElementType elementType : constraint.getElement()) {
http://git-wip-us.apache.org/repos/asf/bval/blob/3409b647/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java b/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java
index f0aa3a8..1995c52 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/util/AnnotationsManager.java
@@ -310,15 +310,6 @@ public class AnnotationsManager {
.toArray(Annotation[]::new);
}
- public static boolean declaresAttribute(Class<? extends Annotation> annotationType, String name) {
- try {
- annotationType.getDeclaredMethod(name);
- return true;
- } catch (NoSuchMethodException | SecurityException e) {
- return false;
- }
- }
-
private final ApacheValidatorFactory validatorFactory;
private final LRUCache<Class<? extends Annotation>, Composition> compositions;