code: public static synchronized EntityClassReader getClassReaderFor(Class entityClass, String geometryPropertyName, String idPropertyName) {
          if (entityClass == null) {
              return null;
          }
          String entryKey = "" + geometryPropertyName + "|" + idPropertyName;
          Map<String, EntityClassReader> readersForClass = allReaders.get(entityClass);
          if (readersForClass == null) {
              readersForClass = new HashMap<String, EntityClassReader>();
              allReaders.put(entityClass, readersForClass);
          }
          if (!readersForClass.containsKey(entryKey)) {
              readersForClass.put(entryKey, new EntityClassReader(entityClass, geometryPropertyName, idPropertyName));
          }
          return readersForClass.get(entryKey);
      }
docs: Factorymethod that returns the reader for a given entity class which allows for easy access to properties of an
  object of an unknown class. Although any class can be given to the reader, the reader is made specifically for features.
  <br>
  A feature has two <i>special</i> properties, which do not appear in the list of properties but
  are instead retrieved through a dedicated method: getGeometry() and getId(). The reader retrieved by this method
  allows the user to specify the name of the geometry and id property. If for some reason, the given properties
  would not exist in the given class, or if the given property names are null, calling getId() or getGeometry() respectively
  will just return null. If the property that corresponds with the geometryPropertyName exists but corresponds with
  a non-geometry type, it is ignored and getGeometry() will return null. The property will, however, be added
  as a normal property.
  <br>
  
  @param entityClass          the class for which a reader is desired.
  @param geometryPropertyName the name of the property representing the geometry of the feature
  @param idPropertyName       the name of the property representing the id of the feature
  @return the reader for the given class, which is unique. Subsequent calls to this with the same entityclass and
  propertynames will return the same readerobject.