in xstream/src/java/com/thoughtworks/xstream/converters/extended/NamedMapConverter.java [234:272]
public void marshal(final Object source, final HierarchicalStreamWriter writer, final MarshallingContext context) {
final Map<?, ?> map = (Map<?, ?>)source;
SingleValueConverter keyConverter = null;
SingleValueConverter valueConverter = null;
if (keyAsAttribute) {
final SingleValueConverter singleValueConverter = getSingleValueConverter(keyType, "key");
keyConverter = singleValueConverter;
}
if (valueAsAttribute || valueName == null) {
final SingleValueConverter singleValueConverter = getSingleValueConverter(valueType, "value");
valueConverter = singleValueConverter;
}
for (final Map.Entry<?, ?> entry : map.entrySet()) {
final Object key = entry.getKey();
final Object value = entry.getValue();
if (entryName != null) {
writer.startNode(entryName, entry.getClass());
if (keyConverter != null && key != null) {
writer.addAttribute(keyName, keyConverter.toString(key));
}
if (valueName != null && valueConverter != null && value != null) {
writer.addAttribute(valueName, valueConverter.toString(value));
}
}
if (keyConverter == null) {
writeItem(keyName, keyType, key, context, writer);
}
if (valueConverter == null) {
writeItem(valueName, valueType, value, context, writer);
} else if (valueName == null) {
writer.setValue(valueConverter.toString(value));
}
if (entryName != null) {
writer.endNode();
}
}
}