@Override
    public Map<String, List<Object>> getAttributesInternal(final RegisteredServiceAttributeReleasePolicyContext context,
                                                           final Map<String, List<Object>> attributes) throws Throwable {
        try {
            LOGGER.debug("Invoking Groovy script with attributes=[{}], principal=[{}], service=[{}] and default logger",
                attributes, context.getPrincipal(), context.getRegisteredService());
            return fetchAttributeValueFromExternalGroovyScript(groovyScript, context, attributes);
        } catch (final Exception e) {
            LoggingUtils.error(LOGGER, e);
        }
        LOGGER.warn("Groovy script [{}] does not exist or cannot be loaded", groovyScript);
        return new HashMap<>();
    }
This is {@link GroovyScriptAttributeReleasePolicy} that attempts to release attributes
based on the execution result of an external groovy script.

@author Misagh Moayyed
@since 5.0.0
core/cas-server-core-authentication-attributes/src/main/java/org/apereo/cas/services/GroovyScriptAttributeReleasePolicy.java