Package org.apache.sling.validation.spi

# Interface Validator<T>

@ConsumerType public interface Validator<T>
A `Validator` is responsible for validating a single piece of information according to an internal constraint.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`PROPERTY_VALIDATOR_ID`
Each `Validator` must have a service property with name `validator.id` of type `String`.
`static final String`
`PROPERTY_VALIDATOR_SEVERITY`
Each `Validator` may have a service property with name `validator.severity` of type `Integer`.

## Method Summary

Modifier and Type
Method
Description
`@NotNull ValidationResult`
`validate(T data, @NotNull ValidatorContext context, @NotNull org.apache.sling.api.resource.ValueMap arguments)`
Validates the `data` and/or the `valueMap` according to the internal constraints of this validator.

## Field Details

### PROPERTY_VALIDATOR_ID

static final String PROPERTY_VALIDATOR_ID
Each `Validator` must have a service property with name `validator.id` of type `String`. The validators are only addressable via the value of this property from the validation models. If there are multiple validators registered for the same `validator.id`, the one with highest service ranking is used. It is recommended to prefix the value of the validator with the providing bundle symbolic name to prevent any name clashes.

See Also:
  - Constant Field Values

### PROPERTY_VALIDATOR_SEVERITY

static final String PROPERTY_VALIDATOR_SEVERITY
Each `Validator` may have a service property with name `validator.severity` of type `Integer`. This is taken as the severity of all `ValidationFailure`s constructed by this `Validator` in case the model has not overwritten the severity. If this property is not set the default severity is being used.

See Also:
  - Constant Field Values

## Method Details

### validate

@NotNull @NotNull ValidationResult validate(@NotNull T data, @NotNull @NotNull ValidatorContext context, @NotNull @NotNull org.apache.sling.api.resource.ValueMap arguments) throws SlingValidationException
Validates the `data` and/or the `valueMap` according to the internal constraints of this validator. The validator can enforce the type of the given data just by setting the appropriate parameter type `T` which can be any non-primitive class. Depending on whether this type is an array or not the `validate` method is called differently:

T is array type | Valuemap contains array value | `validate` is called...
--- | --- | ---
yes | yes | once per property with `data` containing the full array
yes | no | once per property with `data` containing a single element array
no | yes | once per element in the property array with `data` containing one array element
no | no | once per property with `data` containing the value of the property

If the data cannot be converted into the type `T` the validator is not called, but validation fails.

Parameters:
  `data` - the data to validate (primary property), never `null`.
  `context` - the validation context contains additional information about the data to be validated, never `null`.
  `arguments` - the parameterization of the validator. Never `null` but might be the empty map.
Returns:
  the validation result (encapsulates the validation status as well as messages).
Throws:
  `SlingValidationException` - if some expected arguments are missing from the arguments map