Java Reference
In-Depth Information
import org.springframework.batch.item.validator.ValidationException;
import org.springframework.batch.item.validator.Validator;
import org.springframework.beans.factory.InitializingBean;
@SuppressWarnings("rawtypes")
public class BeanValidator implements Validator, InitializingBean {
private javax.validation.Validator validator;
public void afterPropertiesSet() throws Exception {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.usingContext().getValidator();
}
public void validate(Object target) throws ValidationException {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(target);
if(constraintViolations.size() > 0) {
buildValidationException(constraintViolations);
}
}
private void buildValidationException(
Set<ConstraintViolation<Object>> constraintViolations) {
StringBuilder message = new StringBuilder();
for (ConstraintViolation<Object> constraintViolation : constraintViolations) {
message.append(constraintViolation.getMessage() + "\n");
}
throw new ValidationException(message.toString());
}
}
Implementing Spring Batch's Validator interface as well as Spring's
org.springframework.beans.factory.InitializingBean
interface allows you to obtain an instance of the
Java validator in the
afterPropertiesSet
method and execute the validation within the
validate
method. Once you have validated the object, you can construct a
ValidationException
out of the
messages you received if any attributes failed validation.
Note
The Validator interface included in the Spring Batch framework is not the same as the Validator interface
that is part of the core Spring framework. Spring Batch provides an adapter class,
SpringValidator
, to handle
the differences.
Let's see how all of this works together by creating a job to put them to use. Your job will read a
comma-delimited file into your
Customer
object, which will then be valided as part of the