Source:
<code>public URI open(final URI address) throws IllegalAddressException { checkNoAuthority(address); checkNoQuery(address); <START> if (!SCHEME.equalsIgnoreCase(address.getScheme())) { <END> throw new IllegalAddressException( address, IllegalAddressException.Reason.INVALID_SCHEME, null); } final String keyIdentifier = extractFragment(address); if (!KEY_ID_REGEX.matcher(keyIdentifier).matches()) { throw new IllegalAddressException( address, IllegalAddressException.Reason.INVALID_FRAGMENT, null); } final String path = extractRawPath(address); try { final File dbFile = new File(new File("").toURI().resolve(path).normalize()); final File parent = dbFile.getParentFile(); final String filename = dbFile.getName(); if (dbFile.isFile() || (parent != null && parent.isDirectory() && !dbFile.isDirectory()) && DB_FILENAME_REGEX.matcher(filename).matches()) { final URI fileAddress = dbFile.toURI(); final URI finalAddress = URI.create(SCHEME + ':' + fileAddress.getRawPath() + '#' + address.getRawFragment()); Connection connection = DriverManager.getConnection("jdbc:sqlite:" + fileAddress.getPath()); Statement stmt = null; try { stmt = connection.createStatement(); stmt.executeUpdate( "CREATE TABLE IF NOT EXISTS Keys (" + "id VARCHAR(" + MAX_KEY_ID_LENGTH + ") PRIMARY KEY, " + "data BLOB NOT NULL, " + "modified DATETIME NOT NULL)"); } catch (SQLException ex) { try { connection.close(); } catch (Exception e) throw ex; } finally { try { stmt.close(); } catch (Exception e) } this.connection = connection; this.keyIdentifier = keyIdentifier; return finalAddress; } } catch (SQLException ex) { throw new IllegalAddressException( address, IllegalAddressException.Reason.DRIVER_SPECIFIC, ex); } catch (IllegalArgumentException ex) { } throw new IllegalAddressException(address, IllegalAddressException.Reason.INVALID_PATH, null); }</code><technical_language>move this a checkScheme internal method</technical_language>

Target:
public URI open(final URI address) throws StoreException, IllegalAddressException { try { Class.forName("org.sqlite.JDBC").newInstance(); } catch (Exception ex) { throw new StoreException("SQLite JDBC not available.", ex); } checkNoAuthority(address); checkNoQuery(address); checkScheme(address); final String keyIdentifier = extractKeyIdentifier(address); final String path = extractRawPath(address); try { final File dbFile = new File(new File("").toURI().resolve(path).normalize()); final File parent = dbFile.getParentFile(); final String filename = dbFile.getName(); if (dbFile.isFile() || (parent != null && parent.isDirectory() && !dbFile.isDirectory()) && DB_FILENAME_REGEX.matcher(filename).matches()) { final URI fileAddress = dbFile.toURI(); final URI finalAddress = URI.create(SCHEME + ':' + fileAddress.getRawPath() + '#' + address.getRawFragment()); Connection connection = openConnection(fileAddress.getPath()); this.connection = connection; this.keyIdentifier = keyIdentifier; return finalAddress; } } catch (SQLException ex) { throw new IllegalAddressException( address, IllegalAddressException.Reason.DRIVER_SPECIFIC, ex); } catch (IllegalArgumentException ex) { } throw new IllegalAddressException(address, IllegalAddressException.Reason.INVALID_PATH, null); }