if (domainObject == null) { if (logger.isDebugEnabled()) { logger.debug("Voting to abstain - domainObject is null"); }  return AccessDecisionVoter.ACCESS_ABSTAIN; }
    public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config) {        Iterator iter = config.getConfigAttributes();        while (iter.hasNext()) {            ConfigAttribute attr = (ConfigAttribute) iter.next();            if (this.supports(attr)) {                // Need to make an access decision on this invocation                // Attempt to locate the domain object instance to process                Object domainObject = getDomainObjectInstance(object);                // If domain object is null, vote to abstain                if (domainObject == null) {                    if (logger.isDebugEnabled()) {                        logger.debug("Voting to abstain - domainObject is null");                    }                    return AccessDecisionVoter.ACCESS_ABSTAIN;                }                // Evaluate if we are required to use an inner domain object                if ((internalMethod != null) && !"".equals(internalMethod)) {                    try {                        Class clazz = domainObject.getClass();                        Method method = clazz.getMethod(internalMethod, new Class[] {});                        domainObject = method.invoke(domainObject, new Object[] {});                    } catch (NoSuchMethodException nsme) {                        throw new AuthorizationServiceException("Object of class '" + domainObject.getClass()                            + "' does not provide the requested internalMethod: " + internalMethod);                    } catch (IllegalAccessException iae) {                        if (logger.isDebugEnabled()) {                            logger.debug("IllegalAccessException", iae);                            if (iae.getCause() != null) {                                logger.debug("Cause: " + iae.getCause().getMessage(), iae.getCause());                            }                        }                        throw new AuthorizationServiceException("Problem invoking internalMethod: " + internalMethod                            + " for object: " + domainObject);                    } catch (InvocationTargetException ite) {                        if (logger.isDebugEnabled()) {                            logger.debug("InvocationTargetException", ite);                            if (ite.getCause() != null) {                                logger.debug("Cause: " + ite.getCause().getMessage(), ite.getCause());                            }                        }                        throw new AuthorizationServiceException("Problem invoking internalMethod: " + internalMethod                            + " for object: " + domainObject);                    }                }                // Obtain the OID applicable to the domain object                ObjectIdentity objectIdentity = objectIdentityRetrievalStrategy.getObjectIdentity(domainObject);                // Obtain the SIDs applicable to the principal                Sid[] sids = sidRetrievalStrategy.getSids(authentication);                Acl acl;                try {                    // Lookup only ACLs for SIDs we're interested in                    acl = aclService.readAclById(objectIdentity, sids);                } catch (NotFoundException nfe) {                    if (logger.isDebugEnabled()) {                        logger.debug("Voting to deny access - no ACLs apply for this principal");                    }                    return AccessDecisionVoter.ACCESS_DENIED;                }                try {                    if (acl.isGranted(requirePermission, sids, false)) {                        if (logger.isDebugEnabled()) {                            logger.debug("Voting to grant access");                        }                        return AccessDecisionVoter.ACCESS_GRANTED;                    } else {                        if (logger.isDebugEnabled()) {                            logger.debug(                                "Voting to deny access - ACLs returned, but insufficient permissions for this principal");                        }                        return AccessDecisionVoter.ACCESS_DENIED;                    }                } catch (NotFoundException nfe) {                    if (logger.isDebugEnabled()) {                        logger.debug("Voting to deny access - no ACLs apply for this principal");                    }                    return AccessDecisionVoter.ACCESS_DENIED;                }            }        }        // No configuration attribute matched, so abstain        return AccessDecisionVoter.ACCESS_ABSTAIN;    }