public void validate()

in core/src/main/java/org/apache/struts2/validator/DefaultActionValidatorManager.java [166:236]


    public void validate(Object object, String context, ValidatorContext validatorContext, String method) throws ValidationException {
        List<Validator> validators = getValidators(object.getClass(), context, method);
        Set<String> shortcircuitedFields = null;

        for (Validator validator : validators) {
            validator.setValidatorContext(validatorContext);

            LOG.debug("Running validator: {} for object {} and method {}", validator, object, method);

            FieldValidator fValidator = null;
            String fullFieldName = null;

            if (validator instanceof FieldValidator) {
                fValidator = (FieldValidator) validator;
                fullFieldName = validatorContext.getFullFieldName(fValidator.getFieldName());

                if ((shortcircuitedFields != null) && shortcircuitedFields.contains(fullFieldName)) {
                    LOG.debug("Short-circuited, skipping");
                    continue;
                }
            }

            if (validator instanceof ShortCircuitableValidator && ((ShortCircuitableValidator) validator).isShortCircuit()) {
                // get number of existing errors
                List<String> errs = null;

                if (fValidator != null) {
                    if (validatorContext.hasFieldErrors()) {
                        Collection<String> fieldErrors = validatorContext.getFieldErrors().get(fullFieldName);

                        if (fieldErrors != null) {
                            errs = new ArrayList<>(fieldErrors);
                        }
                    }
                } else if (validatorContext.hasActionErrors()) {
                    Collection<String> actionErrors = validatorContext.getActionErrors();

                    if (actionErrors != null) {
                        errs = new ArrayList<>(actionErrors);
                    }
                }

                validator.validate(object);

                if (fValidator != null) {
                    if (validatorContext.hasFieldErrors()) {
                        Collection<String> errCol = validatorContext.getFieldErrors().get(fullFieldName);

                        if ((errCol != null) && !errCol.equals(errs)) {
                            LOG.debug("Short-circuiting on field validation");

                            if (shortcircuitedFields == null) {
                                shortcircuitedFields = new TreeSet<>();
                            }

                            shortcircuitedFields.add(fullFieldName);
                        }
                    }
                } else if (validatorContext.hasActionErrors()) {
                    Collection<String> errCol = validatorContext.getActionErrors();

                    if ((errCol != null) && !errCol.equals(errs)) {
                        LOG.debug("Short-circuiting");
                        break;
                    }
                }
                continue;
            }
            validator.validate(object);
        }
    }