@SuppressWarnings("unchecked") public static <TT> IdRef<TT> parse(Repository r, HttpVerb verb, String path) { if (StringUtils.isBlank(path)) { return null; } String[] parts = path.substring(1).split("/"); if (parts.length < 2) { return null; } IdRef<TT> lastIdRef = null; for (int i = 0; i < parts.length; i += 2) { if (isActionOrCollection(r, verb, parts, i)) { break; } String endpointPath = "/" + parts[i]; IdRef<TT> currentIdRef; if (!isString(parts[i + 1])) { Long asLong = Long.valueOf(parts[i + 1]); currentIdRef = (IdRef<TT>) create(r, getIdRefClazz(r, endpointPath), asLong); } else { String asString = parts[i + 1]; currentIdRef = (IdRef<TT>) create(r, getIdRefClazz(r, endpointPath), asString); } currentIdRef.setParentId(lastIdRef); lastIdRef = currentIdRef; validateParentId(currentIdRef, path); } return lastIdRef; }