Java Reference
In-Depth Information
Manual Method Level Validation Invocation
As mentioned previously, method validation is not automatic, and it must be implemented by the provider or
manually invoked via code. The process for invoking method-level validation varies depending upon the type of
validation you want to perform. In all cases, you must use the
javax.validation.ExecutableValidator
interface
to manually invoke the execution. To obtain a handle on the
ExecutableValidator
, utilize the
Validation.
buildDefaultValidatorFactory.getValidator().forExecutables()
call, as demonstrated in the following lines:
ExecutableValidator executableValidator = Validation
.buildDefaultValidatorFactory().getValidator().forExecutables();
Depending upon the type of method-level validation that you want to invoke, make calls to the appropriate
ExecutableValidator
methods. Table
6-3
lists the different methods available for invoking validation.
Table 6-3.
ExecutableValidator Validation Methods
Method and Description
validateParameters(T object, Method method, Object[] parameterValues, Class<?>... groups)
Validates the arguments (as given in
parameterValues
) for the parameters of a given method (identified by
method
)
validateReturnValue(T object, Method method, Object returnValue, Class<?>... groups)
Validates the return value (specified by
returnValue
) of a given method (identified by
method
)
validateConstructorParameters(Constructor<T> constructor, Object[] parameterValues, Class<?>... groups)
Validates the arguments (as given in
parameterValues
) for the parameters of a given constructor (identified by
constructor
)
validateConstructorReturnValue(Constructor<T> constructor, T createdObject, Class<?>... groups)
Validates the object (specified by
createdObject
) of a given constructor (identified by
constructor
)
The following example demonstrates how to manually invoke validation. The call will return a
Set
of
ConstraintViolation
objects, one for each violation that occurred. If no issues occurred, then there will be
an empty set returned.
Set<ConstraintViolation> constraintViolations = executableValidator.validateParameters(
widgetOrderingService, placeOrder, new Object[] { null, widget1, 5 })
Group Conversion
Group validation
refers to the notion that constraints can belong to one or more groups that will be used for
validation. A new feature of Bean Validation 1.1 is known as
group conversion
, which I will discuss within this section.
First, we will summarize the concept of validation groups and their associated concepts. After a brief overview,
I'll dig into group conversions.
Applications can elect to validate a specific “group” of constraints based upon an activity that is being performed.
This means that instead of validating all constraints that belong to an object graph, a subset of those constraints can
be validated, if so desired. Why would this be useful? Consider the case where a user is logging into an application
and you want to validate the user name and password. The user object may contain several different constraint
validations, perhaps constraints on e-mail address, street address, and so on, but you need to validate only the
username and password. In such a case, the login process can validate a subset of those constraints by using the
validation group.