{"record":{"id":"6d57efcd5674761a","repo":"pinpoint-apm/pinpoint","slug":"description-node-not-found","errorCode":null,"errorMessage":"description node not found","messagePattern":"description 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/Description.java","lineNumber":47,"sourceCode":"    public static final String DESCRIPTION = \"description\";\n\n    private String serviceName;\n    private String sid;\n    private final ArrayList<Address> addressList = new ArrayList<>();\n\n    public Description() {\n    }\n\n    public Description(KeyValue<?> keyValue) {\n        Objects.requireNonNull(keyValue, \"keyValue\");\n\n        mapping(keyValue);\n    }\n\n\n    private void mapping(KeyValue<?> keyValue) {\n        if (!compare(DESCRIPTION, keyValue)) {\n            throw new OracleConnectionStringException(DESCRIPTION  + \" node not found\");\n        }\n        if (!(keyValue instanceof KeyValue.KeyValueList)) {\n            return;\n        }\n        final KeyValue.KeyValueList keyValueList = (KeyValue.KeyValueList) keyValue;\n        for (KeyValue<?> kv : keyValueList.getValue()) {\n            if (compare(\"address\", kv)) {\n                if (kv instanceof KeyValue.KeyValueList) {\n                    final KeyValue.KeyValueList addressList = (KeyValue.KeyValueList) kv;\n                    String host = null;\n                    String port = null;\n                    String protocol = null;\n                    for (KeyValue<?> addressKv : addressList.getValue()) {\n                        if (addressKv instanceof KeyValue.TerminalKeyValue) {\n                            final KeyValue.TerminalKeyValue terminal = (KeyValue.TerminalKeyValue) addressKv;\n                            if (compare(\"host\", terminal)) {\n                                host = terminal.getValue();\n                            } else if (compare(\"port\", terminal)) {","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/parser/Description.java#L29-L65","documentation":"Description.mapping(KeyValue) parses an Oracle net connection descriptor. It requires the top-level node of the (DESCRIPTION=...) string to be the DESCRIPTION key; if the current key/value is not DESCRIPTION it throws OracleConnectionStringException('description node not found').","triggerScenarios":"Parsing a JDBC URL of the form jdbc:oracle:thin:@(DESCRIPTION=...) whose descriptor's top node is not DESCRIPTION — e.g. it is ADDRESS_LIST, CONNECT_DATA, or malformed so the first key parsed isn't DESCRIPTION.","commonSituations":"URL uses shorthand forms like jdbc:oracle:thin:@host:port:sid or @(ADDRESS=(...)) that aren't full DESCRIPTION descriptors; typos like DESCRIPTIONS= or lowercase/extra whitespace confusing the key compare.","solutions":["Ensure the URL contains a full descriptor starting with (DESCRIPTION=(ADDRESS=...)(CONNECT_DATA=...))","Check the top-level token is exactly DESCRIPTION","Use a standard host:port/service_name URL if you don't need a TNS descriptor","Test the descriptor with tnsping to confirm it is valid TNSNAMES syntax"],"exampleFix":"// before\njdbc:oracle:thin:@(ADDRESS=(PROTOCOL=TCP)(HOST=h)(PORT=1521))\n// after\njdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=h)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))","handlingStrategy":"try-catch","validationCode":"String url = jdbcUrl.substring(jdbcUrl.indexOf('@') + 1);\nif (!url.startsWith(\"(DESCRIPTION\")) {\n    // fall back to host:port/sid parsing or reject before invoking the parser\n}","typeGuard":"static boolean isDescriptionDescriptor(String u) {\n    int at = u.indexOf('@');\n    return at >= 0 && u.substring(at + 1).trim().toUpperCase().startsWith(\"(DESCRIPTION\");\n}","tryCatchPattern":"try {\n    new Description(keyValue);\n} catch (OracleConnectionStringException e) {\n    // descriptor lacks a DESCRIPTION node — rewrite the JDBC URL or fall back\n}","preventionTips":["Only pass full (DESCRIPTION=...) descriptors to the parser","Use host:port/service_name URLs when a TNS descriptor is not required","Validate descriptors with tnsping first"],"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"}