private Collection<OAuth2AccessToken> loadTokensByClientAndUserIndex( Map<String, Condition> keyCondition, boolean filterOutNullUsers) { List<OAuth2AccessToken> accessTokens = new ArrayList<OAuth2AccessToken>(); List<String> accessTokenIds = null; try { accessTokenIds = dynamoDBTemplate.query( schema.getAccessTableName(), schema.getAccessIndexClientIdAndUserName(), keyCondition, // new ObjectExtractor<String>() { public String extract(Map<String, AttributeValue> values) { return values.get(schema.getAccessColumnTokenId()).getS(); } }, schema.getAccessColumnTokenId()); List<Map<String, AttributeValue>> keys = new ArrayList<Map<String, AttributeValue>>(accessTokenIds.size()); for (String accessTokenId : accessTokenIds) { keys.add( Collections.singletonMap( schema.getAccessColumnTokenId(), new AttributeValue(accessTokenId))); } if (filterOutNullUsers) { accessTokens = dynamoDBTemplate.batchGet( schema.getAccessTableName(), // new KeysAndAttributes() .withKeys(keys) .withConsistentRead(true) .withAttributesToGet( schema.getAccessColumnTokenId(), schema.getAccessColumnToken(), schema.getAccessColumnIsNullUser()), // new NonNullUserSafeAccessTokenExtractor()); } else { accessTokens = dynamoDBTemplate.batchGet( schema.getAccessTableName(), // new KeysAndAttributes() .withKeys(keys) .withConsistentRead(true) .withAttributesToGet( schema.getAccessColumnTokenId(), schema.getAccessColumnToken()), // new SafeAccessTokenExtractor()); } } catch (EmptyResultDataAccessException e) { if (LOG.isInfoEnabled()) { LOG.info("Failed to find access token for " + keyCondition.toString()); } } accessTokens = removeNulls(accessTokens); return accessTokens; }