A good practice we use when writing these validators, is that after  checking for required fields is to check if there are any validation errors at that point and return immediately, i guess this is why i assumed it halts it but looks like this validator was written validator. It doesn't make sense to do further validation on the same field that was already found to be null e.g:

ValidationUtils.rejectIfEmpty(errors, "dose", "mesasge");
ValidationUtils.rejectIfEmpty(errors, "startDate", "mesasge");
if(errors.hasErrors())
   return;

//At this point i know some fields can't be null
//the check if startDate is not in the future without checking for null

But i guess it is okay if you prefer to write it that way.