code: 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);
      }
docs: Navigate a JSON tree (made up of Maps and Lists) to "lookup" the value
  at a particular path.
  
  You will either get your data, or an exception will be thrown.
  
  This method should generally only be used in situations where you "know"
  that the navigate call will "always succeed".
  
  @param source the source JSON object (Map, List, String, Number)
  @param paths varargs path you want to travel
  @return the object of Type <T> at final destination
  @throws UnsupportedOperationException if there was any problem walking the JSON tree structure