Up to Java 8 the SunPKCS11 provider was loaded like this:
Provider provider = new sun.security.pkcs11.SunPKCS11 (new ByteArrayInputStream (configFile.getBytes ());
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by PruebaTarjeta (file:/C:/temp/pkcs11java9/classes/) to constructor
WARNING: Please consider reporting this to the maintainers of PruebaTarjeta
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
If you look at the javadoc for
Apply the supplied configuration argument to this provider instance and return the configured provider. Note that if this provider cannot be configured in-place, a new provider will be created and returned. Therefore, callers should always use the returned provider.
This indicates that the new control flow for creating multiple providers would be something like:
Provider prototype = Security.getProvider("SunPKCS11"); Provider provider1 = prototype.configure(...); Provider provider2 = prototype.configure(...); ...