@SuppressWarnings({"rawtypes", "unchecked"})
protected ValueDefinition readMap(BeanContainer container, XmlReader reader, LoaderContext context) {
boolean merge = boolAttribute(reader, MERGE_ATTRIBUTE, false);
Class<?> keyType = javaTypeAttribute(reader, KEY_TYPE_ATTRIBUTE);
Class<?> valueType = javaTypeAttribute(reader, VALUE_TYPE_ATTRIBUTE);
Map map = new LinkedHashMap();
final QName elementName = reader.getElementName();
while (reader.nextWhileNotEnd(elementName)) {
if (reader.isStartElement()) {
if (reader.isStartElement(DESCRIPTION_ELEMENT)) {
continue;
}
if (reader.isStartElement(ENTRY_ELEMENT)) {
ValueDefinition key = readEntryKey(container, reader, context);
ValueDefinition val = readEntryValue(container, reader, context);
map.put(key, val);
continue;
}
throw new BeanDefinitionException("unsupported child element '" + reader.getElementLocalName() + "' in element 'map', source : " + reader.getSource());
}
}
reader.next();
return new ValueDefinition(map, merge, null, keyType, valueType);
}