docs: public static <T> T navigateStrict( final Object source, final Object... paths ) throws UnsupportedOperationException {
  
          Object destination = source;
          for ( Object path : paths ) {
              if ( path == null ) {
                  throw new UnsupportedOperationException("path is null");
              }
              if ( destination == null ) {
                  throw new UnsupportedOperationException("source is null");
              }
  
              if ( destination instanceof Map ) {
                  Map temp = (Map) destination;
                  if (temp.containsKey( path ) ) {
  
                      // if we don't check for containsKey first, then the Map.get call
                      //  would return null for keys that don't actually exist.
                      destination = ((Map) destination).get(path);
                  }
                  else {
                      throw new UnsupportedOperationException("no entry for '" + path  + "' found while traversing the JSON");
                  }
              }
              else if ( destination instanceof List ) {
  
                  if ( ! (path instanceof Integer) ) {
                      throw new UnsupportedOperationException( "path '" + path + "' is trying to be used as an array index");
                  }
  
                  List destList = (List) destination;
                  int pathInt = (Integer) path;
  
                  if ( pathInt < 0 || pathInt > destList.size() ) {
                      throw new UnsupportedOperationException( "path '" + path + "' is negative or outside the range of the list");
                  }
  
                  destination = destList.get( pathInt );
              }
              else {
                  throw new UnsupportedOperationException("Navigation supports only Map and List source types and non-null String and Integer path types");
              }
          }
          return cast(destination);
      }