code: private CachingPojoPath getPath(Object pojo, String pojoPath, PojoPathMode mode, PojoPathContext context) {
  
      if (pojo == null) {
        if (mode == PojoPathMode.RETURN_IF_NULL) {
          return null;
        } else if (mode == PojoPathMode.RETURN_IF_NULL) {
          throw new PojoPathCreationException(null, pojoPath);
        } else {
          throw new PojoPathSegmentIsNullException(null, pojoPath);
        }
      }
      PojoPathState state = createState(pojo, pojoPath, mode, context);
      return getRecursive(pojoPath, context, state);
    }
docs: This method contains the internal implementation of {@link #get(Object, String, PojoPathMode, PojoPathContext)}.
  
  @param pojo is the initial {@link net.sf.mmm.util.pojo.api.Pojo} to operate on.
  @param pojoPath is the {@link net.sf.mmm.util.pojo.path.api.PojoPath} to navigate.
  @param mode is the {@link PojoPathMode mode} that determines how to deal with {@code null} values.
  @param context is the {@link PojoPathContext} for this operation.
  @return the {@link CachingPojoPath} for the given {@code pojoPath}.