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/03/21 21:24:24 UTC
[1/2] bval git commit: TCK work
Repository: bval
Updated Branches:
refs/heads/bv2 6140f7d1c -> 00a882f72
TCK work
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/cd6d9cac
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/cd6d9cac
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/cd6d9cac
Branch: refs/heads/bv2
Commit: cd6d9caceb0e9751fba11c0d240555c77975c9ad
Parents: 6140f7d
Author: Matt Benson <mb...@apache.org>
Authored: Wed Mar 21 16:22:34 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Wed Mar 21 16:22:34 2018 -0500
----------------------------------------------------------------------
.../bval/jsr/ApacheValidationProvider.java | 11 ++++--
.../org/apache/bval/jsr/descriptor/BeanD.java | 10 +++---
.../bval/jsr/descriptor/MetadataReader.java | 12 +++++--
.../apache/bval/jsr/job/ValidateParameters.java | 8 +++--
.../apache/bval/jsr/util/ExecutableTypes.java | 37 ++++++++++----------
.../java/org/apache/bval/util/Exceptions.java | 13 +++++++
6 files changed, 59 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java b/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
index 52d2249..896529e 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
@@ -25,6 +25,7 @@ import javax.validation.spi.BootstrapState;
import javax.validation.spi.ConfigurationState;
import javax.validation.spi.ValidationProvider;
+import org.apache.bval.util.Exceptions;
import org.apache.bval.util.reflection.Reflection;
/**
@@ -92,9 +93,13 @@ public class ApacheValidationProvider implements ValidationProvider<ApacheValida
try {
return validatorFactoryClass.getConstructor(ConfigurationState.class).newInstance(configuration);
- } catch (final Exception ex) {
- throw new ValidationException("Cannot instantiate : " + validatorFactoryClass, ex);
+ } catch (Exception e) {
+ final Throwable t = Exceptions.causeOf(e);
+ if (t instanceof ValidationException) {
+ throw (ValidationException) t;
+ }
+ throw Exceptions.create(ValidationException::new, t, "Cannot instantiate %s",
+ validatorFactoryClass.getName());
}
}
-
}
http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java
index da221ce..5feaddf 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/BeanD.java
@@ -78,15 +78,15 @@ public class BeanD<T> extends ElementD<Class<T>, MetadataReader.ForBean<T>> impl
@Override
public MethodDescriptor getConstraintsForMethod(String methodName, Class<?>... parameterTypes) {
- final Signature key = new Signature(methodName, parameterTypes);
- return methods.get(key);
+ Exceptions.raiseIf(StringUtils.isBlank(methodName), IllegalArgumentException::new,
+ "method name cannot be null/empty/blank");
+ return methods.get(new Signature(methodName, parameterTypes));
}
@Override
public Set<MethodDescriptor> getConstrainedMethods(MethodType methodType, MethodType... methodTypes) {
final EnumSet<MethodType> filter = EnumSet.of(methodType, methodTypes);
- return methods.values().stream().filter(DescriptorManager::isConstrained)
- .filter(m -> filter.contains(m.getMethodType())).collect(ToUnmodifiable.set());
+ return methods.values().stream().filter(m -> filter.contains(m.getMethodType())).collect(ToUnmodifiable.set());
}
@Override
@@ -96,7 +96,7 @@ public class BeanD<T> extends ElementD<Class<T>, MetadataReader.ForBean<T>> impl
@Override
public Set<ConstructorDescriptor> getConstrainedConstructors() {
- return constructors.values().stream().filter(DescriptorManager::isConstrained).collect(ToUnmodifiable.set());
+ return constructors.values().stream().collect(ToUnmodifiable.set());
}
public PropertyDescriptor getProperty(String propertyName) {
http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java
index c0d5e78..9dba122 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/MetadataReader.java
@@ -140,7 +140,11 @@ class MetadataReader {
final Method m = Reflection.find(meta.getHost(),
t -> Reflection.getDeclaredMethod(t, sig.getName(), sig.getParameterTypes()));
- result.put(sig, new MethodD(new MetadataReader.ForMethod(new Meta.ForMethod(m), builder), parent));
+ final MethodD descriptor =
+ new MethodD(new MetadataReader.ForMethod(new Meta.ForMethod(m), builder), parent);
+ if (DescriptorManager.isConstrained(descriptor)) {
+ result.put(sig, descriptor);
+ }
});
return Collections.unmodifiableMap(result);
}
@@ -158,7 +162,11 @@ class MetadataReader {
final Constructor<?> c = Reflection.getDeclaredConstructor(meta.getHost(), sig.getParameterTypes());
@SuppressWarnings({ "unchecked", "rawtypes" })
final Meta.ForConstructor<T> metaCtor = (Meta.ForConstructor) new Meta.ForConstructor<>(c);
- result.put(sig, new ConstructorD<>(new MetadataReader.ForConstructor<T>(metaCtor, builder), parent));
+ final ConstructorD<T> descriptor =
+ new ConstructorD<>(new MetadataReader.ForConstructor<T>(metaCtor, builder), parent);
+ if (DescriptorManager.isConstrained(descriptor)) {
+ result.put(sig, descriptor);
+ }
});
return Collections.unmodifiableMap(result);
}
http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java
index ce93eaf..5e7dc79 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java
@@ -53,7 +53,8 @@ public abstract class ValidateParameters<E extends Executable, T> extends Valida
ForMethod(ApacheFactoryContext validatorContext, T object, Method executable, Object[] parameterValues,
Class<?>[] groups) {
- super(validatorContext, object, executable, parameterValues, groups, new Meta.ForMethod(executable));
+ super(validatorContext, object, Validate.notNull(executable, IllegalArgumentException::new, "null method"),
+ parameterValues, groups, new Meta.ForMethod(executable));
this.object = Validate.notNull(object, IllegalArgumentException::new, "object");
}
@@ -84,7 +85,8 @@ public abstract class ValidateParameters<E extends Executable, T> extends Valida
ForConstructor(ApacheFactoryContext validatorContext, Constructor<? extends T> executable,
Object[] parameterValues, Class<?>[] groups) {
- super(validatorContext, null, executable, parameterValues, groups, new Meta.ForConstructor<>(executable));
+ super(validatorContext, null, Validate.notNull(executable, IllegalArgumentException::new, "null ctor"),
+ parameterValues, groups, new Meta.ForConstructor<>(executable));
}
@Override
@@ -145,7 +147,7 @@ public abstract class ValidateParameters<E extends Executable, T> extends Valida
super(validatorContext, groups, meta);
this.object = object;
this.parameterValues =
- Validate.notNull(parameterValues, IllegalArgumentException::new, "parameterValues").clone();
+ Validate.notNull(parameterValues, IllegalArgumentException::new, "null parameter values").clone();
final Type[] genericParameterTypes = executable.getGenericParameterTypes();
Exceptions.raiseUnless(parameterValues.length == genericParameterTypes.length, IllegalArgumentException::new,
http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java b/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java
index 664da42..fed9d49 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/util/ExecutableTypes.java
@@ -22,12 +22,11 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
import java.util.Set;
import javax.validation.executable.ExecutableType;
+import org.apache.bval.util.Exceptions;
import org.apache.bval.util.Validate;
/**
@@ -35,18 +34,11 @@ import org.apache.bval.util.Validate;
*/
public class ExecutableTypes {
- private static final Map<ExecutableType, Set<ExecutableType>> INTERPRETED_EXECUTABLE_TYPES;
- static {
- final Map<ExecutableType, Set<ExecutableType>> m = new LinkedHashMap<>();
+ private static final Set<ExecutableType> ALL_TYPES = Collections.unmodifiableSet(
+ EnumSet.of(ExecutableType.CONSTRUCTORS, ExecutableType.NON_GETTER_METHODS, ExecutableType.GETTER_METHODS));
- m.put(ExecutableType.ALL, Collections.unmodifiableSet(
- EnumSet.of(ExecutableType.CONSTRUCTORS, ExecutableType.NON_GETTER_METHODS, ExecutableType.GETTER_METHODS)));
- m.put(ExecutableType.IMPLICIT,
- Collections.unmodifiableSet(EnumSet.of(ExecutableType.CONSTRUCTORS, ExecutableType.NON_GETTER_METHODS)));
- m.put(ExecutableType.NONE, Collections.emptySet());
-
- INTERPRETED_EXECUTABLE_TYPES = Collections.unmodifiableMap(m);
- }
+ private static final Set<ExecutableType> IMPLICIT_TYPES =
+ Collections.unmodifiableSet(EnumSet.of(ExecutableType.CONSTRUCTORS, ExecutableType.NON_GETTER_METHODS));
/**
* Interpret occurrences of {@link ExecutableType#ALL}, {@link ExecutableType#IMPLICIT}, and
@@ -57,13 +49,20 @@ public class ExecutableTypes {
*/
public static Set<ExecutableType> interpret(Collection<ExecutableType> executableTypes) {
Validate.notNull(executableTypes);
-
- for (Map.Entry<ExecutableType, Set<ExecutableType>> e : INTERPRETED_EXECUTABLE_TYPES.entrySet()) {
- if (e.getValue().equals(executableTypes) || executableTypes.contains(e.getKey())) {
- return e.getValue();
- }
+ if (executableTypes.isEmpty()) {
+ return Collections.emptySet();
+ }
+ final Set<ExecutableType> result = EnumSet.copyOf(executableTypes);
+ if (result.contains(ExecutableType.ALL)) {
+ return ALL_TYPES;
+ }
+ if (result.remove(ExecutableType.IMPLICIT)) {
+ Exceptions.raiseUnless(result.isEmpty(), IllegalArgumentException::new,
+ "Mixing %s with other %ss is illegal.", ExecutableType.IMPLICIT, ExecutableType.class.getSimpleName());
+ return IMPLICIT_TYPES;
}
- return Collections.unmodifiableSet(EnumSet.copyOf(executableTypes));
+ result.remove(ExecutableType.NONE);
+ return result.isEmpty() ? Collections.emptySet() : Collections.unmodifiableSet(result);
}
/**
http://git-wip-us.apache.org/repos/asf/bval/blob/cd6d9cac/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java b/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java
index 9487cde..ba3fee8 100644
--- a/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java
+++ b/bval-jsr/src/main/java/org/apache/bval/util/Exceptions.java
@@ -16,6 +16,7 @@
*/
package org.apache.bval.util;
+import java.lang.reflect.InvocationTargetException;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
@@ -113,6 +114,18 @@ public class Exceptions {
raiseIf(!condition, fn, cause, message);
}
+ /**
+ * Extract cause from {@link InvocationTargetException}s.
+ * @param t to unwrap
+ * @return first of t, cause hierarchy not instanceof {@link InvocationTargetException}
+ */
+ public static Throwable causeOf(Throwable t) {
+ while (t instanceof InvocationTargetException) {
+ t = t.getCause();
+ }
+ return t;
+ }
+
private static <T extends Throwable> T elideStackTrace(T t) {
final StackTraceElement[] stackTrace = t.fillInStackTrace().getStackTrace();
t.setStackTrace(Stream.of(stackTrace).filter(e -> !Exceptions.class.getName().equals(e.getClassName()))
[2/2] bval git commit: target NumberSignValidator+ classes to correct
constraint types
Posted by mb...@apache.org.
target NumberSignValidator+ classes to correct constraint types
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/00a882f7
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/00a882f7
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/00a882f7
Branch: refs/heads/bv2
Commit: 00a882f724a9c861102b1cd768f31ca8a94510eb
Parents: cd6d9ca
Author: Matt Benson <mb...@apache.org>
Authored: Wed Mar 21 16:24:17 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Wed Mar 21 16:24:17 2018 -0500
----------------------------------------------------------------------
.../apache/bval/constraints/NumberSignValidator.java | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/00a882f7/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
index fe8f59c..48d20b9 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
@@ -18,20 +18,24 @@
*/
package org.apache.bval.constraints;
+import java.lang.annotation.Annotation;
import java.util.function.IntPredicate;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.constraints.Negative;
+import javax.validation.constraints.NegativeOrZero;
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.PositiveOrZero;
import org.apache.bval.util.Validate;
/**
* Description: validate positive/negative number values.
*/
-public abstract class NumberSignValidator implements ConstraintValidator<Negative, Number> {
- public static class ForPositive extends NumberSignValidator {
- public static class OrZero extends NumberSignValidator {
+public abstract class NumberSignValidator<A extends Annotation> implements ConstraintValidator<A, Number> {
+ public static class ForPositive extends NumberSignValidator<Positive> {
+ public static class OrZero extends NumberSignValidator<PositiveOrZero> {
public OrZero() {
super(n -> n >= 0);
}
@@ -42,8 +46,8 @@ public abstract class NumberSignValidator implements ConstraintValidator<Negativ
}
}
- public static class ForNegative extends NumberSignValidator {
- public static class OrZero extends NumberSignValidator {
+ public static class ForNegative extends NumberSignValidator<Negative> {
+ public static class OrZero extends NumberSignValidator<NegativeOrZero> {
public OrZero() {
super(n -> n <= 0);
}