@Override
    public Set<PersonAttributes> getPeopleWithMultivaluedAttributes(final Map<String, List<Object>> query,
                                                                    final PersonAttributeDaoFilter filter,
                                                                    final Set<PersonAttributes> resultPeople) {
        Set<PersonAttributes> results = null;
        var isFirstQuery = true;
        for (val currentlyConsidering : this.personAttributeDaos) {
            if (filter != null && !filter.choosePersonAttributeDao(currentlyConsidering)) {
                continue;
            }

            var handledException = false;
            Set<PersonAttributes> currentPeople = null;
            try {
                currentPeople = getAttributesFromDao(query, isFirstQuery, currentlyConsidering, results, filter);
                isFirstQuery = false;

                LOGGER.debug("Retrieved attributes=[{}] for query=[{}], isFirstQuery=[{}], currentlyConsidering=[{}], resultAttributes=[{}]",
                    currentPeople, query, isFirstQuery, currentlyConsidering, results);
            } catch (final Exception rte) {
                handledException = handledException || handleRuntimeException(currentlyConsidering, rte);
            }

            if (currentPeople != null) {
                if (results == null) {
                    results = new LinkedHashSet<>(currentPeople);
                } else {
                    results = attributeMerger.mergeResults(results, currentPeople);
                }
            } else if (this.requireAll) {
                LOGGER.debug("Attribute repository dao [{}] did not resolve a person "
                    + "and configuration requires all sources to produce valid results. ", currentlyConsidering);
                return null;
            }

            if (this.stopOnSuccess && !handledException) {
                LOGGER.debug("Successfully retrieved attributes from a child DAO and stopOnSuccess is true, stopping iteration of child DAOs");
                break;
            }
        }

        if (results == null) {
            return null;
        }

        LOGGER.debug("Aggregated search results [{}] for query [{}]", results, query);
        return Set.copyOf(results);
    }
Force all provided person attribute DAOs to
produce results, and otherwise, halt execution
if any of them cannot resolve the principal and return null.
core/cas-server-core-authentication-api/src/main/java/org/apereo/cas/authentication/attribute/AbstractAggregatingDefaultQueryPersonAttributeDao.java