PropMapper findOrCreateMapper(final Class<?> type, final String prop) 
        throws NoSuchFieldException {
    List<PropMapper> pms = propMappers.computeIfAbsent(type, c -> new ArrayList<>());
    Optional<PropMapper> existing = pms.stream()
        .filter(pm -> pm.prop.equals(prop))
        .findAny();
    if (existing.isPresent()) {
      return existing.get();
    } else {
      PropertyDescriptor pd = getPropDescriptor(type, prop);
      Mapper<? super S, ?> m = new BeanMapper<>(pd.getPropertyType(), entityMapper);
      PropMapper pm = pd.getWriteMethod() == null 
          ? new PropMapper(prop, m, "", pd.getReadMethod(), true)
          : new PropMapper(prop, m, "", pd.getWriteMethod());
      pms.add(pm);
      return pm;
    }
  }