in config/ogdl/src/main/java/org/apache/shiro/config/ogdl/ReflectionBuilder.java [511:546]
protected Map<?, ?> toMap(String sValue) {
String[] tokens = StringUtils.split(sValue, StringUtils.DEFAULT_DELIMITER_CHAR,
StringUtils.DEFAULT_QUOTE_CHAR, StringUtils.DEFAULT_QUOTE_CHAR, true, true);
if (tokens == null || tokens.length <= 0) {
return null;
}
//SHIRO-423: check to see if the value is a referenced Map already, and if so, return it immediately:
if (tokens.length == 1 && isReference(tokens[0])) {
Object reference = resolveReference(tokens[0]);
if (reference instanceof Map) {
return (Map) reference;
}
}
Map<String, String> mapTokens = new LinkedHashMap<String, String>(tokens.length);
for (String token : tokens) {
String[] kvPair = StringUtils.split(token, MAP_KEY_VALUE_DELIMITER);
if (kvPair == null || kvPair.length != 2) {
String msg = "Map property value [" + sValue + "] contained key-value pair token ["
+ token + "] that does not properly split to a single key and pair. This must be the "
+ "case for all map entries.";
throw new ConfigurationException(msg);
}
mapTokens.put(kvPair[0], kvPair[1]);
}
//now convert into correct values and/or references:
Map<Object, Object> map = new LinkedHashMap<Object, Object>(mapTokens.size());
for (Map.Entry<String, String> entry : mapTokens.entrySet()) {
Object key = resolveValue(entry.getKey());
Object value = resolveValue(entry.getValue());
map.put(key, value);
}
return map;
}