@Override
  public void init(String params) {
    try {
      URI uri = new URI(params);
      String storeType = uri.getScheme();
      if (storeType == null || storeType.isEmpty()) {
        throw new RuntimeException("KeyProvider scheme should specify KeyStore type");
      }
      // KeyStore expects instance type specifications in uppercase
      store = KeyStore.getInstance(storeType.toUpperCase(Locale.ROOT));
      processParameters(uri);
      load(uri);
    } catch (URISyntaxException e) {
      throw new RuntimeException(e);
    } catch (KeyStoreException e) {
      throw new RuntimeException(e);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }
A basic KeyProvider that can resolve keys from a protected KeyStore file on the local filesystem.
It is configured with a URI passed in as a String to init(). The URI should have the form:
<p>

<pre>
    scheme://path?option1=value1&amp;option2=value2
</pre>
<p>
<i>scheme</i> can be either "jks" or "jceks", specifying the file based providers shipped with
every JRE. The latter is the certificate store for the SunJCE cryptography extension, or PKCS
#12, and is capable of storing SecretKeys.
<p>
<i>path</i> is the location of the keystore in the filesystem namespace.
<p>
Options can be specified as query parameters.
<p>
If the store was created with a password, the password can be specified using the option
'password'.
<p>
For example:
<p>

<pre>
    jceks:///var/tmp/example.ks?password=foobar
</pre>
<p>
It is assumed that all keys in the store are protected with the same password.
<p>
Alternatively, a properties file can be specified containing passwords for keys in the keystore.

<pre>
    jceks:///var/tmp/example.ks?passwordFile=/var/tmp/example.pw
</pre>
<p>
Subclasses for supporting KeyStores that are not file based can extend the protected methods of
this class to specify the appropriate LoadStoreParameters.
hbase-common/src/main/java/org/apache/hadoop/hbase/io/crypto/KeyStoreKeyProvider.java