public final <T> boolean validateConstraints(ValidationContext<T> executionContext, ValueContext<?, ?> valueContext) { Set<ConstraintViolation<T>> constraintViolations = newHashSet( 5 ); validateConstraints( executionContext, valueContext, constraintViolations ); if ( !constraintViolations.isEmpty() ) { executionContext.addConstraintFailures( constraintViolations ); return false; } return true; }
public Set<ConstraintViolation<T>> createConstraintViolations(ValueContext<?, ?> localContext, ConstraintValidatorContextImpl constraintValidatorContext) { return constraintValidatorContext.getConstraintViolationCreationContexts().stream() .map( c -> createConstraintViolation( localContext, c, constraintValidatorContext.getConstraintDescriptor() ) ) .collect( Collectors.toSet() ); }
protected final <T, V> Set<ConstraintViolation<T>> validateSingleConstraint(ValidationContext<T> executionContext, ValueContext<?, ?> valueContext, ConstraintValidatorContextImpl constraintValidatorContext, ConstraintValidator<A, V> validator) { boolean isValid; try { @SuppressWarnings("unchecked") V validatedValue = (V) valueContext.getCurrentValidatedValue(); isValid = validator.isValid( validatedValue, constraintValidatorContext ); } catch (RuntimeException e) { if ( e instanceof ConstraintDeclarationException ) { throw e; } throw LOG.getExceptionDuringIsValidCallException( e ); } if ( !isValid ) { //We do not add these violations yet, since we don't know how they are //going to influence the final boolean evaluation return executionContext.createConstraintViolations( valueContext, constraintValidatorContext ); } return Collections.emptySet(); }
private boolean shouldFailFast(ValidationContext<?> validationContext) { return validationContext.isFailFastModeEnabled() && !validationContext.getFailingConstraints().isEmpty(); }
@SuppressWarnings("unchecked") private ConstraintValidator<A, ?> getInitializedConstraintValidator(ValidationContext<?> validationContext) { ConstraintValidator<A, ?> validator = validationContext.getConstraintValidatorManager().getInitializedValidator( validatedValueType, descriptor, validationContext.getConstraintValidatorFactory(), validationContext.getConstraintValidatorInitializationContext() ); if ( validator != null ) { return validator; } else { return (ConstraintValidator<A, ?>) DUMMY_CONSTRAINT_VALIDATOR; } }
private <T> Set<ConstraintViolation<T>> validateReturnValue(T object, ExecutableElement executable, Object returnValue, Class<?>... groups) { ValidationOrder validationOrder = determineGroupValidationOrder( groups ); ValidationContext<T> context = getValidationContext().forValidateReturnValue( object, executable, returnValue ); if ( !beanMetaDataManager.isConstrained( context.getRootBeanClass() ) ) { return Collections.emptySet(); } validateReturnValueInContext( context, object, returnValue, validationOrder ); return context.getFailingConstraints(); }
private <T> void validateParametersForGroup(ValidationContext<T> validationContext, Object[] parameterValues, Group group) { BeanMetaData<T> beanMetaData = beanMetaDataManager.getBeanMetaData( validationContext.getRootBeanClass() ); ExecutableMetaData executableMetaData = beanMetaData.getMetaDataFor( validationContext.getExecutable() ); Iterator<Sequence> defaultGroupSequence = beanMetaData.getDefaultValidationSequence( validationContext.getRootBean() ); int numberOfViolations = validationContext.getFailingConstraints().size(); if ( validationContext.getFailingConstraints().size() > numberOfViolations ) { return;
private <T> void validateReturnValueForGroup(ValidationContext<T> validationContext, T bean, Object value, Group group) { BeanMetaData<T> beanMetaData = beanMetaDataManager.getBeanMetaData( validationContext.getRootBeanClass() ); ExecutableMetaData executableMetaData = beanMetaData.getMetaDataFor( validationContext.getExecutable() ); int numberOfViolations = validationContext.getFailingConstraints().size(); if ( validationContext.getFailingConstraints().size() > numberOfViolations ) { return;
public ConstraintViolation<T> createConstraintViolation(ValueContext<?, ?> localContext, ConstraintViolationCreationContext constraintViolationCreationContext, ConstraintDescriptor<?> descriptor) { String messageTemplate = constraintViolationCreationContext.getMessage(); String interpolatedMessage = interpolate( messageTemplate, localContext.getCurrentValidatedValue(), constraintViolationCreationContext.getExpressionVariables(), interpolatedMessage, getRootBeanClass(), getRootBean(), localContext.getCurrentBean(), localContext.getCurrentValidatedValue(), constraintViolationCreationContext.getExpressionVariables(), interpolatedMessage, getRootBeanClass(), getRootBean(), localContext.getCurrentBean(), localContext.getCurrentValidatedValue(), constraintViolationCreationContext.getExpressionVariables(), interpolatedMessage, getRootBeanClass(), getRootBean(), localContext.getCurrentBean(), localContext.getCurrentValidatedValue(),
private boolean isReachable(ValidationContext<?> validationContext, Object traversableObject, PathImpl path, ElementType type) { if ( needToCallTraversableResolver( path, type ) ) { return true; } Path pathToObject = path.getPathWithoutLeafNode(); try { return validationContext.getTraversableResolver().isReachable( traversableObject, path.getLeafNode(), validationContext.getRootBeanClass(), pathToObject, type ); } catch (RuntimeException e) { throw LOG.getErrorDuringCallOfTraversableResolverIsReachableException( e ); } }
Class<?> clazz = validationContext.getRootBeanClass(); BeanMetaData<?> beanMetaData = validationContext.getRootBeanMetaData(); Object value = validationContext.getRootBean(); PropertyMetaData propertyMetaData = null; throw LOG.getInvalidPropertyPathException( validationContext.getRootBeanClass(), propertyPath.asString() ); throw LOG.getUnableToReachPropertyToValidateException( validationContext.getRootBean(), propertyPath ); throw LOG.getUnableToReachPropertyToValidateException( validationContext.getRootBean(), propertyPath ); validationContext.setValidatedProperty( propertyMetaData.getName() ); propertyPath.removeLeafNode();
private <T> void validateParametersInContext(ValidationContext<T> validationContext, Object[] parameterValues, ValidationOrder validationOrder) { BeanMetaData<T> beanMetaData = validationContext.getRootBeanMetaData(); Optional<ExecutableMetaData> executableMetaDataOptional = validationContext.getExecutableMetaData(); validationOrder.assertDefaultGroupSequenceIsExpandable( beanMetaData.getDefaultGroupSequence( validationContext.getRootBean() Sequence sequence = sequenceIterator.next(); for ( GroupWithInheritance groupOfGroups : sequence ) { int numberOfViolations = validationContext.getFailingConstraints().size(); if ( validationContext.getFailingConstraints().size() > numberOfViolations ) { break;
Iterator<Sequence> defaultGroupSequence = validationContext.getRootBeanMetaData().getDefaultValidationSequence( validationContext.getRootBean() ); int numberOfViolations = validationContext.getFailingConstraints().size(); if ( validationContext.getFailingConstraints().size() > numberOfViolations ) { return;
@SuppressWarnings("unchecked") ValidatedValueUnwrapper<V> validatedValueUnwrapper = (ValidatedValueUnwrapper<V>) validationContext .getValidatedValueUnwrapper( validatedValueType ); ConstraintValidator<A, V> validatorForWrappedValue = validationContext.getConstraintValidatorManager() .getInitializedValidator( validatedValueUnwrapper.getValidatedValueType( validatedValueType ), descriptor, validationContext.getConstraintValidatorFactory() ); ConstraintValidator<A, V> validatorForWrapper = validationContext.getConstraintValidatorManager() .getInitializedValidator( valueContext.getDeclaredTypeOfValidatedElement(), descriptor, validationContext.getConstraintValidatorFactory() );
private <T, V> ConstraintValidator<A, V> getConstraintValidatorNoUnwrapping(ValidationContext<T> validationContext, ValueContext<?, V> valueContext) { // make sure no unwrapper is set valueContext.setValidatedValueHandler( null ); Type validatedValueType = valueContext.getDeclaredTypeOfValidatedElement(); ConstraintValidator<A, V> validator = validationContext.getConstraintValidatorManager() .getInitializedValidator( validatedValueType, descriptor, validationContext.getConstraintValidatorFactory() ); if ( validator == null ) { throwExceptionForNullValidator( validatedValueType, valueContext.getPropertyPath().asString() ); } return validator; }
validationContext.getParameterNames(), validationContext.getClockProvider(), valueContext.getPropertyPath(), descriptor, validationContext.getConstraintValidatorPayload() );
private <T> void validateParametersForSingleGroup(ValidationContext<T> validationContext, Object[] parameterValues, ExecutableMetaData executableMetaData, Class<?> currentValidatedGroup) { if ( !executableMetaData.getCrossParameterConstraints().isEmpty() ) { ValueContext<T, Object> valueContext = getExecutableValueContext( validationContext.getRootBean(), executableMetaData, executableMetaData.getValidatableParametersMetaData(), currentValidatedGroup ); validationContext.getRootBean(), executableMetaData, executableMetaData.getValidatableParametersMetaData(), currentValidatedGroup ); parameterMetaData.getType(), i, validationContext.getExecutable() );
int numberOfConstraintViolationsBefore = validationContext.getFailingConstraints().size(); for ( MetaConstraint<?> metaConstraint : metaConstraints ) { validateConstraint( validationContext, valueContext, true, metaConstraint ); if ( shouldFailFast( validationContext ) ) { return validationContext.getFailingConstraints() .size() - numberOfConstraintViolationsBefore; validatePropertyTypeConstraint( validationContext, valueContext, true, metaConstraint ); if ( shouldFailFast( validationContext ) ) { return validationContext.getFailingConstraints() .size() - numberOfConstraintViolationsBefore; return validationContext.getFailingConstraints().size() - numberOfConstraintViolationsBefore;
private <T> Set<ConstraintViolation<T>> validateReturnValue(T object, Executable executable, Object returnValue, Class<?>... groups) { sanityCheckGroups( groups ); ValidationContext<T> validationContext = getValidationContextBuilder().forValidateReturnValue( object, executable, returnValue ); if ( !validationContext.getRootBeanMetaData().hasConstraints() ) { return Collections.emptySet(); } ValidationOrder validationOrder = determineGroupValidationOrder( groups ); validateReturnValueInContext( validationContext, object, returnValue, validationOrder ); return validationContext.getFailingConstraints(); }
throw log.getUnableToReachPropertyToValidateException( context.getRootBean(), propertyPath ); return context.getFailingConstraints(); validatePropertyForCurrentGroup( context, valueContext, metaConstraints, typeUseConstraints ); if ( shouldFailFast( context ) ) { return context.getFailingConstraints(); ); if ( shouldFailFast( context ) ) { return context.getFailingConstraints(); return context.getFailingConstraints();