{"record":{"id":"447f4379715601a0","repo":"karatelabs/karate","slug":"no-such-match-api","errorCode":null,"errorMessage":"no such match api: ","messagePattern":"no such match api: ","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"karate-core/src/main/java/io/karatelabs/match/Value.java","lineNumber":447,"sourceCode":"        return switch (name) {\n            case \"equals\" -> call(Match.Type.EQUALS);\n            case \"contains\" -> call(Match.Type.CONTAINS);\n            case \"containsDeep\" -> call(Match.Type.CONTAINS_DEEP);\n            case \"containsOnly\" -> call(Match.Type.CONTAINS_ONLY);\n            case \"containsOnlyDeep\" -> call(Match.Type.CONTAINS_ONLY_DEEP);\n            case \"containsAny\" -> call(Match.Type.CONTAINS_ANY);\n            case \"notEquals\" -> call(Match.Type.NOT_EQUALS);\n            case \"eachEquals\" -> call(Match.Type.EACH_EQUALS);\n            case \"notContains\" -> call(Match.Type.NOT_CONTAINS);\n            case \"eachNotEquals\" -> call(Match.Type.EACH_NOT_EQUALS);\n            case \"eachContains\" -> call(Match.Type.EACH_CONTAINS);\n            case \"eachNotContains\" -> call(Match.Type.EACH_NOT_CONTAINS);\n            case \"eachContainsDeep\" -> call(Match.Type.EACH_CONTAINS_DEEP);\n            case \"eachContainsOnly\" -> call(Match.Type.EACH_CONTAINS_ONLY);\n            case \"eachContainsAny\" -> call(Match.Type.EACH_CONTAINS_ANY);\n            case \"within\" -> call(Match.Type.WITHIN);\n            case \"notWithin\" -> call(Match.Type.NOT_WITHIN);\n            default -> throw new RuntimeException(\"no such match api: \" + name);\n        };\n    }\n\n}\n","sourceCodeStart":429,"sourceCodeEnd":452,"githubUrl":"https://github.com/karatelabs/karate/blob/a22eb90246d958d15a47bf436693d0121ad2812d/karate-core/src/main/java/io/karatelabs/match/Value.java#L429-L452","documentation":"Value.jsGet routes match-API method names (equals, contains, containsDeep, eachContains, within, notWithin, etc.) called on a match Value to a Match.Type. When the requested name is not one of the supported match APIs, the library throws 'no such match api: <name>'. This protects against typos and removed/renamed match verbs.","triggerScenarios":"Calling an unknown method on a match Value from JS, e.g. karate.match(x).containst(...) or a match verb that was renamed between karate versions (e.g. containsOnlyDeep vs containsDeepOnly variants).","commonSituations":"Typo in a feature/JS match call, migrating older karate scripts whose match API names changed in the karatelabs v2 refactor, or dynamically constructed method names that don't resolve.","solutions":["Check the method name against the supported list in Value.jsGet (equals, contains, notContains, containsDeep, containsOnly, containsAny, each* variants, within, notWithin) and fix the typo","Consult docs/DESIGN.md or the Match.Type enum for the current set of match APIs in this version","If migrating from older Karate, rename legacy match verbs to their v2 equivalents"],"exampleFix":"// before\nMatch.that(actual).containsOnlyDeep(expected); // no such api\n// after\nMatch.that(actual).containsDeep(expected); // supported match api","handlingStrategy":"validation","validationCode":"java.util.Set<String> VALID = java.util.Set.of(\"equals\",\"contains\",\"notContains\",\"containsDeep\",\"containsOnly\",\"containsAny\",\"containsOnlyAny\",\"eachEquals\",\"eachNotEquals\",\"eachContains\",\"eachNotContains\",\"eachContainsDeep\",\"eachContainsOnly\",\"eachContainsAny\",\"within\",\"notWithin\");\nif (!VALID.contains(apiName)) { throw new IllegalArgumentException(\"unknown match api: \" + apiName); }","typeGuard":null,"tryCatchPattern":"try {\n    return matchValueJs.getMember(name);\n} catch (RuntimeException e) {\n    if (e.getMessage().startsWith(\"no such match api:\")) {\n        throw new IllegalStateException(\"typo in match api: \" + e.getMessage());\n    }\n    throw e;\n}","preventionTips":["Keep a shared constant list of valid match api names used by dynamic call sites","Check the Match.Type enum / Value.jsGet switch when upgrading karate versions","Rely on IDE completion instead of string-built method names where possible"],"tags":["match","api","invalid-enum","javascript"],"backgroundTag":"invalid-enum-value","analyzedSha":"a22eb90246d958d15a47bf436693d0121ad2812d","analyzedAt":"2026-09-12T09:01:00.220Z","contentChangedAt":"2026-09-12T09:01:00.220Z","schemaVersion":2},"datasetVersion":"2026-09-16T19:17:19.609Z"}