public static Map<String, Object> readMap(XContentParser parser, MapFactory mapFactory)
     throws IOException {
   Map<String, Object> map = mapFactory.newMap();
   XContentParser.Token t = parser.currentToken();
   if (t == null) {
     t = parser.nextToken();
   }
   if (t == XContentParser.Token.START_OBJECT) {
     t = parser.nextToken();
   }
   for (; t == XContentParser.Token.FIELD_NAME; t = parser.nextToken()) {
     // Must point to field name
     String fieldName = parser.currentName();
     // And then the value...
     t = parser.nextToken();
     Object value = readValue(parser, mapFactory, t);
     map.put(fieldName, value);
   }
   return map;
 }