private void validateMetaConstraints(ValidationContext<?> validationContext, ValueContext<?, Object> valueContext, Object parent, Iterable<MetaConstraint<?>> constraints) { for ( MetaConstraint<?> metaConstraint : constraints ) { validateMetaConstraint( validationContext, valueContext, parent, metaConstraint ); if ( shouldFailFast( validationContext ) ) { break; } } }
private void validateConstraintsForGroup(ValidationContext<?> validationContext, ValueContext<?, ?> valueContext, Iterable<MetaConstraint<?>> constraints) { for ( MetaConstraint<?> metaConstraint : constraints ) { if ( !isValidationRequired( validationContext, valueContext, metaConstraint ) ) { continue; } metaConstraint.validateConstraint( validationContext, valueContext ); if ( shouldFailFast( validationContext ) ) { break; } } }
private void validateTypeArgumentConstraints(ValidationContext<?> context, ValueContext<?, Object> valueContext, Object value, Set<MetaConstraint<?>> typeArgumentsConstraints) { valueContext.setCurrentValidatedValue( value ); valueContext.appendCollectionElementNode(); for ( MetaConstraint<?> metaConstraint : typeArgumentsConstraints ) { metaConstraint.validateConstraint( context, valueContext ); if ( shouldFailFast( context ) ) { return; } } }
for ( MetaConstraint<?> metaConstraint : metaConstraints ) { validateConstraint( validationContext, valueContext, true, metaConstraint ); if ( shouldFailFast( validationContext ) ) { return validationContext.getFailingConstraints() .size() - numberOfConstraintViolationsBefore; if ( shouldFailFast( validationContext ) ) { return validationContext.getFailingConstraints() .size() - numberOfConstraintViolationsBefore;
if ( shouldFailFast( validationContext ) ) { return false; ); validationSuccessful = validationSuccessful && tmp; if ( shouldFailFast( validationContext ) ) { return false;
private <U> boolean validateConstraintsForSingleDefaultGroupElement(ValidationContext<?> validationContext, ValueContext<U, Object> valueContext, final Map<Class<?>, Class<?>> validatedInterfaces, Class<? super U> clazz, Set<MetaConstraint<?>> metaConstraints, Group defaultSequenceMember) { boolean validationSuccessful = true; valueContext.setCurrentGroup( defaultSequenceMember.getDefiningClass() ); for ( MetaConstraint<?> metaConstraint : metaConstraints ) { // HV-466, an interface implemented more than one time in the hierarchy has to be validated only one // time. An interface can define more than one constraint, we have to check the class we are validating. final Class<?> declaringClass = metaConstraint.getLocation().getDeclaringClass(); if ( declaringClass.isInterface() ) { Class<?> validatedForClass = validatedInterfaces.get( declaringClass ); if ( validatedForClass != null && !validatedForClass.equals( clazz ) ) { continue; } validatedInterfaces.put( declaringClass, clazz ); } boolean tmp = validateMetaConstraint( validationContext, valueContext, valueContext.getCurrentBean(), metaConstraint ); if ( shouldFailFast( validationContext ) ) { return false; } validationSuccessful = validationSuccessful && tmp; } return validationSuccessful; }
validateCascadedContainerElementsForCurrentGroup( value, validationContext, valueContext, cascadingMetaData.getContainerElementTypesCascadingMetaData() ); if ( shouldFailFast( validationContext ) ) { return; if ( shouldFailFast( validationContext ) ) { return;
private <U> boolean validateConstraintsForSingleDefaultGroupElement(ValidationContext<?> validationContext, ValueContext<U, Object> valueContext, final Map<Class<?>, Class<?>> validatedInterfaces, Class<? super U> clazz, Set<MetaConstraint<?>> metaConstraints, Group defaultSequenceMember) { boolean validationSuccessful = true; valueContext.setCurrentGroup( defaultSequenceMember.getDefiningClass() ); PathImpl currentPath = valueContext.getPropertyPath(); for ( MetaConstraint<?> metaConstraint : metaConstraints ) { // HV-466, an interface implemented more than one time in the hierarchy has to be validated only one // time. An interface can define more than one constraint, we have to check the class we are validating. final Class<?> declaringClass = metaConstraint.getLocation().getDeclaringClass(); if ( declaringClass.isInterface() ) { Class<?> validatedForClass = validatedInterfaces.get( declaringClass ); if ( validatedForClass != null && !validatedForClass.equals( clazz ) ) { continue; } validatedInterfaces.put( declaringClass, clazz ); } boolean tmp = validateConstraint( validationContext, valueContext, false, metaConstraint ); if ( shouldFailFast( validationContext ) ) { return false; } validationSuccessful = validationSuccessful && tmp; // reset property path valueContext.setPropertyPath( currentPath ); } return validationSuccessful; }
if ( shouldFailFast( context ) ) { return;
validateReturnValueForSingleGroup( validationContext, executableMetaData, bean, value, defaultGroupSequenceElement.getDefiningClass() ); if ( shouldFailFast( validationContext ) ) { return;
validateParametersForSingleGroup( validationContext, parameterValues, executableMetaData, defaultGroupSequenceElement.getDefiningClass() ); if ( shouldFailFast( validationContext ) ) { return;
valueContext.setCurrentGroup( group.getDefiningClass() ); validateConstraintsForCurrentGroup( validationContext, valueContext ); if ( shouldFailFast( validationContext ) ) { return validationContext.getFailingConstraints(); valueContext.setCurrentGroup( group.getDefiningClass() ); validateConstraintsForCurrentGroup( validationContext, valueContext ); if ( shouldFailFast( validationContext ) ) { return validationContext.getFailingConstraints();
validateReturnValueForSingleGroup( validationContext, executableMetaData, bean, value, defaultGroupSequenceElement.getDefiningClass() ); if ( shouldFailFast( validationContext ) ) { return;
private void validateConstraintsForNonDefaultGroup(ValidationContext<?> validationContext, ValueContext<?, Object> valueContext) { BeanMetaData<?> beanMetaData = beanMetaDataManager.getBeanMetaData( valueContext.getCurrentBeanType() ); PathImpl currentPath = valueContext.getPropertyPath(); for ( MetaConstraint<?> metaConstraint : beanMetaData.getMetaConstraints() ) { validateConstraint( validationContext, valueContext, false, metaConstraint ); if ( shouldFailFast( validationContext ) ) { return; } // reset the path to the state before this call valueContext.setPropertyPath( currentPath ); } validationContext.markCurrentBeanAsProcessed( valueContext ); }
private <T> void validateReturnValueForSingleGroup(ValidationContext<T> validationContext, ExecutableMetaData executableMetaData, T bean, Object value, Class<?> oneGroup) { // validate constraints at return value itself ValueContext<?, Object> valueContext = getExecutableValueContext( executableMetaData.getKind() == ElementKind.CONSTRUCTOR ? value : bean, executableMetaData, oneGroup ); valueContext.setCurrentValidatedValue( value ); ReturnValueMetaData returnValueMetaData = executableMetaData.getReturnValueMetaData(); valueContext.appendNode( returnValueMetaData ); valueContext.setUnwrapMode( returnValueMetaData.unwrapMode() ); validateConstraintsForGroup( validationContext, valueContext, returnValueMetaData ); if ( shouldFailFast( validationContext ) ) { return; } if ( !returnValueMetaData.isCascading() ) { validateConstraintsForGroup( validationContext, valueContext, returnValueMetaData.getTypeArgumentsConstraints() ); if ( shouldFailFast( validationContext ) ) { return; } } }
valueContext.setCurrentGroup( group.getDefiningClass() ); validatePropertyForCurrentGroup( context, valueContext, metaConstraints, typeUseConstraints ); if ( shouldFailFast( context ) ) { return context.getFailingConstraints(); context, valueContext, metaConstraints, typeUseConstraints ); if ( shouldFailFast( context ) ) { return context.getFailingConstraints();
valueContext.setCurrentGroup( group.getDefiningClass() ); validatePropertyForCurrentGroup( context, valueContext, metaConstraints, typeArgumentConstraints ); if ( shouldFailFast( context ) ) { return context.getFailingConstraints(); context, valueContext, metaConstraints, typeArgumentConstraints ); if ( shouldFailFast( context ) ) { return context.getFailingConstraints();
private void validateCascadedAnnotatedObjectForCurrentGroup(Object value, ValidationContext<?> validationContext, ValueContext<?, Object> valueContext, CascadingMetaData cascadingMetaData) { if ( validationContext.isBeanAlreadyValidated( value, valueContext.getCurrentGroup(), valueContext.getPropertyPath() ) || shouldFailFast( validationContext ) ) { return; } Class<?> originalGroup = valueContext.getCurrentGroup(); Class<?> currentGroup = cascadingMetaData.convertGroup( originalGroup ); // expand the group only if was created by group conversion; // otherwise we're looping through the right validation order // already and need only to pass the current element ValidationOrder validationOrder = validationOrderGenerator.getValidationOrder( currentGroup, currentGroup != originalGroup ); ValueContext<?, Object> cascadedValueContext = buildNewLocalExecutionContext( valueContext, value ); validateInContext( validationContext, cascadedValueContext, validationOrder ); }
if ( shouldFailFast( validationContext ) ) { return; if ( shouldFailFast( validationContext ) ) { return;
validateParametersForSingleGroup( validationContext, parameterValues, executableMetaData, defaultGroupSequenceElement.getDefiningClass() ); if ( shouldFailFast( validationContext ) ) { return;