org_apache_struts2_rest_RestActionMapperTest_java
org.apache.struts2.rest.RestActionMapper
@Override
    public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) {
        ActionMapping mapping = new ActionMapping();
        String uri = RequestUtils.getUri(request);
        if ((uri = this.dropExtension(uri, mapping)) == null) {
            return null;
        }
        this.parseNameAndNamespace(uri, mapping, configManager);
        this.handleSpecialParameters(request, mapping);
        if (mapping.getName() == null) {
            return null;
        }
        this.handleDynamicMethodInvocation(mapping, mapping.getName());
        String fullName = mapping.getName();
        if (StringUtils.isNotEmpty(fullName)) {
            int scPos = fullName.indexOf(59);
            if (scPos > -1 && !"edit".equals(fullName.substring(scPos + 1))) {
                fullName = fullName.substring(0, scPos);
            }
            int lastSlashPos = fullName.lastIndexOf(47);
            String id = null;
            if (lastSlashPos > -1) {
                int prevSlashPos = fullName.lastIndexOf(47, lastSlashPos - 1);
                if (prevSlashPos > -1 && mapping.getMethod() == null) {
                    mapping.setMethod(fullName.substring(lastSlashPos + 1));
                    fullName = fullName.substring(0, lastSlashPos);
                    lastSlashPos = prevSlashPos;
                }
                id = fullName.substring(lastSlashPos + 1);
            }
            if (mapping.getMethod() == null) {
                if (this.isOptions(request)) {
                    mapping.setMethod(this.optionsMethodName);
                } else if (lastSlashPos == -1 || lastSlashPos == fullName.length() - 1) {
                    if (this.isGet(request)) {
                        mapping.setMethod(this.indexMethodName);
                    } else if (this.isPost(request)) {
                        if (this.isExpectContinue(request)) {
                            mapping.setMethod(this.postContinueMethodName);
                        } else {
                            mapping.setMethod(this.postMethodName);
                        }
                    }
                } else if (id != null) {
                    if (this.isGet(request) && id.endsWith(";edit")) {
                        id = id.substring(0, id.length() - ";edit".length());
                        mapping.setMethod(this.editMethodName);
                    } else if (this.isGet(request) && "new".equals(id)) {
                        mapping.setMethod(this.newMethodName);
                    } else if (this.isDelete(request)) {
                        mapping.setMethod(this.deleteMethodName);
                    } else if (this.isGet(request)) {
                        mapping.setMethod(this.getMethodName);
                    } else if (this.isPut(request)) {
                        if (this.isExpectContinue(request)) {
                            mapping.setMethod(this.putContinueMethodName);
                        } else {
                            mapping.setMethod(this.putMethodName);
                        }
                    }
                }
            }
            if (id != null) {
                if (!"new".equals(id)) {
                    if (mapping.getParams() == null) {
                        mapping.setParams(new HashMap<String, Object>());
                    }
                    mapping.getParams().put(this.idParameterName, new String[]{id});
                }
                fullName = fullName.substring(0, lastSlashPos);
            }
            mapping.setName(this.cleanupActionName(fullName));
        }
        return mapping;
    }
 -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.String.endsWith(java.lang.String): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String -> java.lang.CharSequence.length(): int -> java.lang.CharSequence.length(): int -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.lang.String.endsWith(java.lang.String): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.lastIndexOf(int): int -> java.lang.String.lastIndexOf(java.lang.String): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.Map.values(): java.util.Collection -> java.util.Collection.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.startsWith(java.lang.String): boolean -> java.util.Iterator.hasNext(): boolean -> java.lang.String.length(): int -> java.lang.String.substring(int): java.lang.String -> java.util.regex.Pattern.matcher(java.lang.CharSequence): java.util.regex.Matcher -> java.util.regex.Matcher.matches(): boolean -> java.util.Collections.unmodifiableMap(java.util.Map): java.util.Map -> java.util.Map.keySet(): java.util.Set -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.lang.String.lastIndexOf(java.lang.String): int -> java.lang.CharSequence.length(): int -> java.lang.String.indexOf(int): int -> java.lang.String.substring(int): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.lastIndexOf(int): int -> java.lang.String.lastIndexOf(int,int): int -> java.lang.String.substring(int): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean -> java.lang.String.length(): int -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean -> java.lang.String.endsWith(java.lang.String): boolean -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object -> java.lang.String.substring(int,int): java.lang.String -> java.util.regex.Pattern.matcher(java.lang.CharSequence): java.util.regex.Matcher -> java.util.regex.Matcher.matches(): boolean
 [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] [EXIT] -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.endsWith(java.lang.String): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String [CALL] [CALL] -> java.lang.CharSequence.length(): int [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.CharSequence.length(): int [EXIT] [EXIT] [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.lang.String.endsWith(java.lang.String): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.lastIndexOf(int): int [EXIT] [CALL] -> java.lang.String.lastIndexOf(java.lang.String): int [CALL] [CALL] [EXIT] [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] [EXIT] -> java.util.Map.values(): java.util.Collection -> java.util.Collection.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] -> java.lang.String.startsWith(java.lang.String): boolean -> java.util.Iterator.hasNext(): boolean -> java.lang.String.length(): int -> java.lang.String.substring(int): java.lang.String [CALL] -> java.util.regex.Pattern.matcher(java.lang.CharSequence): java.util.regex.Matcher -> java.util.regex.Matcher.matches(): boolean [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] -> java.util.Collections.unmodifiableMap(java.util.Map): java.util.Map [EXIT] -> java.util.Map.keySet(): java.util.Set -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.String.lastIndexOf(java.lang.String): int [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.lang.CharSequence.length(): int [EXIT] [EXIT] -> java.lang.String.indexOf(int): int -> java.lang.String.substring(int): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.lastIndexOf(int): int -> java.lang.String.lastIndexOf(int,int): int -> java.lang.String.substring(int): java.lang.String [CALL] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean [EXIT] -> java.lang.String.length(): int [CALL] [CALL] [EXIT] -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean [EXIT] -> java.lang.String.endsWith(java.lang.String): boolean [CALL] [CALL] [EXIT] -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [CALL] [EXIT] -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean [CALL] -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.util.regex.Pattern.matcher(java.lang.CharSequence): java.util.regex.Matcher -> java.util.regex.Matcher.matches(): boolean [EXIT] [CALL] [EXIT] [EXIT]