
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_security_cert_CertPathValidatorException__
#define __java_security_cert_CertPathValidatorException__

#pragma interface

#include <java/security/GeneralSecurityException.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
      namespace cert
      {
          class CertPath;
          class CertPathValidatorException;
      }
    }
  }
}

class java::security::cert::CertPathValidatorException : public ::java::security::GeneralSecurityException
{

public:
  CertPathValidatorException();
  CertPathValidatorException(::java::lang::String *);
  CertPathValidatorException(::java::lang::Throwable *);
  CertPathValidatorException(::java::lang::String *, ::java::lang::Throwable *);
  CertPathValidatorException(::java::lang::String *, ::java::lang::Throwable *, ::java::security::cert::CertPath *, jint);
  virtual ::java::lang::String * getMessage();
  virtual ::java::security::cert::CertPath * getCertPath();
  virtual jint getIndex();
  virtual ::java::lang::Throwable * getCause();
  virtual ::java::lang::String * toString();
  virtual void printStackTrace();
  virtual void printStackTrace(::java::io::PrintStream *);
  virtual void printStackTrace(::java::io::PrintWriter *);
private:
  static const jlong serialVersionUID = -3083180014971893139LL;
  jint __attribute__((aligned(__alignof__( ::java::security::GeneralSecurityException)))) index;
  ::java::security::cert::CertPath * certPath;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_cert_CertPathValidatorException__
