FULL PRODUCT VERSION : java version "1.5.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64) Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing) ADDITIONAL OS VERSION INFORMATION : Microsoft Windows XP [Version 5.1.2600] A DESCRIPTION OF THE PROBLEM : I have created my own CertStore provider that works in all previous J2SE 1.4.x versions. Now when I try to get my CertStore instance using the below code in Java 5, then it throws a java.security.NoSuchAlgorithmException saying "Error constructing implementation (algorithm: MY, provider: assembla, class: se.assembla.jce.provider.ms.MSCertStoreMYJNI)": CertStore store = CertStore.getInstance("MY", null, "assembla"); However, if I use the following code, then everything works fine: CertStore store = CertStore.getInstance("MY", new CollectionCertStoreParameters(), "assembla"); The Java 5 Javadoc API specification clearly says the second parameter (CertStoreParameters) can be null: Parameters: type - the requested CertStore type params - the initialization parameters (may be null) provider - the name of the provider Please let me now if you need more information to resolve this. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : 1. Create a simple CertStore provider. 2. Execute the following code (replace the provider and type name with your own): CertStore store = CertStore.getInstance(<type>, null, <provider>); You can also reproduce it by: 1. Download the Assembla JCE Provider from https://download.assembla.se/download/index.jsp 2. Execute the following code: java.security.Security.addProvider(new se.assembla.jce.provider.ms.MSProvider()); java.security.cert.CertStore store = java.security.cert.CertStore.getInstance("MY", null, "assembla"); EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - The CertStore instance. ACTUAL - It throws a java.security.NoSuchAlgorithmException. ERROR MESSAGES/STACK TRACES THAT OCCUR : java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: MY, provider: assembla, class: se.assembla.jce.provider.ms.MSCertStoreMYJNI) at java.security.Provider$Service.newInstance(Provider.java:1099) at sun.security.jca.GetInstance.getInstance(GetInstance.java:227) at sun.security.jca.GetInstance.getInstance(GetInstance.java:196) at java.security.cert.CertStore.getInstance(CertStore.java:238) REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- // This require that you have downloaded the Assembla JCE Provider from: // https://download.assembla.se/download/index.jsp import java.security.Security; import se.assembla.jce.provider.ms.*; import java.security.cert.CertStore; public class FooBar { int main(String[] args) { Security.addProvider(new MSProvider()); CertStore store = CertStore.getInstance("MY", null, "assembla"); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : Replace the the null parameter (i.e. the second parameter) in method call CertStore.getInstance(String,CertStoreParameters,String) with a CollectionCertStoreParameters object: CertStore store = CertStore.getInstance("MY", new CollectionCertStoreParameters(), "assembla"); ###@###.### 2005-1-20 12:40:15 GMT
|