{"record":{"id":"9b321a7934711533","repo":"redis/jedis","slug":"cannot-open-redis-connection-due-invalid-uri-s","errorCode":null,"errorMessage":"Cannot open Redis connection due invalid URI \"%s\".","messagePattern":"Cannot open Redis connection due invalid URI \"(.+?)\"\\.","errorType":"exception","errorClass":"InvalidURIException","httpStatus":null,"severity":"critical","filePath":"src/main/java/redis/clients/jedis/Jedis.java","lineNumber":233,"sourceCode":"        .connectionTimeoutMillis(connectionTimeout).socketTimeoutMillis(soTimeout).ssl(ssl)\n        .sslSocketFactory(sslSocketFactory).sslParameters(sslParameters)\n        .hostnameVerifier(hostnameVerifier).build());\n  }\n\n  public Jedis(final String host, final int port, final int connectionTimeout,\n      final int soTimeout, final int infiniteSoTimeout, final boolean ssl,\n      final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters,\n      final HostnameVerifier hostnameVerifier) {\n    this(host, port, DefaultJedisClientConfig.builder()\n        .connectionTimeoutMillis(connectionTimeout).socketTimeoutMillis(soTimeout)\n        .blockingSocketTimeoutMillis(infiniteSoTimeout).ssl(ssl)\n        .sslSocketFactory(sslSocketFactory).sslParameters(sslParameters)\n        .hostnameVerifier(hostnameVerifier).build());\n  }\n\n  public Jedis(URI uri) {\n    if (!JedisURIHelper.isValid(uri)) {\n      throw new InvalidURIException(String.format(\n        \"Cannot open Redis connection due invalid URI \\\"%s\\\".\", uri.toString()));\n    }\n    connection = new Connection(new HostAndPort(uri.getHost(), uri.getPort()),\n        DefaultJedisClientConfig.builder().autoNegotiateProtocol(false)\n            .user(JedisURIHelper.getUser(uri))\n            .password(JedisURIHelper.getPassword(uri)).database(JedisURIHelper.getDBIndex(uri))\n            .protocol(JedisURIHelper.getRedisProtocol(uri))\n            .ssl(JedisURIHelper.isRedisSSLScheme(uri)).build());\n    commandObjects = new CommandObjects(RedisProtocol.REDIS_SERVER_DEFAULT_PROTO);\n  }\n\n  public Jedis(URI uri, final SSLSocketFactory sslSocketFactory,\n      final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) {\n    this(uri, DefaultJedisClientConfig.builder().sslSocketFactory(sslSocketFactory)\n        .sslParameters(sslParameters).hostnameVerifier(hostnameVerifier).build());\n  }\n\n  public Jedis(final URI uri, final int timeout) {","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/redis/jedis/blob/6dac31d4c224fb3257c216f3985340c6f500cdcb/src/main/java/redis/clients/jedis/Jedis.java#L215-L251","documentation":"The Jedis(URI) constructor validates the URI with JedisURIHelper.isValid before opening a connection. If the URI is not a valid Redis URI (bad scheme, missing host/port, non-numeric or out-of-range db index, malformed user/password), it throws InvalidURIException and no connection is created. This is a fail-fast guard so invalid config never reaches the network layer.","triggerScenarios":"new Jedis(URI) where the scheme is not redis/rediss, the URI has no host or port, the db path segment is not a number, or JedisURIHelper cannot parse the userinfo (user/password) portion.","commonSituations":"Copy-pasting a URI from another service (postgres://, amqp://) into Jedis config; environment variables like REDIS_URL being empty or containing extra text; forgetting redis:// scheme (e.g. 'myhost:6379' passed as URI); db index like '/db' instead of '/0'.","solutions":["Validate the URI before constructing Jedis with JedisURIHelper.isValid(uri) and print the reason","Ensure the URI uses redis:// or rediss:// scheme and includes host and port","Parse the URI with new URI(str) in a try-catch first to surface malformed syntax early","Check the env var / config value actually contains a well-formed Redis URI"],"exampleFix":"// before\nJedis jedis = new Jedis(URI.create(System.getenv(\"REDIS_URL\")));\n// after\nURI uri = URI.create(System.getenv(\"REDIS_URL\"));\nif (!JedisURIHelper.isValid(uri)) {\n  throw new IllegalArgumentException(\"Invalid REDIS_URL: \" + uri);\n}\nJedis jedis = new Jedis(uri);","handlingStrategy":"validation","validationCode":"URI uri = URI.create(raw);\nboolean ok = JedisURIHelper.isValid(uri);","typeGuard":"boolean isValidRedisUri(URI uri) { return uri != null && JedisURIHelper.isValid(uri); }","tryCatchPattern":"try {\n  jedis = new Jedis(uri);\n} catch (InvalidURIException e) {\n  log.error(\"Bad Redis URI {}: {}\", uri, e.getMessage());\n  throw new ConfigurationException(e);\n}","preventionTips":["Validate REDIS_URL-style env vars at startup with JedisURIHelper.isValid","Always include the redis:// or rediss:// scheme in configured URIs","Trim and quote-strip config values before URI.create","Keep db indexes in the path numeric (e.g. /0)"],"tags":["uri","configuration","invalid-uri","connection"],"backgroundTag":"invalid-url-format","analyzedSha":"6dac31d4c224fb3257c216f3985340c6f500cdcb","analyzedAt":"2026-09-08T04:55:01.204Z","contentChangedAt":"2026-09-08T04:55:01.204Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}