docs: public Attributes checkAttributesCache(String name, String[] attrIds) throws WIMException {
          final String METHODNAME = "checkAttributesCache";
  
          Attributes attributes = null;
          // If attribute cache is available, look up cache first
          if (getAttributesCache() != null) {
              String key = toKey(name);
              Object cached = getAttributesCache().get(key);
              // Cache entry found
              if (cached != null && (cached instanceof Attributes)) {
                  List<String> missAttrIdList = new ArrayList<String>(attrIds.length);
                  Attributes cachedAttrs = (Attributes) cached;
                  attributes = new BasicAttributes(true);
                  for (int i = 0; i < attrIds.length; i++) {
                      Attribute attr = LdapHelper.getIngoreCaseAttribute(cachedAttrs, attrIds[i]);
                      if (attr != null) {
                          attributes.put(attr);
                      } else {
                          missAttrIdList.add(attrIds[i]);
                      }
                  }
                  // If no missed attributes, nothing need to do.
                  // Otherwise, retrieve missed attributes and add back to cache
                  if (missAttrIdList.size() > 0) {
                      String[] missAttrIds = missAttrIdList.toArray(new String[0]);
                      if (tc.isDebugEnabled()) {
                          Tr.debug(tc, METHODNAME + " Miss cache: " + key + " " + WIMTraceHelper.printObjectArray(missAttrIds));
                      }
                      Attributes missAttrs = getAttributes(name, missAttrIds);
                      // Add missed attributes to attributes.
                      addAttributes(missAttrs, attributes);
                      // Add missed attributes to cache.
                      updateAttributesCache(key, missAttrs, cachedAttrs, missAttrIds);
                  } else {
                      if (tc.isDebugEnabled()) {
                          Tr.debug(tc, METHODNAME + " Hit cache: " + key);
                      }
                  }
              }
              // No cache entry, call LDAP to retrieve all request attributes.
              else {
                  if (tc.isDebugEnabled()) {
                      Tr.debug(tc, METHODNAME + " Miss cache: " + key);
                  }
  
                  attributes = getAttributes(name, attrIds);
                  // Add attributes to cache.
                  updateAttributesCache(key, attributes, null, attrIds);
              }
          } else {
              // Attribute cache is not available, directly call LDAP server
              attributes = getAttributes(name, attrIds);
          }
  
          return attributes;
      }