{"record":{"id":"67cbaa6d8bddae07","repo":"pinpoint-apm/pinpoint","slug":"invalid-oracle-jdbc-url-driverurl","errorCode":null,"errorMessage":"invalid oracle jdbc url:<driverUrl>","messagePattern":"invalid oracle jdbc url:<driverUrl>","errorType":"validation","errorClass":"OracleConnectionStringException","httpStatus":null,"severity":"error","filePath":"agent-module/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/parser/OracleNetConnectionDescriptorParser.java","lineNumber":87,"sourceCode":"            throw new OracleConnectionStringException(\"parsing error. expected token:'EOF' token:null\");\n        }\n        if (eof != OracleNetConnectionDescriptorTokenizer.TOKEN_EOF_OBJECT) {\n            throw new OracleConnectionStringException(\"parsing error. expected token:'EOF' token:\" + eof);\n        }\n    }\n\n    public DriverType getDriverType() {\n        return driverType;\n    }\n\n    private int nextPosition(String driverUrl) {\n        final int thinLength = driverUrl.length();\n        if (normalizedUrl.startsWith(\":@\", thinLength)) {\n            return thinLength + 2;\n        } else if(normalizedUrl.startsWith(\"@\", thinLength)) {\n            return thinLength + 1;\n        } else {\n            throw new OracleConnectionStringException(\"invalid oracle jdbc url:\" + driverUrl);\n        }\n    }\n\n    private KeyValue parseKeyValue() {\n\n        // start\n        this.tokenizer.checkStartToken();\n\n\n        // key\n        Token literalToken = this.tokenizer.getLiteralToken();\n        KeyValue.Builder keyValue = new KeyValue.Builder(literalToken.getToken());\n\n        // =\n        this.tokenizer.checkEqualToken();\n\n        // value compare reduce\n        boolean nonTerminalValue = false;","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/parser/OracleNetConnectionDescriptorParser.java#L69-L105","documentation":"nextPosition() locates where the descriptor begins by checking that the URL starts with the thin-driver prefix 'jdbc:oracle:thin:' followed by either ':@' or '@'. If the URL does not contain the '@' marker at the expected position, the parser throws 'invalid oracle jdbc url:<driverUrl>'. It is an upfront format check, so a malformed URL fails immediately before tokenization.","triggerScenarios":"Calling OracleNetConnectionDescriptorParser.parse(url) with a URL whose portion after 'jdbc:oracle:thin:' does not begin with '@' or ':@' — e.g. 'jdbc:oracle:thin:host:1521:SID' or 'jdbc:oracle:oci8:@...' reaching this parser.","commonSituations":"Typo omitting the '@' in the JDBC URL; using the wrong driver-type prefix (oci vs thin); a properties/template variable left empty so the '@' section is missing; concatenating the prefix with the descriptor without '@'.","solutions":["Ensure the URL matches jdbc:oracle:thin:@... exactly — restore the missing '@' (and ':' if using the :@ form)","If the URL is a plain host:port:SID form, write it as jdbc:oracle:thin:@host:1521:SID (note the '@')","Confirm the URL is intended for the thin driver; oci URLs may need a different plugin/parser","Validate the JDBC URL format (regex ^jdbc:oracle:thin:(:@)?@?.*) in config validation before startup"],"exampleFix":"// before\nString url = \"jdbc:oracle:thin:dbhost:1521:ORCL\"; // missing '@'\n// after\nString url = \"jdbc:oracle:thin:@dbhost:1521:ORCL\";","handlingStrategy":"validation","validationCode":"static final Pattern THIN_URL = Pattern.compile(\"^jdbc:oracle:thin:(:@)?.+\");\nboolean isValidThinUrl(String url) {\n    return url != null && THIN_URL.matcher(url).matches();\n}","typeGuard":null,"tryCatchPattern":"try {\n    parser.parse(url);\n} catch (OracleConnectionStringException e) {\n    log.error(\"Oracle JDBC URL missing '@' or malformed: {}\", url, e);\n    throw new ConfigurationException(\"jdbc url must match jdbc:oracle:thin:@...\", e);\n}","preventionTips":["Always include '@' after the jdbc:oracle:thin: prefix","Use the exact prefix jdbc:oracle:thin: when this parser is in play","Add URL format validation at startup before any connection attempt"],"tags":["jdbc","oracle","url-format","config"],"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"}