Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4408997

implementation for CCC# 4389921 does not work: Add getInstance(String, Provider)

XMLWordPrintable

    • beta
    • sparc
    • solaris_2.6

      An implementation of new API introduced in JDK-Merlin does not work.
      Invoking CertPathBuilder.getInstance(String, Provider) causes the following
      exception:
      java.lang.IllegalArgumentException: argument type mismatch
      at java.lang.reflect.Method.invoke(Native Method)
      at java.security.cert.CertPathBuilder.getInstance(CertPathBuilder.java:232)

      Indeed, in the sources there almost is no difference betweet realization of getInstance(String, String) and getInstance(String, Provider) and in the second
      case Security.getImpl(String, String, String) method invoking with wrong parameter.

      There is a minimized test :
      -------------------------------
      import java.security.cert.CertPathParameters;
      import java.security.cert.CertPathBuilderResult;
      import java.security.cert.CertPathBuilderSpi;
      import java.security.Provider;
      import java.security.AccessController;
      import java.security.cert.CertPathBuilder;
      import java.security.NoSuchAlgorithmException;


      public class getInstanceTest {

          public static void main(String[] argv) {
              String stubCPB = "StubCPBSpi";
              String stubAlgorithm = "CertPathBuilder.PKIX";
              Provider stubProvider = new StubProvider( stubAlgorithm, stubCPB);
              try {
                  CertPathBuilder cpb = CertPathBuilder.getInstance( "PKIX", stubProvider);
                  Provider provider = cpb.getProvider();
                  if( provider.getName().equals( stubAlgorithm) ) {
                      System.out.println(" Algorithm "+stubAlgorithm+" found in the specified provider "+stubProvider);
                  } else {
                      System.out.println(" Provider name does not match with specified");
                      System.out.println(" FAILED ");
                  }
              } catch(NoSuchAlgorithmException nsae) {
                  System.out.println(" Algorithm "+stubAlgorithm+" has not been found in provider "+stubProvider);
                  System.out.println(" FAILED ");
              }
              System.out.println(" OKAY ");
          }
      }

      class StubProvider extends Provider {
          final String algorithm1;
          final String spiClass1;

          public StubProvider(String algorithm, String spiClass) {
              super( algorithm, 1.1, "No Info");
              this.algorithm1 = algorithm;
              this.spiClass1 = spiClass;
              AccessController.doPrivileged(new java.security.PrivilegedAction() {
                  public Object run() {
                      put( algorithm1, spiClass1);
                      return null;
                  } } );

          }
      }

      class StubCPBSpi extends CertPathBuilderSpi {
          public boolean called;
          public StubCPBSpi() {
              super();
              called = false;
          }
          public CertPathBuilderResult engineBuild(CertPathParameters params) {
              called = true;
              return null;
          }
      }

      ---------------------------- output from the test

      :\>java getInstanceTest
      Exception in thread "main" java.lang.IllegalArgumentException: argument type mismatch
              at java.lang.reflect.Method.invoke(Native Method)
              at java.security.cert.CertPathBuilder.getInstance(CertPathBuilder.java:232)
              at getInstanceTest.main(getInstanceTest.java:17)

            shihliu Sharon Liu (Inactive)
            anssunw Ans Ans (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: