{"record":{"id":"e26439d49ab7faa4","repo":"pinpoint-apm/pinpoint","slug":"description-list-node-not-found","errorCode":null,"errorMessage":"description_list node not found","messagePattern":"description_list node not found","errorType":"validation","errorClass":"OracleConnectionStringException","httpStatus":null,"severity":"error","filePath":"agent-module/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/parser/DescriptionList.java","lineNumber":34,"sourceCode":"\npackage com.navercorp.pinpoint.plugin.jdbc.oracle.parser;\n\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\n\nimport static com.navercorp.pinpoint.plugin.jdbc.oracle.parser.ParserUtils.compare;\n\npublic class DescriptionList implements DatabaseSpec {\n    public static final String DESCRIPTION_LIST = \"description_list\";\n\n    private final List<Description> descriptionList = new ArrayList<>();\n\n    public DescriptionList(KeyValue<?> keyValue) {\n        if (keyValue instanceof KeyValue.TerminalKeyValue) {\n            if (!compare(DESCRIPTION_LIST, keyValue)) {\n                throw new OracleConnectionStringException(DESCRIPTION_LIST + \" node not found\");\n            }\n        }\n        if (keyValue instanceof KeyValue.KeyValueList) {\n            KeyValue.KeyValueList kvList = (KeyValue.KeyValueList) keyValue;\n            for (KeyValue<?> desc : kvList.getValue()) {\n                if (compare(Description.DESCRIPTION, desc)) {\n                    Description description = new Description(desc);\n                    this.descriptionList.add(description);\n                }\n            }\n        }\n    }\n\n    public List<Description> getDescriptionList() {\n        return descriptionList;\n    }\n\n    @Override","sourceCodeStart":16,"sourceCodeEnd":52,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/parser/DescriptionList.java#L16-L52","documentation":"DescriptionList wraps a list of DESCRIPTION nodes parsed from an Oracle connection descriptor. When given a terminal key/value it verifies the key is DESCRIPTION_LIST; anything else throws OracleConnectionStringException('description_list node not found').","triggerScenarios":"Parsing jdbc:oracle:thin:@(DESCRIPTION_LIST=...) style URLs where the top-level node key is not exactly DESCRIPTION_LIST — e.g. a single DESCRIPTION node, ADDRESS node, or a misspelled key.","commonSituations":"Using a descriptor form the parser doesn't expect (single DESCRIPTION passed where DESCRIPTION_LIST is required); typo'd or lowercased key; hand-built TNS descriptor string.","solutions":["Verify the URL's top node is exactly (DESCRIPTION_LIST=(DESCRIPTION=...)) when the descriptor is list-based","Or switch to a single (DESCRIPTION=...) URL, which parses via Description","Check key spelling and casing","Validate the descriptor with tnsping"],"exampleFix":"// before\njdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=...)(CONNECT_DATA=...))\n// after (list form)\njdbc:oracle:thin:@(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=...)(CONNECT_DATA=...)))","handlingStrategy":"validation","validationCode":"if (!jdbcUrl.contains(\"(DESCRIPTION_LIST\")) {\n    // use single-DESCRIPTION parsing path instead of DescriptionList\n}","typeGuard":"static boolean isDescriptionList(String u) {\n    int at = u.indexOf('@');\n    return at >= 0 && u.substring(at + 1).trim().toUpperCase().startsWith(\"(DESCRIPTION_LIST\");\n}","tryCatchPattern":"try {\n    new DescriptionList(keyValue);\n} catch (OracleConnectionStringException e) {\n    // top node is not DESCRIPTION_LIST — try Description for single-node descriptors\n}","preventionTips":["Match parser to descriptor form: DESCRIPTION_LIST vs single DESCRIPTION","Check key casing/spelling in hand-written descriptors","Test with tnsping before wiring into the agent"],"tags":["jdbc","oracle","url-parsing","connection-string"],"backgroundTag":"invalid-url-format","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}